【Dubbo實戰】Dubbo+Zookeeper+Spring整合應用篇-Dubbo基於Zookeeper實現分佈式服務(二)

Dubbo與Zookeeper、Spring整合使用

Dubbo採用全Spring配置方式,透明化接入應用,對應用沒有任何API侵入,只需用Spring加載Dubbo的配置便可,Dubbo基於Spring的Schema擴展進行加載。html

一:單機模式安裝zookeeper

1,下載zookeeper註冊中心,下載地址:www.apache.org/dyn/closer.… 下載後解壓便可,進入E:\zookeeper-3.3.6\zookeeper-3.3.6\bin,java

雙擊zkServer.cmd啓動註冊中心服務。web

zkServer.sh【Linux】或zkServer.cmd【Windows】redis

2,在你執行啓動腳本以前,還有幾個基本的配置項須要配置一下,Zookeeper的配置文件在 conf 目錄下,這個目錄下有 zoo_sample.cfg 和 log4j.properties,你須要作的就是將zoo_sample.cfg 更名爲 zoo.cfg,由於 Zookeeper在啓動時會找這個文件做爲默認配置文件。下面詳細介紹一下,這個配置文件中各個配置項的意義。spring

•tickTime:這個時間是做爲Zookeeper 服務器之間或客戶端與服務器之間維持心跳的時間間隔,也就是每一個 tickTime 時間就會發送一個心跳。apache

•dataDir:顧名思義就是 Zookeeper保存數據的目錄,默認狀況下,Zookeeper 將寫數據的日誌文件也保存在這個目錄裏。tomcat

•dataLogDir:顧名思義就是Zookeeper 保存日誌文件的目錄服務器

•clientPort:這個端口就是客戶端鏈接Zookeeper 服務器的端口,Zookeeper 會監聽這個端口,接受客戶端的訪問請求restful

配置好後,zookeeper會監聽本機的2181端口。mybatis

當這些配置項配置好後,你如今就能夠啓動 Zookeeper 了,啓動後要檢查 Zookeeper 是否已經在服務,能夠經過 netstat – ano 命令查看是否有你配置的 clientPort 端口號在監聽服務。

二:服務提供者

定義服務接口:(該接口需單獨打包,在服務提供方和消費方共享)

  1. package com.unj.dubbotest.provider;
  2. import java.util.List;
  3. public interface DemoService {
  4. String sayHello(String name);
  5. public List getUsers();
  6. }

在服務提供方實現接口:(對服務消費方隱藏實現)

[java] view plain copy
  1. package com.unj.dubbotest.provider.impl;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import com.unj.dubbotest.provider.DemoService;
  5. public class DemoServiceImpl implements DemoService {
  6. public String sayHello(String name) {
  7. return "Hello " + name;
  8. }
  9. public List getUsers() {
  10. List list = new ArrayList();
  11. User u1 = new User();
  12. u1.setName("hejingyuan");
  13. u1.setAge(20);
  14. u1.setSex("f");
  15. User u2 = new User();
  16. u2.setName("xvshu");
  17. u2.setAge(21);
  18. u2.setSex("m");
  19. list.add(u1);
  20. list.add(u2);
  21. return list;
  22. }
  23. }

用Spring配置聲明暴露服務:

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

加載Spring配置,啓動服務(或者將項目建爲web項目,而後在web.xml中配置好spring的啓動,而後扔到tomcat中便可提供服務):

[java] view plain copy

  1. package com.unj.dubbotest.provider.impl;
  2. import org.springframework.context.support.ClassPathXmlApplicationContext;
  3. public class Provider {
  4. public static void main(String[] args) throws Exception {
  5. ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
  6. new String[] { "applicationContext.xml" });
  7. context.start();
  8. System.in.read(); // 爲保證服務一直開着,利用輸入流的阻塞來模擬
  9. }
  10. }

三:服務消費者

經過Spring配置引用遠程服務:

[html] view plain copy
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans
  5. http://www.springframework.org/schema/beans/spring-beans.xsd
  6. http://code.alibabatech.com/schema/dubbo
  7. http://code.alibabatech.com/schema/dubbo/dubbo.xsd
  8. ">
  9. <!-- 消費方應用名,用於計算依賴關係,不是匹配條件,不要與提供方同樣 -->
  10. <dubbo:application name="hjy_consumer" />
  11. <!-- 使用zookeeper註冊中心暴露服務地址 -->
  12. <!-- <dubbo:registry address="multicast://224.5.6.7:1234" /> -->
  13. <dubbo:registry address="zookeeper://192.168.24.213:2181" />
  14. <!-- 生成遠程服務代理,能夠像使用本地bean同樣使用demoService -->
  15. <dubbo:reference id="demoService"
  16. interface="com.unj.dubbotest.provider.DemoService" />
  17. </beans>

調用服務測試:

[java] view plain copy
  1. package com.alibaba.dubbo.demo.pp;
  2. import java.util.List;
  3. import org.springframework.context.support.ClassPathXmlApplicationContext;
  4. import com.unj.dubbotest.provider.DemoService;
  5. public class Consumer {
  6. public static void main(String[] args) throws Exception {
  7. ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
  8. new String[] { "applicationContext.xml" });
  9. context.start();
  10. DemoService demoService = (DemoService) context.getBean("demoService");
  11. String hello = demoService.sayHello("hejingyuan");
  12. System.out.println(hello);
  13. List list = demoService.getUsers();
  14. if (list != null && list.size() > 0) {
  15. for (int i = 0; i < list.size(); i++) {
  16. System.out.println(list.get(i));
  17. }
  18. }
  19. System.in.read();
  20. }
  21. }

測試結果:

完整項目的源碼來源

願意瞭解框架技術或者源碼的朋友直接求求交流分享技術:2042849237

J2ee分佈式架構, restful, kafka, shiro,Spring MVC,mybatis,redis,dubbo,zookeeper

相關文章
相關標籤/搜索