【分布式入门】Dubbo和Zookeeper的基本使用
程序员文章站
2022-06-21 17:43:55
...
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);
}
}