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 别和之前的服务提供方一起。

感觉可以了就赶紧试试吧。


猜你喜欢

转载自blog.csdn.net/qq_39478853/article/details/79584443