当前位置 : 主页 > 编程语言 > java >

SpringBoot快速集成Dubbo及Dubbo流量隔离

来源:互联网 收集:自由互联 发布时间:2023-03-22
一、SpringBoot快速集成Dubbo(基于zk) 1.1 服务提供者 1.1.1 部署zookeeper 1.1.2 添加依赖 dependency groupIdorg.apache.dubbo/groupId artifactIddubbo/artifactId versionchd-2.7.3-v1.0.4/version/dependencydependency groupIdo

一、SpringBoot快速集成Dubbo(基于zk)

1.1 服务提供者

1.1.1 部署zookeeper

1.1.2 添加依赖

<dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> <version>chd-2.7.3-v1.0.4</version></dependency><dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.7.3</version></dependency><dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>4.0.1</version></dependency><dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>4.0.1</version></dependency><!--zk--><dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.13</version> <exclusions> <exclusion> <artifactId>slf4j-log4j12</artifactId> <groupId>org.slf4j</groupId> </exclusion> </exclusions></dependency>

1.1.3 添加配置

dubbo.application.id=dubbo-providerdubbo.application.name=dubbo-providerdubbo.registry.id=zk-registrydubbo.registry.protocol=zookeeperdubbo.registry.address=zookeeper://127.0.0.1:2181?client=curatordubbo.registry.group=groupdubbo.registry.username=userdubbo.registry.password=pwddubbo.scan.base-packages=com.dubbo.demo.servicedubbo.protocol.id=dubbodubbo.protocol.name=dubbodubbo.protocol.port=36321dubbo.provider.timeout=6000dubbo.provider.status=threadpooldubbo.consumer.check=falsedubbo.consumer.timeout=6000dubbo.consumer.retries=0

1.1.4 添加注解

在启动类加上@EnableDubbo注解

1.1.5 把接口单独封装为api模块,打包部署

1.1.6 实现类添加注解

实现类添加@Service注解,注意是dubbo包的注解,非spring包下的注解

1.2 服务消费者

1.2.1 添加公共api的依赖

1.2.2 添加依赖

<dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> <version>chd-2.7.3-v1.0.4</version></dependency><dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.7.3</version></dependency><dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-framework</artifactId> <version>4.0.1</version></dependency><dependency> <groupId>org.apache.curator</groupId> <artifactId>curator-recipes</artifactId> <version>4.0.1</version></dependency><!--zk--><dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.13</version> <exclusions> <exclusion> <artifactId>slf4j-log4j12</artifactId> <groupId>org.slf4j</groupId> </exclusion> </exclusions></dependency>

1.2.3 添加配置

dubbo: application: id: dubbo-consumer name: dubbo-consumer scan: base-packages: com.dubbo.demo protocol: id: dubbo name: dubbo port: 36322 registry: id: zk-registry protocol: zookeeper address: zookeeper://127.0.0.1:2181?client=curator group: group username: user password: pwd provider: timeout: 6000 status: threadpool # filter: aliFilter consumer: check: false timeout: 6000 retries: 0

1.2.4 调用

@Referenceprivate UserService userService;

二、Dubbo流量隔离

2.1 背景

如果一个应用有多个版本在线上同时运行,部署在不同环境中,如日常环境和特殊环境,则 可以使用标签路由对不同环境中的不同版本进行流量隔离,将秒杀订单流量或不同渠道订单流量路由到特殊环境,将正常的流量路由到日常环境。即使特殊环境异常,本应进入特殊环境的流量也不会进入日常环境,不影响日常环境的使用。

2.2 原理

将服务提供者进行分组,约束流量只在指定分组中流转,从而实现流量隔离的目的,有两种方式可以完成实例分组,分别是动态规则打标和静态规则打标

2.3 Dubbo-Admin 动态进行流量隔离

Dubbo提供动态流量隔离的服务治理能力,可以在无需重启应用的情况下,动态进行流量隔离。

2.3.1 创建标签路由规则

在Dubbo-Admin左侧导航栏选择服务治理 > 标签路由,点击创建按钮,在创建新标签规则面板中,填写规则内容,然后单击保存。

SpringBoot快速集成Dubbo及Dubbo流量隔离_SpringBoot集成Dubbo

force=false: 当路由结果为空,降级请求tag为空的提供者。

force=true: 当路由结果为空,直接返回异常。

enabled=true 当前路由规则是否生效,缺省生效。

runtime=false 是否在每次调用时执行路由规则,否则只在提供者地址列表变更时预先执行并缓存结果,调用时直接从缓存中获取路由结果。如果用了参数路由,必须设为 true,需要注意设置会影响调用的性能,缺省为 false。

tags定义具体的标签分组内容,可定义任意n(n>=1)个标签并为每个标签指定实例列表。其中name为标签名称

所有实例:addresses: ["0.0.0.0"] 或addresses: ["0.0.0.0:*"]

指定实例:addersses[实例地址列表]

2.3.2 运行多个服务提供者

当前例子中运行两个服务提供者,分别是192.168.0.1:20881和192.168.0.2:20882

2.3.3 服务消费者添加标签属性

方式一:每个调用方法中添加如下代码

RpcContext.getContext().setAttachment("dubbo.tag","tag1");

方式二:添加应用级别配置

dubbo: consumer: tag: tag1

之后当前消费者只会调用相同tag的provider,若没有匹配到,则根据force配置直接返回异常或请求tag为空的提供者

2.4 静态规则打标

2.4.1 服务提供者

2.4.1.1 服务级别
<dubbo:provider tag="tag1"/>

<dubbo:service tag="tag1"/>
2.4.1.2 应用级别
dubbo: provider: tag: tag1

2.4.2 服务消费者

见2.3.3

2.5 tag在zookeeper中的数据结构

enabled: trueforce: falsekey: dubbo-providerpriority: 0runtime: falsetags:- addresses:- 192.168.0.1:20881name: tag1- addresses:- 192.168.0.2:20882name: tag2

2.6 JAVA对象数据结构

SpringBoot快速集成Dubbo及Dubbo流量隔离_SpringBoot集成Dubbo_02

上一篇:Mybatis-Plus使用雪花算法自动生成主键
下一篇:没有了
网友评论