当服务集群规模进一步扩大,带动IT治理结构进一步升级,需要实现动态部署,进行流动计算,现有分布式服务架构不会带来阻力。下图是未来可能的一种架构:
节点角色说明
节点
角色说明
Deployer
自动部署服务的本地代理
Repository
仓库用于存储服务应用发布包
Scheduler
调度中心基于访问压力自动增减服务提供者
Admin
统一管理控制台
Registry
服务注册与发现的注册中心
Monitor
统计服务的调用次数和调用时间的监控中心
大家可访问官网文档:,里面有详细说明和使用说明的。这里就不再阐述了。
Dubbo集成和使用
基于官方的incubator-dubbo-spring-boot-project项目,在SpringBoot中集成起来很简单。
注意:由于本系列还是使用1.5.x版本进行讲解,所以使用的版本为0.1.x。若使用SpringBoot2.x的同学,可以使用0.2.x版本。
这里为了方便,直接创建了一个接口工程,spring-boot-dubbo-api。
IHelloService.java
/**
* 定义一个接口
* @author oKong
*
*/
public interface IHelloService {
String hello(String name);
}
服务提供者
创建一个spring-boot-dubbo-provider工程。
0.引入pom依赖。
<!-- 引入api -->
<dependency>
<groupId>cn.lqdev.learning</groupId>
<artifactId>spring-boot-dubbo-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!-- 引入dubbo依赖 -->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>0.1.1</version>
</dependency>
<!-- 引入redis作为注册中心 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
注意:这里直接选用了redis作为注册中心使用。默认是zookeeper。
1.编写接口实现类。
HelloServiceImpl.java
/**
* 定义一个服务实现类
* @author oKong
*
*/
// 这里注意 此类@service是dubbo的
@Service(
version = "${demo.service.version}", //版本
application = "${dubbo.application.id}", //应用ID
protocol = "${dubbo.protocol.id}", //协议id
registry = "${dubbo.registry.id}")//注册中心id
@Slf4j
public class HelloServiceImpl implements IHelloService {
@Override
public String hello(String name) {
log.info("dubbo提供者,参数name:{}", name);
return "hello " + name + ",this is a dubbo provider!";
}
}
说明下:这里的@Service是包路径com.alibaba.dubbo.config.annotation.Service下的注解类,其指定了接口版本、协议id、注册中心id等基本信息。这里注意还是版本号有用,因为会一个接口多版本共存问题,所以一般上都会设置版本信息的。
2.设置配置文件信息,添加dubbo相关信息,比如注册中心类型,地址等。
# 应用名称 便于识别
dubbo.application.id=spring-boot-dubbo-provider
dubbo.application.name=spring-boot-dubbo-provider
server.port=8686
# 设置版本
demo.service.version=1.0.0
#协议 可选dubbo redis、http、thrift等
dubbo.protocol.id=dubbo
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880
#设置扫描路径 被注解@service和@Reference 等
dubbo.scan.basePackages=cn.lqdev.learning.
springboot.dubbo.provider.service
# 注册中心配置
dubbo.registry.id=okong-registry
#注册中心类型 这里使用redis作为注册中心
# zookeeper://127.0.0.1:2181
dubbo.registry.address=redis://127.0.0.1:6379
# 设置用户名密码 若有的话
#dubbo.registry.username=oKong
#dubbo.registry.password=oKong
# 设置redis参数
# 连接池中的最大空闲连接
dubbo.registry.parameters.max.idle=8
# 连接池最大连接数(使用负值表示没有限制)
dubbo.registry.parameters.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制)
dubbo.registry.parameters.max-wait=-1
# 连接池中的最大空闲连接
dubbo.registry.parameters.max-idle=8
# 连接池中的最小空闲连接
dubbo.registry.parameters.min-idle=0