1.Dubbo的注册中心Registry
1.1 什么是注册中心
- 服务管理,核心是有个服务注册表,心跳机制动态维护
- 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接(心跳机 制)推送变更数据给消费者
- 微服务应用和机器越来越多,调用方需要知道接口的网络地址,如果靠配置文件的方式去控 制网络地址,对于动态新增机器,维护带来很大问题
1.2. Dubbo中常见的注册中心有哪些
- Multicast
Multicast注册中心不需要启动任何中心节点,只要广播地址一样,就可以互相发现,组播受 网络结构限制,只适合小规模应用或开发阶段使用
- Zookeeper
Zookeeper是Apacahe Hadoop的子项目,是一个树型的目录服务,支持变更推送,适合作为 Dubbo服务的注册中心,工业强度较高, 可用于生产环境,并推荐使用
- Redis
Redis是一个高效的KV存储服务器,阿里内部并没有采用Redis做为注册中心,而是使用自己 实现的基于数据库的注册中心
- Simple
注册中心本身就是一个普通的Dubbo服务,可以减少第三方依赖,使整体通讯方式一致。 只是简单实现,不支持集群,可作为自定义注册中心的参考,但不适合直接用于生产环境
- 综合以上原因我们选择zookeeper作为dubbo的注册中心。
2.Dubbo+Zookeeper实现分布式
2.1. 创建provider工程
2.1.1. 创建Springboot工程
2.1.2. 引入相关依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.2.0</version>
<exclusions>
<exclusion>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.7.1</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>4.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-x-discovery</artifactId>
<version>4.2.0</version>
</dependency>
<dependency>
<groupId>com.lanou</groupId>
<artifactId>service-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
2.1.3. 编写配置文件
server:
port: 8083
dubbo:
application:
name: provider
registry:
protocol: zookeeper
address: 196.19.107.239:2181
timeout: 60000
scan:
base-packages: com.test.service
protocol:
name: dubbo
port: 20883
2.1.4. 编写service的实现类
@DubboService
public class UserServiceImpl implements IUserService {
@Override
public String getAll() {
return "Hello dubbo+zookeeper";
}
}
2.1.5. 启动类添加注解
@EnableDubbo
@SpringBootApplication
public class CDubbo02ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(CDubbo02ConsumerApplication.class, args);
}
}
2.2. 创建consumer工程
2.2.1. 创建Springboot工程
2.2.2. 引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>4.2.0</version>
<exclusions>
<exclusion>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.7.1</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>4.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-x-discovery</artifactId>
<version>4.2.0</version>
</dependency>
<dependency>
<groupId>com.lanou</groupId>
<artifactId>service-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2.2.3. 编写配置文件
server:
port: 8084
dubbo:
application:
name: consumer
registry:
protocol: zookeeper
address: 196.19.107.239:2181
timeout: 60000
scan:
base-packages: com.test.service
2.2.4. 编写controller类
@RestController
public class UserController {
@DubboReference
private IUserService userService;
@RequestMapping("/getAll")
public String getAll() {
return userService.getAll();
}
}
2.2.5. 启动类添加注解
@EnableDubbo
@SpringBootApplication
public class CDubbo02ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(CDubbo02ConsumerApplication.class, args);
}
}
分别启动provider工程和consumer工程
3.设置Dubbo的重试次数和超时时间
provider
//设置Dubbo的重试次数和超时时间
@DubboService(retries = 3,timeout = 60000,cluster = "failsafe")
public class UserServiceImpl implements IUserService {
@Override
public String getAll() {
return "Hello dubbo+zookeeper";
}
}
consumer
//设置Dubbo的重试次数和超时时间
@RestController
public class UserController {
//retries : 重试次数,默认重试2次
//timeout : 超时时间
//cluster = "failsafe" : 如果有报错,则忽略掉异常
@Reference(retries = 3,timeout = 2000,cluster = "failsafe")
private IUserService userService;
@RequestMapping("/getAll")
public String getAll() {
return userService.getAll();
}
}
注意:在代码中设置超时时间,在高版本中会失效
4.设置Dubbo的负载均衡策略
4.1.负载均衡策略
4.1.负载均衡策略
定义:在一个截面上碰撞的概率高,但调用量越大分布越均匀,而且按概率使用权重后也比 较均匀,有利于动态调整提供者权重。
4.1.2.RoundRobin LoadBalance 轮循,按公约后的权重设置轮循比率
定义:存在慢的提供者累积请求的问题,比如:第二台机器很慢,但没挂,当请求调到第二 台时就卡在那,久而久之,所有请求都卡在调到第二台上。
4.1.3.LeastActive LoadBalance 最少活跃调用数
定义:使慢的提供者收到更少请求,因为越慢的提供者的调用前后计数差会越大。
4.1.4.ConsistentHash LoadBalance 一致性Hash策略
定义:当某一台提供者挂时,原本发往该提供者的请求,基于虚拟节点,平摊到其它提供 者,不会引起剧烈变动。
4.2. 启动第一个provider
server:
port: 8081
dubbo:
application:
name: provider
registry: # zookeeper注册
protocol: zookeeper
address: 196.19.107.239:2181
timeout: 60000 #连接超时时间
scan:
base-packages: com.test.service
protocol:
name: dubbo
port: 20881
provider:
loadbalance: random # 设置负载均衡策略,策略为权重随机
weight: 1 # 设置权重为1,比如访问4次,其中1次访问此服务
@DubboService
public class UserServiceImpl implements IUserService {
@Override
public String getAll() {
return "Hello dubbo+zookeeper8081";
}
}
4.3. 启动第二个provider
server:
port: 8081
dubbo:
application:
name: provider
registry: # zookeeper注册
protocol: zookeeper
address: 196.19.107.239:2181
timeout: 60000 #连接超时时间
scan:
base-packages: com.test.service
protocol:
name: dubbo
port: 20881
provider:
loadbalance: random # 设置负载均衡策略,策略为权重随机
weight: 3 # 设置权重为1,比如访问4次,其中3次访问此服务
@DubboService
public class UserServiceImpl implements IUserService {
@Override
public String getAll() {
return "Hello dubbo+zookeeper8082";
}
}
4.4. 在浏览器进行测试
第一次访问
第二次访问
第三次访问
第四次访问
5.配置Dubbo-admin管理的图形化控制台
Dubbo-admin图形化控制台,可以实现通过图形化界面查看保存在zookeeper注册中心中的服 务提供方信息和服务消费方信息。
- 把war文件放到 tomcat webapps下面 启动tomcat 报错不管 启动起来关闭就行
- 修改dubbo-admin\WEB-INF 下面的dubbo.properties文件 ip地址改成自己zk的ip
重新启动tomcat,输入账号和密码(都是root)
标签:Dubbo02,dubbo,zookeeper,curator,apache,org,public From: https://www.cnblogs.com/jiabaolatiao/p/17494516.html