zookeeper+dubbo+dubbo 的管理界面的入門案例

首先下載zookeepr-3.4.8,據說是一個比較穩定的版本,所有我選它了

下載地址 http://www.apache.org/dist/zookeeper/

下載好之後 創建幾個目錄,然後每個目錄裏面解壓一份,我沒那麼多機器只能做成僞分佈式。

然後在每個目錄裏面創建一個data文件夾,裏面創建一個文件myid寫着每個文件對應的server ID.

比如我創建了三個目錄,分別是server1、server2、server3,三個目錄下都創建了data文件夾,data文件夾裏面創建了myid文件,

各自對應的寫了 id在裏面,也就是server1裏面的data 的myid 寫的是1 ,server2寫的2。

然後修改zookeepr 的啓動配置,將解壓出來的zookeepr裏面的conf/zoo_sample.cfg 複製一份,重命名爲zoo.cfg

然後修改

dataDir=D:/tool/server1/data  --data目錄的配置,我的是window系統弄的 所有有D盤


clientPort=2181  --端口 每個server 都要不一樣


server.1=127.0.0.1:8881:7771 
server.2=127.0.0.1:8882:7772
server.3=127.0.0.1:8883:7773

最後幾行唯一需要注意的地方就 是 server.X 這個數字就是對應 data/myid中的數字。你在3個server的myid文件中分別寫入了1,2,3,那麼每個server中的zoo.cfg都配 server.1,server.2,server.3就OK了。因爲在同一臺機器上,後面連着的2個端口3個server都不要一樣,否則端口衝突,其 中第一個端口用來集羣成員的信息交換,第二個端口是在leader掛掉時專門用來進行選舉leader所用。
進 入zookeeper-3.3.2/bin 目錄中,./zkServer.sh start啓動一個server,這時會報大量錯誤?其實沒什麼關係,因爲現在集羣只起了1臺server,zookeeper服務器端起來會根據 zoo.cfg的服務器列表發起選舉leader的請求,因爲連不上其他機器而報錯,那麼當我們起第二個zookeeper實例後,leader將會被選 出,從而一致性服務開始可以使用,這是因爲3臺機器只要有2臺可用就可以選出leader並且對外提供服務(2n+1臺機器,可以容n臺機器掛掉)。


每個zookeepr 都要對應的配置,然後點擊zkServer.cmd 啓動,前面啓動的都會報錯,不用理會。


隨便找其中的一個server1/bin/zkCli.cmd 文件啓動,測試下是否啓動成功,

那麼,首先我們隨便打個命令,因爲zookeeper不認識,他會給出命令的help,如下圖  
   
ls(查看當前節點數據),
ls2(查看當前節點數據並能看到更新次數等數據) ,
create(創建一個節點) ,
get(得到一個節點,包含數據和更新次數等數據),
set(修改節點)
delete(刪除一個節點)


這個時候證明zookeepr 的服務已經正常啓動 了,然後開始新建一個web項目,我是用的maven創建的,spring用的4.1.5的版本.

另外必須的兩個包有duboo和zookeepr的client包,還有些log包就自己看着加。

[html] view plain copy
  1. <!-- dubbo -->  
  2.         <dependency>  
  3.             <groupId>com.alibaba</groupId>  
  4.             <artifactId>dubbo</artifactId>  
  5.             <version>2.5.3</version>  
  6.             <exclusions>  
  7.                 <exclusion>  
  8.                     <groupId>org.springframework</groupId>  
  9.                     <artifactId>spring</artifactId>  
  10.                 </exclusion>  
  11.             </exclusions>  
  12.         </dependency>   
  13.         <!-- zookeepr -->  
  14.         <dependency>  
  15.             <groupId>com.101tec</groupId>  
  16.             <artifactId>zkclient</artifactId>  
  17.             <version>0.4</version>  
  18.         </dependency>  


創建一個接口,一個實體類,一個接口實現類。


[java] view plain copy
  1. package com.dashu.dubbo.provider;  
  2.   
  3. import java.util.List;  
  4.   
  5. public interface DemoServer {  
  6.   
  7.     public String sayHello(String name);  
  8.       
  9.     public List getUsers();    
  10. }  

[java] view plain copy
  1. package com.dashu.dubbo.entity;  
  2.   
  3. import java.io.Serializable;  
  4.   
  5. public class User implements Serializable{  
  6.     private static final long serialVersionUID = -8295790380194607068L;  
  7.     private String name;  
  8.     private String sex;  
  9.     private Integer age;  
  10.     public String getName() {  
  11.         return name;  
  12.     }  
  13.     public void setName(String name) {  
  14.         this.name = name;  
  15.     }  
  16.     public String getSex() {  
  17.         return sex;  
  18.     }  
  19.     public void setSex(String sex) {  
  20.         this.sex = sex;  
  21.     }  
  22.     public Integer getAge() {  
  23.         return age;  
  24.     }  
  25.     public void setAge(Integer age) {  
  26.         this.age = age;  
  27.     }  
  28.       
  29.       
  30. }  

