zk注冊中心安裝,參見dubbo官網:http://dubbo.apache.org/books/dubbo-admin-book/install/zookeeper.html
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-3.1.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> <dubbo:application name="demo-provider"/> <!--<dubbo:registry address="multicast://224.5.6.7:1234"/>--> <dubbo:registry address="zookeeper://127.0.0.1:2181"/> <dubbo:protocol name="dubbo" port="20880" threads="205" threadpool="limited"/>
<dubbo:service protocol="dubbo" interface="com.alibaba.dubbo.demo.DemoService" ref="demoService" timeout="20000"/> <bean id="demoService" class="com.alibaba.dubbo.demo.provider.DemoServiceImpl"/> </beans>
Provider程序:
public class Provider { public static void main(String[] args) throws Exception { ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext("spring/dubbo-demo-provider.xml"); context.start(); System.out.println("started..."); System.in.read(); } }
這時執行程序會有如下異常:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/curator/RetryPolicy at com.alibaba.dubbo.remoting.zookeeper.curator.CuratorZookeeperTransporter.connect(CuratorZookeeperTransporter.java:26) at com.alibaba.dubbo.remoting.zookeeper.ZookeeperTransporter$Adaptive.connect(ZookeeperTransporter$Adaptive.java) at com.alibaba.dubbo.registry.zookeeper.ZookeeperRegistry.<init>(ZookeeperRegistry.java:69) at com.alibaba.dubbo.registry.zookeeper.ZookeeperRegistryFactory.createRegistry(ZookeeperRegistryFactory.java:37) at com.alibaba.dubbo.registry.support.AbstractRegistryFactory.getRegistry(AbstractRegistryFactory.java:95) at com.alibaba.dubbo.registry.RegistryFactory$Adaptive.getRegistry(RegistryFactory$Adaptive.java) at com.alibaba.dubbo.registry.integration.RegistryProtocol.getRegistry(RegistryProtocol.java:200) at com.alibaba.dubbo.registry.integration.RegistryProtocol.export(RegistryProtocol.java:134) at com.alibaba.dubbo.rpc.protocol.ProtocolListenerWrapper.export(ProtocolListenerWrapper.java:54) at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper.export(ProtocolFilterWrapper.java:91) at com.alibaba.dubbo.qos.protocol.QosProtocolWrapper.export(QosProtocolWrapper.java:54) at com.alibaba.dubbo.rpc.Protocol$Adaptive.export(Protocol$Adaptive.java) at com.alibaba.dubbo.config.ServiceConfig.doExportUrlsFor1Protocol(ServiceConfig.java:505) at com.alibaba.dubbo.config.ServiceConfig.doExportUrls(ServiceConfig.java:357) at com.alibaba.dubbo.config.ServiceConfig.doExport(ServiceConfig.java:316) at com.alibaba.dubbo.config.ServiceConfig.export(ServiceConfig.java:215) at com.alibaba.dubbo.config.spring.ServiceBean.onApplicationEvent(ServiceBean.java:121) at com.alibaba.dubbo.config.spring.ServiceBean.onApplicationEvent(ServiceBean.java:50) at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:167) at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139) at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:393) at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:347) at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:883) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:546) at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83) at Provider.main(Provider.java:7) Caused by: java.lang.ClassNotFoundException: org.apache.curator.RetryPolicy at java.net.URLClassLoader$1.run(URLClassLoader.java:366) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:425) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:358) ... 27 more
上面堆棧里java.lang.NoClassDefFoundError、java.lang.ClassNotFoundException,通常指缺少jar依賴。需增加如下依賴:
<!-- zookeeper --> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>${zookeeper.version}</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> <exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </exclusion> <exclusion> <groupId>io.netty</groupId> <artifactId>netty</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>${curator.version}</version> </dependency> <dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>${curator.version}</version> </dependency>
jar版本定義:
<properties> <!--<dubbo.version>2.4.11</dubbo.version>--> <dubbo.version>2.6.1</dubbo.version> <zookeeper.version>3.4.6</zookeeper.version> <curator.version>2.8.0</curator.version> </properties>
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="demo-consumer"/> <!--<dubbo:registry address="multicast://224.5.6.7:1234"/>--> <dubbo:registry address="zookeeper://127.0.0.1:2181"/> <dubbo:reference id="demoService" interface="com.alibaba.dubbo.demo.SubDemoService" timeout="6000"/> </beans>
同樣,consumer端也要依賴以上zookeeper和curator的
jar。
dubbo管理端
dubbo管理端安裝:https://www.cnblogs.com/xhkj/p/7407092.html
dubbo官網:http://dubbo.apache.org/books/dubbo-admin-book/install/admin-console.html
DOS下cd命令的使用:
cmd窗口里。比如要進入目錄:D:\Java\dubbo\incubator-dubbo-ops-master\dubbo-admin,首先要執行命令cd d:\ 到D盤根目錄,然后cd D:\Java\dubbo\incubator-dubbo-ops-master\dubbo-admin,即可進入目標目錄。
ZooKeeper可視化管理工具ZooInspector
下載:https://issues.apache.org/jira/secure/attachment/12436620/ZooInspector.zip
解壓后,在文件夾下創建run.bat,內容為 java -jar zookeeper-dev-ZooInspector.jar (即,通過java -jar的方式啟動程序)
運行run.bat,可在打開的GUI里,指定zk服務器地址(zookeeper默認端口是2181)
然后,就可以看到注冊的dubbo服務列表,每個服務下顯示注冊的消費者節點和生產者節點。
可以刪掉某個注冊的節點。我們在測試系統時,如果開發環境和測試環境用同一套maven配置,那么,大家的服務會注冊到同一個zk上。而在這種情況下,一旦各節點的程序版本不一致,往往就會干擾我們的測試結果。所以,可以通過這個工具來刪除某些節點。(當然,隔離開發環境和測試環境的zk是根本解決辦法。)
Zookeeper監控管理工具ZkWeb
上面的ZooInspector只能管理節點,沒有集群狀態監控功能。zkWeb就是這么一個強大的工具。以后有時間再做分享吧。
ref:http://www.cnblogs.com/chanshuyi/p/deep_insight_dubbo_config.html “創建 com.chanshuyi.Launcher.java,用於啟動 provider 服務,是啟動入口”
☞ Stay Hungry,Stay Foolish. 如果對閣下有幫助,就動動手指,點一下“推薦”喲~