首页 > 代码库 > 构建 Zookeep + Dubbo + Spring Boot 的分布式调用项目(一)

构建 Zookeep + Dubbo + Spring Boot 的分布式调用项目(一)

一、写在前头

  1. 在开始构建前,默认你已经能够成功安装并启动 Zookeeper 注册中心,能够成功安装并启动 Dubbo 控制台;
  2. 在本例中,我的 Zookeeper 注册中心 IP 地址为 192.168.10.41,端口号为 4183,Dubbo 控制台的访问地址为 http://192.168.10.41:8080;
  3. 为了体现分布式调用,本例中创建了以下两个项目,dubbo-consumer 远程调用 dubbo-provider 提供的服务:
    • dubbo-provider            Dubbo 服务提供者
    • dubbo-consumer         Dubbo 服务消费者
  4. dubbo-consumer 项目的访问路径为 http://192.168.10.41:8012/test/{name} 格式,其中 {name} 为请求参数;


二、使用 Spring Initializr 构建 Dubbo 服务提供者 dubbo-provider 项目

1. 登录 http://start.spring.io/ 填写如下信息后点击 “Generate Project” 按钮,得到 dubbo-provider 项目骨架

技术分享


技术分享


初始 dubbo-provider 项目结构如下:

技术分享


2. 为 dubbo-provider 项目添加依赖:

<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>dubbo</artifactId>
	<version>2.4.10</version>
	<exclusions>
		<exclusion>
			<artifactId>spring</artifactId>
			<groupId>org.springframework</groupId>
		</exclusion>
	</exclusions>
</dependency>
<dependency>
	<groupId>org.apache.zookeeper</groupId>
	<artifactId>zookeeper</artifactId>
	<version>3.4.6</version>
	<exclusions>
		<exclusion>
			<artifactId>slf4j-log4j12</artifactId>
			<groupId>org.slf4j</groupId>
		</exclusion>
	</exclusions>
</dependency>
<dependency>
	<groupId>com.github.sgroschupf</groupId>
	<artifactId>zkclient</artifactId>
	<version>0.1</version>
</dependency>
3. 定义接口:

package com.shawearn.dubbo.remote;
/**
 * 测试远程调用的接口;
 * <p/>
 * Created by Shawearn on 2017/2/14.
 */
public interface TestService {
    String sayHello(String name);
}
4. 实现接口方法:

package com.shawearn.dubbo.provider.impl;
import com.shawearn.dubbo.remote.TestService;
/**
 * Created by Shawearn on 2017/2/14.
 */
public class TestServiceImpl implements TestService {
    @Override
    public String sayHello(String name) {
        return "Hello " + name + "!";
    }
}

5. 在 resource/ 下添加 providers.xml 配置文件,用于向 zookeeper 注册中心注册服务

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://code.alibabatech.com/schema/dubbo
       http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
    <!-- 配置可参考 http://dubbo.io/User+Guide-zh.htm -->
    <!-- 服务提供方应用名,用于计算依赖关系 -->
    <dubbo:application name="dubbo-provider" owner="dubbo-provider"/>
    <!-- 定义 zookeeper 注册中心地址及协议 -->
    <dubbo:registry protocol="zookeeper" address="192.168.10.41:4183" client="zkclient"/>
    <!-- 定义 Dubbo 协议名称及使用的端口,dubbo 协议缺省端口为 20880,如果配置为 -1 或者没有配置 port,则会分配一个没有被占用的端口 -->
    <dubbo:protocol name="dubbo" port="-1"/>
    <!-- 声明需要暴露的服务接口 -->
    <dubbo:service interface="com.shawearn.dubbo.remote.TestService" ref="testService" timeout="10000"/>
    <!-- 和本地 bean 一样实现服务 -->
    <bean id="testService" class="com.shawearn.dubbo.provider.impl.TestServiceImpl" />
</beans>

6. DubboProviderApplication 中使用 providers.xml 配置文件;

package com.shawearn.dubbo.provider;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ImportResource;
@SpringBootApplication
@ImportResource(value = http://www.mamicode.com/{"classpath:providers.xml"}) // 使用 providers.xml 配置;>7. application.properties 中指定项目启动时占用的端口号:

server.port=8011
8. 此时 dubbo-provider 项目结构如下:

技术分享

9. 启动 dubbo-provide 项目,可以通过 Dubbo 服务控制台看到服务已经被注册到 zookeeper:

技术分享


本文示例项目代码可从此地址下载:下载地址


构建 Zookeep + Dubbo + Spring Boot 的分布式调用项目(二)


构建 Zookeep + Dubbo + Spring Boot 的分布式调用项目(一)