Dubbo+Zookeeper+Spring+SpringMVC
一 相關概念
1.Dubbo框架圖
2.節點角色說明
Node | Role Spec |
---|---|
Provider |
提供程序所公開的遠程服務 |
Consumer |
使用者調用遠程服務 |
Registry |
註冊中心負責服務發現和配置 |
Monitor |
監視器計算服務調用的次數和時間 |
Container |
容器管理服務的生存期 |
二 zookeeper安裝和配置
1.zookeeper下載鏈接
https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/
以最新的zookeeper-3.5.6爲例,下載二進制源碼包
2.配置zookeeper
解壓到/usr/local/zookeeper下新建data文件夾
修改配置文件的dataDir路徑
#進入conf文件夾
cd /usr/local/zookeeper/conf
#修改配置文件名爲zoo.cfg
mv zoo_sample.cfg zoo.cfg
#編輯zoo.cfg中的dataDir路徑爲新建的data路徑
vim zoo.cfg
3.啓動單機版zookeeper
三 編寫provider
1.pom依賴
<dependencies>
<dependency>
<groupId>cn.javak</groupId>
<artifactId>dubbo-service</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.3</version>
<exclusions>
<!--幹掉spring2-->
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.1.6.RELEASE</version>
</dependency>
<!--訪問zookeeper的客戶端jar包-->
<dependency>
<groupId>com.101tec</groupId>
<artifactId>zkclient</artifactId>
<version>0.10</version>
</dependency>
</dependencies>
2.dubbo配置文件
<?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:context="http://www.springframework.org/schema/context"
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://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://code.alibabatech.com/schema/dubbo
http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!--給當前Provider自定義名字,再monitor或管理工具中區別是哪一個provider-->
<dubbo:application name="dubbo-service"/>
<!--配置註冊中心 註冊中心的ip和端口 以及 使用哪種註冊中心-->
<dubbo:registry address="x.x.x.x:2181" protocol="zookeeper"></dubbo:registry>
<!--配置端口 使用什麼協議 consumer invoke provider時的端口-->
<dubbo:protocol name="dubbo" prompt="20880"></dubbo:protocol>
<!--註冊功能 註冊接口 引用接口實現類bean-->
<dubbo:service interface="cn.javak.service.HelloService" ref="helloServiceImpl"></dubbo:service>
<bean id="helloServiceImpl" class="cn.javak.service.impl.HelloServiceImpl"></bean>
</beans>
3.業務接口和實現類
package cn.javak.service;
public interface HelloService {
String hello(String hello);
}
package cn.javak.service.impl;
import cn.javak.service.HelloService;
public class HelloServiceImpl implements HelloService {
@Override
public String hello(String name) {
return "Hello Dubbo-->傳遞的name爲:"+name;
}
}
測試類
public class Test01 {
public static void main(String[] args) {
//使用spring啓動
/*ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext-dubbo.xml");
ac.start();*/
//官方推薦,要求applicationContext-dubbo.xml放在/META-INF/spring中 *.xml
Main.main(args);
}
}
注意:配置文件要放在根目錄下META-INF/spring中,spring才能夠捕獲
四 使用dubbo-admin
在tomcat中放入dubbo-admin的war包,啓動tomcat,第一次啓動會失敗
關閉tomcat,修改dubbo.properties
vim WEB-INF/dubbo.properties
將地址改爲zookeeper的真實地址加端口即可
再次啓動,並訪問
顯示HelloService接口註冊成功
Consumer調用
consumer的業務層
@Service
public class TestServiceImpl implements TestService {
@Reference//獲取該接口的代理對象
private HelloService helloService;
@Override
public String test(String name) {
//調用provider中提供的功能
return helloService.hello(name);
}
}
通過controller層訪問
@Controller
public class HelloController {
@Autowired
private TestService testService;
@ResponseBody
@RequestMapping("hello")
public String hello(String name){
return testService.test(name);
}
}