[java] view plain copy
  1. package com.dashu.dubbo.provider.impl;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. import com.dashu.dubbo.entity.User;  
  7. import com.dashu.dubbo.provider.DemoServer;  
  8.   
  9. public class DemoServiceImpl implements DemoServer{  
  10.   
  11.     @Override  
  12.     public String sayHello(String name) {  
  13.         return "hello,"+name;  
  14.     }  
  15.   
  16.     @Override  
  17.     public List getUsers() {  
  18.            List list = new ArrayList();    
  19.              User u1 = new User();    
  20.              u1.setName("jack");    
  21.              u1.setAge(20);    
  22.              u1.setSex("男");    
  23.                  
  24.              User u2 = new User();    
  25.              u2.setName("tom");    
  26.              u2.setAge(21);    
  27.              u2.setSex("女");    
  28.                  
  29.              User u3 = new User();    
  30.              u3.setName("rose");    
  31.              u3.setAge(19);    
  32.              u3.setSex("女");    
  33.                  
  34.              list.add(u1);    
  35.              list.add(u2);    
  36.              list.add(u3);    
  37.              return list;    
  38.     }  
  39.   
  40. }  


然後配置spring.xml

[html] view plain copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="  
  3. http://www.springframework.org/schema/beans  
  4. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
  5. http://www.springframework.org/schema/context  
  6. http://www.springframework.org/schema/context/spring-context-3.0.xsd  
  7. http://code.alibabatech.com/schema/dubbo    
  8. http://code.alibabatech.com/schema/dubbo/dubbo.xsd">  
  9.   
  10.         <!-- 具體的實現bean -->    
  11.     <bean id="demoService" class="com.dashu.dubbo.provider.impl.DemoServiceImpl" />    
  12.         
  13.     <!-- 提供方應用信息,用於計算依賴關係 -->    
  14.     <dubbo:application name="andy_provider"  />    
  15.      
  16.     <!-- 使用multicast廣播註冊中心暴露服務地址     
  17.     <dubbo:registry address="multicast://224.5.6.7:1234" />-->    
  18.       
  19.     <!-- 使用zookeeper註冊中心暴露服務地址 -->    
  20.     <dubbo:registry address="zookeeper://127.0.0.1:2181" />     
  21.       
  22.     <!-- 用dubbo協議在20880端口暴露服務 -->    
  23.     <dubbo:protocol name="dubbo" port="20880" />    
  24.      
  25.     <!-- 聲明需要暴露的服務接口 -->    
  26.     <dubbo:service interface="com.dashu.dubbo.provider.DemoServer" ref="demoService" />   
  27.       


然後將項目運行起來就完成了服務的提供,然後實現服務的使用方法。

新建一個項目,將之前的包都拷貝過來,然後寫個和提供服務一樣的接口,另外把實體類也拷貝過來,實體類是要實現序列化的。


[html] view plain copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="  
  3. http://www.springframework.org/schema/beans  
  4. http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
  5. http://www.springframework.org/schema/context  
  6. http://www.springframework.org/schema/context/spring-context-3.0.xsd  
  7. http://code.alibabatech.com/schema/dubbo    
  8. http://code.alibabatech.com/schema/dubbo/dubbo.xsd">  
  9.   
  10.   
  11.     <!-- 自動掃描(自動注入) -->   
  12.     <context:component-scan base-package="com.dashu.dubooClient" />  
  13.  <!-- consumer application name -->  
  14.  <dubbo:application name="consumer-of-helloworld-app" />  
  15.  <!-- registry address, used for consumer to discover services -->  
  16.  <dubbo:registry address="zookeeper://127.0.0.1:2181" />  
  17.  <dubbo:consumer timeout="5000" />  
  18.  <!-- which service to consume? -->  
  19.  <dubbo:reference id="demoService"  interface="com.dashu.dubbo.provider.DemoServer" />  
  20.       
  21. </beans>  

然後寫個測試的main方法。

[java] view plain copy
  1. public class Test {  
  2.     public static void main(String[] args) throws Exception {  
  3.            
  4.          ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"spring.xml"});  
  5.             context.start();  
  6.             DemoServer demoService = (DemoServer) context.getBean("demoService"); // get  
  7.             // service  
  8.             // invocation  
  9.             // proxy  
  10.             String hello = "";  
  11.             try {  
  12.              hello = demoService.sayHello("dubbo");  
  13.              System.out.println(hello);  
  14.              List<User> list = demoService.getUsers();  
  15.              System.out.println("一共有"+list.size()+"個用戶!");  
  16.             } catch (Exception e) {  
  17.              // TODO Auto-generated catch block  
  18.              e.printStackTrace();  
  19.             } // do invoke!  
  20.             System.out.println(Thread.currentThread().getName() + " " + hello);  
  21.         }  
  22. }  


如圖顯示就算是完成了基本的調用。


最後還有一個服務的管理平臺可以查看自己的dubbo服務,查看使用狀態什麼的。

需要下載dubbo-admin-2.4.1.war 包,下載地址http://download.csdn.net/detail/wangzhi291/9558577

新找一個Tomcat   tomcat/webapps/ROOT/目錄下的東西必須刪除乾淨,然後將war包解壓到這個目錄下來,

是ROOT目錄下,然後配置解壓後的dubbo.properties 文件,直接修改就可以;

文件地址爲  webapps/ROOT/WEB-INF/dubbo.properties  

dubbo.registry.address=zookeeper://127.0.0.1:2181
dubbo.admin.root.password=root
dubbo.admin.guest.password=guest

將紅色的修改爲你的地址和端口就行。然後啓動tomcat 

在瀏覽器上輸入自己的IP和端口就行,然後提示用戶名和密碼 root/root就行

成功後如圖:



其中就有你之前提供的服務,注意dubbo-admin-2.4.1.war 單獨找個tomcat 別和之前的服務提供方一起。

感覺可以了就趕緊試試吧。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章