首先下載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包就自己看着加。
- <!-- dubbo -->
- <dependency>
- <groupId>com.alibaba</groupId>
- <artifactId>dubbo</artifactId>
- <version>2.5.3</version>
- <exclusions>
- <exclusion>
- <groupId>org.springframework</groupId>
- <artifactId>spring</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
- <!-- zookeepr -->
- <dependency>
- <groupId>com.101tec</groupId>
- <artifactId>zkclient</artifactId>
- <version>0.4</version>
- </dependency>
創建一個接口,一個實體類,一個接口實現類。
- package com.dashu.dubbo.provider;
- import java.util.List;
- public interface DemoServer {
- public String sayHello(String name);
- public List getUsers();
- }
- package com.dashu.dubbo.entity;
- import java.io.Serializable;
- public class User implements Serializable{
- private static final long serialVersionUID = -8295790380194607068L;
- private String name;
- private String sex;
- private Integer age;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getSex() {
- return sex;
- }
- public void setSex(String sex) {
- this.sex = sex;
- }
- public Integer getAge() {
- return age;
- }
- public void setAge(Integer age) {
- this.age = age;
- }
- }
- package com.dashu.dubbo.provider.impl;
- import java.util.ArrayList;
- import java.util.List;
- import com.dashu.dubbo.entity.User;
- import com.dashu.dubbo.provider.DemoServer;
- public class DemoServiceImpl implements DemoServer{
- @Override
- public String sayHello(String name) {
- return "hello,"+name;
- }
- @Override
- public List getUsers() {
- List list = new ArrayList();
- User u1 = new User();
- u1.setName("jack");
- u1.setAge(20);
- u1.setSex("男");
- User u2 = new User();
- u2.setName("tom");
- u2.setAge(21);
- u2.setSex("女");
- User u3 = new User();
- u3.setName("rose");
- u3.setAge(19);
- u3.setSex("女");
- list.add(u1);
- list.add(u2);
- list.add(u3);
- return list;
- }
- }
然後配置spring.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <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="
- http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-3.0.xsd
- http://code.alibabatech.com/schema/dubbo
- http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
- <!-- 具體的實現bean -->
- <bean id="demoService" class="com.dashu.dubbo.provider.impl.DemoServiceImpl" />
- <!-- 提供方應用信息,用於計算依賴關係 -->
- <dubbo:application name="andy_provider" />
- <!-- 使用multicast廣播註冊中心暴露服務地址
- <dubbo:registry address="multicast://224.5.6.7:1234" />-->
- <!-- 使用zookeeper註冊中心暴露服務地址 -->
- <dubbo:registry address="zookeeper://127.0.0.1:2181" />
- <!-- 用dubbo協議在20880端口暴露服務 -->
- <dubbo:protocol name="dubbo" port="20880" />
- <!-- 聲明需要暴露的服務接口 -->
- <dubbo:service interface="com.dashu.dubbo.provider.DemoServer" ref="demoService" />
然後將項目運行起來就完成了服務的提供,然後實現服務的使用方法。
新建一個項目,將之前的包都拷貝過來,然後寫個和提供服務一樣的接口,另外把實體類也拷貝過來,實體類是要實現序列化的。
- <?xml version="1.0" encoding="UTF-8"?>
- <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="
- http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-3.0.xsd
- http://code.alibabatech.com/schema/dubbo
- http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
- <!-- 自動掃描(自動注入) -->
- <context:component-scan base-package="com.dashu.dubooClient" />
- <!-- 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.dashu.dubbo.provider.DemoServer" />
- </beans>
然後寫個測試的main方法。
- public class Test {
- public static void main(String[] args) throws Exception {
- ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"spring.xml"});
- context.start();
- DemoServer demoService = (DemoServer) context.getBean("demoService"); // get
- // service
- // invocation
- // proxy
- String hello = "";
- try {
- hello = demoService.sayHello("dubbo");
- System.out.println(hello);
- List<User> list = demoService.getUsers();
- System.out.println("一共有"+list.size()+"個用戶!");
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } // do invoke!
- System.out.println(Thread.currentThread().getName() + " " + hello);
- }
- }
如圖顯示就算是完成了基本的調用。
最後還有一個服務的管理平臺可以查看自己的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 別和之前的服務提供方一起。
感覺可以了就趕緊試試吧。