Dubbo+Zookeeper demo实现

1 篇文章 0 订阅
1 篇文章 0 订阅

一、安装zookeeper,集群模式配置

自行百度,下载解压

(由于机器有限,本文使用一台机器不同端口来模拟实现集群模式)

1、创建zookeepere文件夹

2、zookeeper文件夹下新建server1、server2、server3三个文件夹

3、复制解压后的zookeeper文件夹到server1、server2、server3这三个文件夹下

4、再分别在这三个文件夹下创建data、dataLog两个目录

完成后如下图

进入zookeeper-3.4.14/conf文件夹,重命名zoo-sample.cfg为zoo.cfg,并修改配置如下:

# 心跳检测时间间隔,单位ms
tickTime = 2000

#zookeeper集群中包含多台server,其中一台为leader,其余为follower,initLimit参数配置初始化连接时,follower和leader之间的最长心跳时间,设置为5,则表示时间限制为5倍tickTime
initLimit = 5

#syncLimit配置leader和follower之间发送消息、请求和应答的最大时间长度,设置为2,则说明时间限制为2倍tickTime
syncLimit = 2

dataDir=/Library/zookeeper/server1/data
dataLogDir=/Library/zookeeper/server1/dataLog

clientPort=2181
server.1 = 127.0.0.1:2222:2225
server.2 = 127.0.0.1:3333:3335
server.3 = 127.0.0.1:4444:4445

其中dataDir为data文件夹所在的位置, dataLogDir为dataLog文件夹所在的位置

server1里的clientPort=2181, server2里的clientPort=2182, server3里的clientPort=2183

在data文件夹里新增myid文件,文件内容为serverID, 如server1的myid文件的内容为1,server2的myid文件内容为2,以此类推

终端进入zookeeper3.4.14/bin目录下,执行./zkServer.sh start启动zookeeper服务,执行./zkServer.sh status查看服务状态,当状态为一个leader, 2个follower时,则启动成功

二、Dubbo服务生产者

项目结构如下

dubbotestapi项目下创建User对象

public class User implements Serializable{
    private static final long serialVersionUID = 5264854701181085862L;

    private Long id;
    private String username;
    private String password;
    private Integer age;

    public static long getSerialVersionUID() {
        return serialVersionUID;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

创建userAPI接口

public interface UserAPI {
    public List<User> getUsers();
    String sayHello(String name);
}

将dubbotestapi打包生成jar引入dubbotestservice项目,并引入其他依赖的jar包

<dependency>
            <groupId>io.netty</groupId>
            <artifactId>netty-all</artifactId>
            <version>4.1.34.Final</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dubbo</artifactId>
            <version>2.6.6</version>
            <exclusions>
                <exclusion>
                    <artifactId>spring-context</artifactId>
                    <groupId>org.springframework</groupId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.apache.zookeeper</groupId>
            <artifactId>zookeeper</artifactId>
            <version>3.4.14</version>
        </dependency>

        <dependency>
            <groupId>com.github.sgroschupf</groupId>
            <artifactId>zkclient</artifactId>
            <version>0.1</version>
            <exclusions>
                <exclusion>
                    <artifactId>zookeeper</artifactId>
                    <groupId>org.apache.zookeeper</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>log4j</artifactId>
                    <groupId>log4j</groupId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>4.0.1</version>
            <exclusions>
                <exclusion>
                    <artifactId>zookeeper</artifactId>
                    <groupId>org.apache.zookeeper</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>slf4j-api</artifactId>
                    <groupId>org.slf4j</groupId>
                </exclusion>
            </exclusions>
        </dependency>

配置dubbo-provider.xml文件

<?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">

    <bean id="userService" class="com.qjj.service.UserAPIImpl"/>

    <dubbo:application name="dubbo-provider"/>
    <dubbo:registry protocol="zookeeper" address="127.0.0.1:1281,127.0.0.1:2182,127.0.0.1:2183" client="zkclient"/>
    <dubbo:protocol name="dubbo" port="20880"/>
    <dubbo:service interface="com.qjj.api.UserAPI" ref="userService"/>

</beans>

添加userAPI接口的实现类userAPIImpl文件

public class UserAPIImpl implements UserAPI{

    public List<User> getUsers() {
        List<User> list = new ArrayList<User>();

        for (int i=0;i<10;i++){
            User user = new User();
            user.setUsername("username_" + i);
            user.setId(Long.valueOf(i+1));
            user.setAge(10 + i);
            user.setPassword("123456");

            list.add(user);
        }

        return list;
    }

    public String sayHello(String name) {
        return "11111";
    }

三、Dubbo服务消费者

引入依赖的jar包

<dependency>
      <groupId>com.qjj</groupId>
      <artifactId>dubbotest.api</artifactId>
      <version>1.0-SNAPSHOT</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>4.3.12.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>4.3.12.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>4.3.12.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>4.3.12.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>4.3.12.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-oxm</artifactId>
      <version>4.3.12.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>4.3.12.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>4.3.12.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
      <version>4.3.12.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>4.3.12.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>io.netty</groupId>
      <artifactId>netty-all</artifactId>
      <version>4.1.34.Final</version>
    </dependency>

    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>dubbo</artifactId>
      <version>2.6.6</version>
      <exclusions>
        <exclusion>
          <artifactId>spring-context</artifactId>
          <groupId>org.springframework</groupId>
        </exclusion>
      </exclusions>
    </dependency>

    <dependency>
      <groupId>org.apache.zookeeper</groupId>
      <artifactId>zookeeper</artifactId>
      <version>3.4.14</version>
    </dependency>

    <dependency>
      <groupId>com.github.sgroschupf</groupId>
      <artifactId>zkclient</artifactId>
      <version>0.1</version>
      <exclusions>
        <exclusion>
          <artifactId>log4j</artifactId>
          <groupId>log4j</groupId>
        </exclusion>
        <exclusion>
          <artifactId>zookeeper</artifactId>
          <groupId>org.apache.zookeeper</groupId>
        </exclusion>
      </exclusions>
    </dependency>

    <dependency>
      <groupId>org.apache.curator</groupId>
      <artifactId>curator-framework</artifactId>
      <version>4.2.0</version>
      <exclusions>
        <exclusion>
          <artifactId>zookeeper</artifactId>
          <groupId>org.apache.zookeeper</groupId>
        </exclusion>
      </exclusions>
    </dependency>

创建dubbo-consumer.xml文件

<?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
        ">

    <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
    <dubbo:application name="dubbo-consumer" />

    <!-- 使用zookeeper注册中心暴露服务地址 -->
    <!-- <dubbo:registry address="multicast://224.5.6.7:1234" /> -->
    <dubbo:registry protocol="zookeeper" address="127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183" client="zkclient"/>

    <!-- 生成远程服务代理,可以像使用本地bean一样使用demoService -->
    <dubbo:reference id="userService" interface="com.qjj.api.UserAPI" />

</beans>

创建测试类

public class consumer {
    public static void main(String[] args) throws IOException {

        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
                new String[] { "dubbo-consumer.xml" });
        context.start();

        UserAPI userAPI = context.getBean(UserAPI.class);
        String hello = userAPI.sayHello("qijiaojiao");
        System.out.println(hello);

        List list = userAPI.getUsers();
        if (list != null && list.size() > 0) {
            for (int i = 0; i < list.size(); i++) {
                System.out.println(list.get(i));
            }
        }

    }
}

运行测试类,执行结果如下:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值