Dubbo zookeeper 初探

转:http://blog.csdn.net/u011270461/article/details/12144623

建议参考资料:

http://blog.csdn.net/lin_fs/article/details/7395307

http://blog.csdn.net/goliathray/article/details/8565801

http://zy116494718.iteye.com/blog/1830138

http://agapple.iteye.com/blog/1292473

http://www.open-open.com/news/view/1442a5c

http://code.alibabatech.com/wiki/display/dubbo/Home

http://code.alibabatech.com/wiki/display/dubbo/User+Guide-zh

先把zookeeper在本地给安装好,

安装方法参考:http://blog.csdn.net/wxwzy738/article/details/16330253

这里的话讲述了两个工程一个工程是提供服务的,一个工程是调用服务的,因为dubbo是跟spring进行无缝连接的,故功能配置在spring的配置文件中,跟spring进行整合开发

1、工程是以maven进行构建的,使用的jar包如下:


2、服务提供者的工程

a、dubbo-demo-api  定义接口

public interface IProcessData {
	public String deal(String data);
}
b、 dubbo-demo-provider 服务提供者

public class ProcessDataImpl implements IProcessData {

	/* 
	 * @see com.xxx.bubbo.provider.IProcessData#deal(java.lang.String)
	 */
	@Override
	public String deal(String data) {
		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		return "Finished:" + data;
	}
}

c、applicationProvider.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  
        ">  
  
    <!-- Application name -->  
    <dubbo:application name="hello-world-app" />  
  
    <!-- registry address, used for service to register itself -->  
    <dubbo:registry address="zookeeper://127.0.0.1:2181" />  
  
    <!-- expose this service through dubbo protocol, through port 20880 -->  
    <!--  
    <dubbo:protocol name="dubbo" port="20880" />  
      
    <dubbo:protocol name="dubbo" port="9090" server="netty"  
        client="netty" codec="dubbo" serialization="hessian2" charset="UTF-8"  
        threadpool="fixed" threads="100" queues="0" iothreads="9" buffer="8192"  
        accepts="1000" payload="8388608" />  
        -->  
    <!-- Service interface   Concurrent Control  -->  
    <dubbo:service interface="com.huangjie.dubbo_Service.service.IProcessData"  
        ref="demoService" executes="10" />  
  
    <!-- Default Protocol -->  
    <!--  
    <dubbo:protocol server="netty" />  
    -->  
  
    <!-- designate implementation -->  
    <bean id="demoService" class="com.huangjie.dubbo_Service.service.impl.ProcessDataImpl" />  
  
</beans> 

d、 启动服务

public class DubboProviderMain {  
    public static void main(String[] args) throws Exception {  
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(  
                new String[]{"applicationProvider.xml"});  
        context.start();
  
        System.out.println("Press any key to exit.");  
        System.in.read();  
    }  
} 

3、服务调用者的工程

a、调用类

public class ConsumerThd implements Runnable {  
  
    /*  
     * @see java.lang.Runnable#run() 
     */  
    @Override  
    public void run() {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(  
                new String[]{"applicationConsumer.xml"});  
        context.start();  
  
        IProcessData demoService = (IProcessData) context.getBean("demoService"); // get  
                                                                                // service  
                                                                                // invocation  
        // proxy  
        String hello = demoService.deal("nihao"); // do invoke!  
  
        System.out.println(Thread.currentThread().getName() + " "+hello);  
    }  
    
	public static void main(String[] args) {
		new Thread(new ConsumerThd()).start();
		/**
		 * 输出结果:
		 * Thread-0 Finished:nihao
		 */
	}
} 

b、applicationConsumer.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  
        ">  
  
    <!-- consumer application name -->  
    <dubbo:application name="consumer-of-helloworld-app" />  
  
    <!-- registry address, used for consumer to discover services -->  
    <dubbo:registry address="zookeeper://127.0.0.1:2181" />  
    <dubbo:consumer timeout="5000"/>  
    <!-- which service to consume? -->  
    <dubbo:reference id="demoService" interface="com.huangjie.dubbo_Service.service.IProcessData" />  
</beans> 
4、最后需要把zookeeper的服务给启动,在zookeeper安装文件夹下面的bin目录里面的zkServer.cmd给点击运行。不要关闭窗口,保持服务运行


这样整个调用就完成了,这样的好处是只要远程提供ip地址及端口号,以及对外调用的类,客户端就可以调用,客户端不必知道服务端的地址之类的

而且服务端可以开多个zookeeper服务,这样如果其中一个zookeeper 服务死掉了,其他服务还能正常运行


工程下载路径:http://download.csdn.net/detail/wxwzy738/6553431


我是在eclipse上引用dubbo服务连接zookeeper时出现了问题,问题代码如下: 2017-08-30 20:44:22,156 [localhost-startStop-1] [org.apache.zookeeper.ClientCnxn]-[DEBUG] zookeeper.disableAutoWatchReset is false 2017-08-30 20:44:22,182 [localhost-startStop-1] [org.I0Itec.zkclient.ZkClient]-[DEBUG] Awaiting connection to Zookeeper server 2017-08-30 20:44:22,192 [localhost-startStop-1-SendThread(192.168.139.176:9090)] [org.apache.zookeeper.ClientCnxn]-[INFO] Opening socket connection to server 192.168.139.176/192.168.139.176:9090. Will not attempt to authenticate using SASL (unknown error) 2017-08-30 20:44:23,195 [localhost-startStop-1-SendThread(192.168.139.176:9090)] [org.apache.zookeeper.ClientCnxn]-[WARN] Session 0x0 for server null, unexpected error, closing socket connection and attempting reconnect java.net.ConnectException: Connection refused: no further information at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717) at org.apache.zookeeper.ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.java:361) at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1141) 2017-08-30 20:44:23,197 [localhost-startStop-1-SendThread(192.168.139.176:9090)] [org.apache.zookeeper.ClientCnxnSocketNIO]-[DEBUG] Ignoring exception during shutdown input java.nio.channels.ClosedChannelException at sun.nio.ch.SocketChannelImpl.shutdownInput(SocketChannelImpl.java:780) at sun.nio.ch.SocketAdaptor.shutdownInput(SocketAdaptor.java:399) at org.apache.zookeeper.ClientCnxnSocketNIO.cleanup(ClientCnxnSocketNIO.java:200) at org.apache.zookeeper.ClientCnxn$SendThread.cleanup(ClientCnxn.java:1246) at org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1170) 2017-08-30 20:44:23,197 [localhost-startStop-1-SendThread(192.168.139.176:9090)] [org.apache.zookeeper.ClientCnxnSocketNIO]-[DEBUG] Ignoring exception during shutdown output 之后就是无限循环最后那个异常。有没有大神能帮忙解决这个问题?
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页