发新帖

dubbo整合zookeeper示例

zhujun 5月前 78

zookeeper定义:
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

dubbo:
DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。

下载zookeeper
地址:http://www.apache.org/dist/zookeeper/zookeeper-3.3.6/
版本:zookeeper-3.3.6

下载dubbo源码
地址:https://github.com/alibaba/dubbo
用GIT将代码clone下来:git  clone  https://github.com/alibaba/dubbo.git

启动zookeeper,windows环境:
本地目录:D:\Program  Files\zookeeper-3.3.6\bin
启动:zkServer.cmd
D:\Program  Files\zookeeper-3.3.6\bin>java  "-Dzookeeper.log.dir=D:\Program  Files\zookeeper-3.3.6\bin\.."  "-Dzookeeper.root.logger=INFO,CONSOLE"  -cp  "D:\Program  Files\zookeeper-3.3.6\bin\..\build\classes;D:\Program  Files\zookeeper-3.3.6\bin\..\build\lib\*;D:\Program  Files\zookeeper-3.3.6\bin\..\*;D:\Program  Files\zookeeper-3.3.6\bin\..\lib\*;D:\Program  Files\zookeeper-3.3.6\bin\..\conf"  org.apache.zookeeper.server.quorum.QuorumPeerMain  "D:\Program  Files\zookeeper-3.3.6\bin\..\conf\zoo.cfg"
2017-04-22  10:27:44,778  -  INFO    [main:QuorumPeerConfig@90]  -  Reading  configuration  from:  D:\Program  Files\zookeeper-3.3.6\bin\..\conf\zoo.cfg
2017-04-22  10:27:44,785  -  WARN    [main:QuorumPeerMain@105]  -  Either  no  config  or  no  quorum  defined  in  config,  running    in  standalone  mode
2017-04-22  10:27:44,859  -  INFO    [main:QuorumPeerConfig@90]  -  Reading  configuration  from:  D:\Program  Files\zookeeper-3.3.6\bin\..\conf\zoo.cfg
2017-04-22  10:27:44,860  -  INFO    [main:ZooKeeperServerMain@94]  -  Starting  server
2017-04-22  10:27:53,883  -  INFO    [main:Environment@97]  -  Server  environment:zookeeper.version=3.3.6-1366786,  built  on  07/29/2012  06:22  GMT
2017-04-22  10:27:53,905  -  INFO    [main:Environment@97]  -  Server  environment:host.name=DESKTOP-G26SONG
2017-04-22  10:27:53,920  -  INFO    [main:Environment@97]  -  Server  environment:java.version=1.8.0_121
2017-04-22  10:27:53,928  -  INFO    [main:Environment@97]  -  Server  environment:java.vendor=Oracle  Corporation
2017-04-22  10:27:53,937  -  INFO    [main:Environment@97]  -  Server  environment:java.home=C:\Program  Files  (x86)\Java\jre1.8
2017-04-22  10:27:53,941  -  INFO    [main:Environment@97]  -  Server  environment:java.class.path=D:\Program  Files\zookeeper-3.3.6\bin\..\build\classes;D:\Program  Files\zookeeper-3.3.6\bin\..\build\lib\*;D:\Program  Files\zookeeper-3.3.6\bin\..\zookeeper-3.3.6.jar;D:\Program  Files\zookeeper-3.3.6\bin\..\lib\jline-0.9.94.jar;D:\Program  Files\zookeeper-3.3.6\bin\..\lib\log4j-1.2.15.jar;D:\Program  Files\zookeeper-3.3.6\bin\..\conf
2017-04-22  10:27:53,967  -  INFO    [main:Environment@97]  -  Server  environment:java.library.path=C:\ProgramData\Oracle\Java\javapath;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\ProgramData\Oracle\Java\javapath;C:\Program  Files  (x86)\Intel\iCLS  Client\;C:\Program  Files\Intel\iCLS  Client\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program  Files  (x86)\NVIDIA  Corporation\PhysX\Common;C:\Program  Files  (x86)\Intel\Intel(R)  Management  Engine  Components\DAL;C:\Program  Files\Intel\Intel(R)  Management  Engine  Components\DAL;C:\Program  Files  (x86)\Intel\Intel(R)  Management  Engine  Components\IPT;C:\Program  Files\Intel\Intel(R)  Management  Engine  Components\IPT;D:\Program  Files\TortoiseGit\bin;C:\Program  Files\TortoiseSVN\bin;D:\Program  Files;D:\Program  Files\python;D:\xampp\php;D:\Program  Files\gradle-3.3\bin;D:\Program  Files\python\Scripts;D:\Program  Files\SenchaCmd;.
2017-04-22  10:27:53,999  -  INFO    [main:Environment@97]  -  Server  environment:java.io.tmpdir=C:\Users\MACHEN~1\AppData\Local\Temp\
2017-04-22  10:27:54,005  -  INFO    [main:Environment@97]  -  Server  environment:java.compiler=<NA>
2017-04-22  10:27:54,010  -  INFO    [main:Environment@97]  -  Server  environment:os.name=Windows  10
2017-04-22  10:27:54,016  -  INFO    [main:Environment@97]  -  Server  environment:os.arch=x86
2017-04-22  10:27:54,019  -  INFO    [main:Environment@97]  -  Server  environment:os.version=10.0
2017-04-22  10:27:54,023  -  INFO    [main:Environment@97]  -  Server  environment:user.name=MacheNike
2017-04-22  10:27:54,026  -  INFO    [main:Environment@97]  -  Server  environment:user.home=C:\Users\MacheNike
2017-04-22  10:27:54,036  -  INFO    [main:Environment@97]  -  Server  environment:user.dir=D:\Program  Files\zookeeper-3.3.6\bin
2017-04-22  10:27:54,051  -  INFO    [main:ZooKeeperServer@673]  -  tickTime  set  to  2000
2017-04-22  10:27:54,053  -  INFO    [main:ZooKeeperServer@682]  -  minSessionTimeout  set  to  -1
2017-04-22  10:27:54,061  -  INFO    [main:ZooKeeperServer@691]  -  maxSessionTimeout  set  to  -1
2017-04-22  10:27:54,246  -  INFO    [main:NIOServerCnxn$Factory@143]  -  binding  to  port  0.0.0.0/0.0.0.0:2181
2017-04-22  10:27:54,256  -  INFO    [main:FileSnap@82]  -  Reading  snapshot  \tmp\zookeeper\version-2\snapshot.0
2017-04-22  10:27:54,268  -  INFO    [main:FileTxnSnapLog@256]  -  Snapshotting:  3
2017-04-22  10:27:54,574  -  INFO    [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn$Factory@251]  -  Accepted  socket  connection  from  /127.0.0.1:58772
2017-04-22  10:27:54,596  -  INFO    [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@770]  -  Client  attempting  to  renew  session  0x15b9377cba60000  at  /127.0.0.1:58772
2017-04-22  10:27:54,611  -  INFO    [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:NIOServerCnxn@1580]  -  Established  session  0x15b9377cba60000  with  negotiated  timeout  30000  for  client  /127.0.0.1:58772

