Springboot整合Dubbo/ZooKeeper demo
同样的这篇文章很大程度上参考了下面这篇文章:Springboot 整合 Dubbo/ZooKeeper 详解 SOA 案例所以我也是当做转载了。1、首先是安装与部署zookeeper下载、解压、修改zoo.cfg、启动。本demo采用单点模式。详细内容可以参考下面的文章:zookeeper 集群安装(单点与分布式成功安装)摘录2、监控集群
同样的这篇文章很大程度上参考了下面这篇文章:
Springboot 整合 Dubbo/ZooKeeper 详解 SOA 案例
所以我也是当做转载了。
1、首先是安装与部署zookeeper
下载、解压、修改zoo.cfg、启动。
本demo采用单点模式。
详细内容可以参考下面的文章:
2、监控
集群:
推荐使用taokeeper(好吧,其实我也没用过其他什么比较高级的监控工具,这个也并不是那么好用,当然功能还是比较全面的,性能检测也很棒)
具体安装可以参考下面的文章:
PS:其中第四步在tomcat启动脚本中添加JAVA_OPTS应该是这样的。windows下的。在tomcat的启动文件startup.bat中添加一句:set JAVA_OPTS=-DconfigFilePath="D:\2\taokepper\taokeeper-monitor-config.properties",位置在end和call前面,如下图所示:
单点:
就是之后截图中出现的工具——ZooInspector 。
下载:https://issues.apache.org/jira/secure/attachment/12436620/ZooInspector.zip
运行: 解压缩后点击ZooInspector\build\zookeeper-dev-ZooInspector.jar
点击左上角的绿色按钮,输入ZK Server的地址和端口,连接成功后就能看到ZK的节点数据信息。
如下图所示:
3、最重要的demo
服务者Provider:
pom.xml依赖的jar包:
<!-- Spring Boot 启动父依赖 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.1.RELEASE</version>
</parent>
<properties>
<dubbo-spring-boot>1.0.0</dubbo-spring-boot>
</properties>
<dependencies>
<!-- Spring Boot Dubbo 依赖 -->
<dependency>
<groupId>io.dubbo.springboot</groupId>
<artifactId>spring-boot-starter-dubbo</artifactId>
<version>${dubbo-spring-boot}</version>
</dependency>
<!-- Spring Boot Web 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Boot Test 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- Junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
接下去是项目结构:
接口CityService是我们要注册的服务!
服务的实现类:CityServiceImpl.java:
@Service(version = "1.0.0")
public class CityServiceImpl implements CityService {
@Override
public City findCityByName(String cityname) {
return new City(1L,2L,"温岭","是我的故乡");
}
}
配置文件application.properties:
## Dubbo 服务提供者配置
#应用名称
spring.dubbo.application.name=provider
#注册中心地址
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
#协议名称
spring.dubbo.protocol.name=dubbo
#协议端口
spring.dubbo.protocol.port=20880
#服务类包目录
spring.dubbo.scan=dubbodemo.serviceimpl
在这里会惊奇的发现服务类包目录我选择扫描的是serviceimpl这个包,但是运行之后发现注册的服务如下图:
仍然是CityService,这点就要设计Spring对bean这一概念了,这里我就不多赘述了,我想说的是平时impl放在service目录下,然后扫描service包可能会更好理解一点。
但是本例中扫描service包将不会注册服务,究其原因,在于@Service这一注解,当然其中参数不止version,这边我做了最简单的处理。
(另外,domain中的实体类记得序列化。)
之后运行Application.java(默认占用端口8080),当初出现下图内容或者在监控中出现了服务说明注册成功了(记得先运行zookeeper服务端):
监控的图就如上面显示的那样,出现了服务名就行。
消费者Consumer:
依赖同服务者相同。
项目结构如下:
配置文件application.properties:
## 避免和 server 工程端口冲突
server.port=8081
## Dubbo 服务消费者配置
spring.dubbo.application.name=consumer
spring.dubbo.registry.address=zookeeper://127.0.0.1:2181
spring.dubbo.scan=dubbodemo.service
MyCityServiceImpl.java:
@Component
public class MyCityServiceImpl implements MyCityService{
@Reference(version = "1.0.0")
private CityService cityService;
public void printCity() {
String cityName="温岭";
City city = cityService.findCityByName(cityName);
System.out.println(city.toString());
}
}
本例中,服务的作用简单来说,就是远程实例化cityService这个bean,让他调用的方法如同在本地调用一样。所以在配置文件中扫描dubbodemo.service包,其实扫描dubbodemo.serviceimpl也可以,但我不知为什么。。。
两个项目中CityService.java,即注册和消费的服务的类的相对路径必须相同,这是由于Spring的自动注入导致的,如果不同则需要手动配置references。
启动类Application.java:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
// 程序启动入口
// 启动嵌入式的 Tomcat 并初始化 Spring 环境及其各 Spring 组件
ConfigurableApplicationContext run=SpringApplication.run(Application.class,args);
MyCityService cityService = run.getBean(MyCityServiceImpl.class);
cityService.printCity();
}
}
启动之后,发现City{id=1, provinceId=2, cityName='温岭', description='是我的故乡'}这么条输出语句,说明消费了该项服务。
这时候可以看看监控。
当服务者断开后,因为是单点模式,消费者立刻接收到消息:
而当消费者重启之后,监控中可以看到消费记录多了一条(consumers目录下):
当然,由于超时的原因,可能这条记录过一会就消失了。但这也不失为可以监控的一个点~~
有点头昏,感觉写的不是很好,将就下吧。最后附上demo文件:
更多推荐
所有评论(0)