启动dubbo-admin,通过源码,在intellij  idea中使用tomcat方式启动dubbo-admin
配置文件:dubbo.properties
dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.admin.root.password=root
dubbo.admin.guest.password=guest
默认密码:root/root  guest/guest

代码实现
对应的API类:
package  cn.ranko.dubbotest.service;

/**
  *  Created  by  zhujun  on  2017/4/22.
  */
public  interface  HelloRegistryService  {
        public  String  hello(String  name);
}

实现类:
package  cn.ranko.dubbotest.service.impl;

import  cn.ranko.dubbotest.service.HelloRegistryService;
import  org.springframework.stereotype.Service;

/**
  *  Created  by  zhujun  on  2017/4/22.
  */
@Service("helloRegistryService")
public  class  HelloRegistryServiceImpl  implements  HelloRegistryService  {
        public  String  hello(String  name)  {
                return  String.format("Hello  %s  !",name);
        }
}

注册到dubbo:
<!--  具体的实现bean  -->
        <bean  id="helloRegistryService"  class="cn.ranko.dubbotest.service.impl.HelloRegistryServiceImpl"  />

        <!--  提供方应用信息,用于计算依赖关系  -->
        <dubbo:application  name="dubbo_provider"  />

        <!--  使用multicast广播注册中心暴露服务地址  -->
        <!--<dubbo:registry  address="multicast://224.5.6.7:1234"  />  -->

        <!--  使用zookeeper注册中心暴露服务地址  即zookeeper的所在服务器ip地址和端口号  -->
        <dubbo:registry  address="zookeeper://127.0.0.1:2181"  />

        <!--  用dubbo协议在20880端口暴露服务  -->
        <dubbo:protocol  name="dubbo"  port="20880"  />

        <!--  声明需要暴露的服务接口  -->
        <dubbo:service  interface="cn.ranko.dubbotest.service.HelloRegistryService"
                                      ref="helloRegistryService"  />

消费者测试:
配置文件:
        <dubbo:application  name="dubbo_consumer"></dubbo:application>
        <dubbo:registry  address="zookeeper://127.0.0.1:2181"  />
        <dubbo:reference  interface="cn.ranko.dubbotest.service.HelloRegistryService"
                                          id="helloRegistryService"  ></dubbo:reference>

测试类:
package  cn.ranko.dubbotest;

import  cn.ranko.dubbotest.service.HelloRegistryService;
import  org.springframework.beans.factory.annotation.Autowired;
import  org.springframework.context.support.ClassPathXmlApplicationContext;

/**
  *  Created  by  zhujun  on  2017/4/22.
  */
public  class  Consumer  {

        @Autowired
        private  HelloRegistryService  helloRegistryService;

        public  static  void  main(String[]  args)  throws  Exception  {
                ClassPathXmlApplicationContext  context  =  new  ClassPathXmlApplicationContext(
                                new  String[]  {  "applicationContext.xml"  });
                context.start();

                HelloRegistryService  helloRegistryService  =  (HelloRegistryService)context.getBean("helloRegistryService");
                System.out.println(helloRegistryService.hello("zhangsan"));
                System.in.read();

        }
       
}


其他问题:
为什么无法在消费者处看到消费者?
答:请在调用代码部分加入断点。就可以看到了。


相关代码:http://git.oschina.net/xmtom/dubbotest
最新回复 (0)
返回
发新帖
zhujun
主题数
24
帖子数
2
注册排名
1