1 - 服务注册
Dubbo 分类
Dubbo当前常用的有2个分支版本,一个是apache dubbo(GroupID是org.apache.dubbo), 一个是dubbox (GroupID是com.alibaba)。两个分支的dubbo,对应不同的接入插件,大家接入之前可以先通过GroupID判断下当前项目依赖的是哪个分支的dubbo。
Apache Dubbo 接入
支持版本
- dubbo 2.x 版本的接入,最新版本为
0.2.2
- dubbo 3.x 版本的接入,最新版本请参考: release
引入依赖
提示
Dubbo 应用级注册发现 仅适用于北极星服务端版本 >= 1.18.0
在 pom.xml 中引入以下依赖
<!-- 北极星注册发现插件 -->
<dependency>
<groupId>com.tencent.polaris</groupId>
<artifactId>dubbo-registry-polaris</artifactId>
<version>${version}</version>
</dependency>
<!-- 北极星元数据中心插件 -->
<dependency>
<groupId>com.tencent.polaris</groupId>
<artifactId>dubbo-metadatareport-polaris</artifactId>
<version>${revision}</version>
</dependency>
在 pom.xml 中引入以下依赖
<!-- 北极星注册发现插件 -->
<dependency>
<groupId>com.tencent.polaris</groupId>
<artifactId>dubbo-registry-polaris</artifactId>
<version>${version}</version>
</dependency>
参数配置
接下来,需要添加北极星registry的配置,指定北极星的地址及相关配置信息,可以通过配置文件及代码的方式进行指定:
配置文件方式添加:
dubbo.registry.address=polaris://127.0.0.1:8091
dubbo.metadata-report.address=polaris://127.0.0.1:8091
dubbo.registry.address=polaris://127.0.0.1:8091
北极星地址的URL支持通过参数指定可选的配置,具体参数列表如下:
参数 | 类型 | 含义 |
---|---|---|
namespace | string | 指定服务的命名空间 |
token | string | 指定用户token |
persist_enable | bool | 设置是否开启客户端本地文件容灾缓存 |
stat_type | string | 设置监控数据上报方式, pull 或者 push |
stat_pull_port | int | stat_type == pull 时,设置 SDK 额外暴露的 metrics web 端口 |
stat_push_addr | string | stat_type == push 时,设置 pushgateway 的 IP:PORT 地址 |
stat_push_interval | int | stat_type == push 时,设置上报周期,单位为毫秒 |
config_port | int | 设置北极星配置中心链接端口,默认为8093 |
discover_port | int | 设置北极星注册中心链接端口,默认为8091 |
结果验证
服务注册样例可以参考:
2 - 元数据中心
提示
Dubbo 元数据中心仅适用于北极星服务端版本 >= 1.18.0
Dubbo 分类
Dubbo当前常用的有2个分支版本,一个是apache dubbo(GroupID是org.apache.dubbo), 一个是dubbox (GroupID是com.alibaba)。两个分支的dubbo,对应不同的接入插件,大家接入之前可以先通过GroupID判断下当前项目依赖的是哪个分支的dubbo。
Apache Dubbo 接入
支持版本
- dubbo 3.x 版本的接入,最新版本请参考: release
引入依赖
在 pom.xml 中引入以下依赖
<!-- 北极星注册发现插件 -->
<dependency>
<groupId>com.tencent.polaris</groupId>
<artifactId>dubbo-registry-polaris</artifactId>
<version>${version}</version>
</dependency>
<!-- 北极星元数据中心插件 -->
<dependency>
<groupId>com.tencent.polaris</groupId>
<artifactId>dubbo-metadatareport-polaris</artifactId>
<version>${revision}</version>
</dependency>
参数配置
接下来,需要添加北极星 metadata-report 的配置,指定北极星的地址及相关配置信息,可以通过配置文件及代码的方式进行指定:
配置文件方式添加:
dubbo.metadata-report.address=polaris://127.0.0.1:8091
北极星地址的URL支持通过参数指定可选的配置,具体参数列表如下:
参数 | 类型 | 含义 | 支持版本 |
---|---|---|---|
namespace | string | 指定服务的命名空间 | 起始版本:0.1.0-3.2.7 |
token | string | 指定用户token | 起始版本:0.1.0-3.2.7 |
multi_address | string | 仅用于元数据中心多注册多发现, eg: nacos://127.0.0.1:8848?namespace=xxxxx&username=xxx | 起始版本:0.3.2-3.2.7 |
结果验证
服务接口定义
服务契约名称格式样例
"name": "dubbo::metadata::dubbo-provider::2e2e13eddf24272edcaa60c34afc5067",
"namespace": "dubbo",
"service": "dubbo-provider",
"protocol": "dubbo",
"version": "",
"revision": "2e2e13eddf24272edcaa60c34afc5067",
服务接口运维数据
服务契约名称格式样例
"name": "dubbo::metadata::1.0.0::provider::dubbo-provider",
"namespace": "dubbo",
"service": "dubbo-provider",
"protocol": "dubbo",
"version": "1.0.0",
"revision": "d297643d19dc4700a8c11d7fd57ef808",
接口-应用映射
服务契约名称格式样例
"name": "dubbo::mapping::com.tencent.polaris.dubbo.api.HelloService",
"namespace": "dubbo",
"service": "",
"protocol": "dubbo",
"version": "",
"revision": "f31bc6a132c84ce9afc39c1b98fdb6a7",
查询该接口下有多少应用提供了该接口
{
"@type": "type.googleapis.com/v1.ServiceContract",
"id": "535e686a7e8707b1d53e63f7578e80a2a94e4747",
"name": "dubbo::mapping::com.tencent.polaris.dubbo.api.HelloService",
"namespace": "dubbo",
"service": "",
"protocol": "dubbo",
"version": "",
"revision": "f31bc6a132c84ce9afc39c1b98fdb6a7",
"content": "",
"interfaces": [
{
"id": "6be61ef353a9e1918d5b84c100db0c8a5637f5a5",
"name": "dubbo-provider"
}
]
}
3 - 动态路由
Dubbo 分类
Dubbo当前常用的有2个分支版本,一个是apache dubbo(GroupID是org.apache.dubbo), 一个是dubbox (GroupID是com.alibaba)。两个分支的dubbo,对应不同的接入插件,大家接入之前可以先通过GroupID判断下当前项目依赖的是哪个分支的dubbo。
Apache Dubbo 接入
支持版本
- dubbo 2.x 版本的接入,最新版本为
0.2.2
- dubbo 3.x 版本的接入,最新版本请参考: release
引入依赖
首先,动态路由需要依赖以下2个插件,需要将2个插件引入POM中,插件版本建议使用最新版本。
<!-- 北极星注册发现插件 -->
<dependency>
<groupId>com.tencent.polaris</groupId>
<artifactId>dubbo-registry-polaris</artifactId>
<version>${version}<version>
</dependency>
<!-- 北极星动态路由插件 -->
<dependency>
<groupId>com.tencent.polaris</groupId>
<artifactId>dubbo-router-polaris</artifactId>
<version>${version}</version>
</dependency>
配置北极星注册中心地址
接下来,需要添加北极星 registry 的配置,指定北极星的地址及相关配置信息,可以通过配置文件及代码的方式进行指定:
配置文件方式添加:
<dubbo:registry address="polaris://127.0.0.1:8091"/>
dubbo.registry.address=polaris://127.0.0.1:8091
启用北极星的路由插件
<dubbo:reference filter="polaris_router">
dubbo.consumer.filter=polaris_router
路由规则字段
动态路由可以实现基于dubbo的请求消息内容来对请求调度到不同的实例分组,比如将带了某些user标签的请求调度到灰度分组。
当前支持针对dubbo消息的以下内容进行路由调度:
应用级注册发现
消息类型 | dubbo消息内容 | 路由规则请求类型 |
---|---|---|
消息头 | attachment | 请求头(HEADER) |
RPC接口 | dubbo interface 全限定名 | 路径(PATH) |
RPC方法 | dubbo interface 下的具体某个方法的名称 | 请求匹配规则-方法(METHOD) |
请求体参数 | dubbo 方法入参某个字段 | 请求匹配规则-请求参数(QUERY) |
接口级注册发现
消息类型 | dubbo消息内容 | 路由规则请求类型 | |
---|---|---|---|
消息头 | attachment | 请求头(HEADER) | |
RPC方法 | method | 方法(METHOD) | |
请求体参数 | dubbo 方法入参某个字段 | 请求匹配规则-请求参数(QUERY),字段格式 |
功能验证
动态路由样例包括3个工程,代表的是多个服务之间调用,调用链路为:front->middle->back。
配置自定义路由规则,指定带有附件 user 为 polaris 的请求,路由到 env 为 gray 的实例上。
执行服务调用,调用时,需要设置一下当前请求的attachement。
// 设置attachment,指定当前用户
public String doSayHello(String name) {
RpcContext.getClientAttachment().setAttachment("user", name);
return greetingService.sayHello(name);
}
代码中无需额外添加路由判断代码,插件会自动在被调端进行请求信息进行路由。
最终路由效果
➜ ~ curl http://127.0.0.1:15700/echo\?method\=sayHi\&value\=123
[FrontService] sayHi, 123 -> [MiddleService-gray] sayHello, 123 -> [BackendService-gray] sayHello, 123%
➜ ~ curl http://127.0.0.1:15700/echo\?method\=sayHi\&value\=123
[FrontService] sayHi, 123 -> [MiddleService-gray] sayHello, 123 -> [BackendService-gray] sayHello, 123%
➜ ~ curl http://127.0.0.1:15700/echo\?method\=sayHi\&value\=123
[FrontService] sayHi, 123 -> [MiddleService-normal] sayHello, 123 -> [BackendService-normal] sayHello, 123%
➜ ~ curl http://127.0.0.1:15700/echo\?method\=sayHi\&value\=123
[FrontService] sayHi, 123 -> [MiddleService-normal] sayHello, 123 -> [BackendService-normal] sayHello, 123%
➜ ~ curl http://127.0.0.1:15700/echo\?method\=sayHi\&value\=123
[FrontService] sayHi, 123 -> [MiddleService-gray] sayHello, 123 -> [BackendService-normal] sayHello, 123%
➜ ~ curl http://127.0.0.1:15700/echo\?method\=sayHi\&value\=123
[FrontService] sayHi, 123 -> [MiddleService-gray] sayHello, 123 -> [BackendService-normal] sayHello, 123%
➜ ~ curl http://127.0.0.1:15700/echo\?method\=sayHi\&value\=123
[FrontService] sayHi, 123 -> [MiddleService-gray] sayHello, 123 -> [BackendService-gray] sayHello, 123%
➜ ~ curl http://127.0.0.1:15700/echo\?method\=sayHi\&value\=123
[FrontService] sayHi, 123 -> [MiddleService-gray] sayHello, 123 -> [BackendService-gray] sayHello, 123%
➜ ~ curl http://127.0.0.1:15700/echo\?method\=sayHi\&value\=123
[FrontService] sayHi, 123 -> [MiddleService-gray] sayHello, 123 -> [BackendService-gray] sayHello, 123%
➜ ~ curl http://127.0.0.1:15700/echo\?method\=sayHi\&value\=123
[FrontService] sayHi, 123 -> [MiddleService-normal] sayHello, 123 -> [BackendService-normal] sayHello, 123%
➜ ~ curl http://127.0.0.1:15700/echo\?method\=sayHi\&value\=123
[FrontService] sayHi, 123 -> [MiddleService-normal] sayHello, 123 -> [BackendService-normal] sayHello, 123%
➜ ~ curl http://127.0.0.1:15700/echo\?method\=sayHi\&value\=123
[FrontService] sayHi, 123 -> [MiddleService-gray] sayHello, 123 -> [BackendService-normal] sayHello, 123%
➜ ~ curl http://127.0.0.1:15700/echo\?method\=sayHi\&value\=123
[FrontService] sayHi, 123 -> [MiddleService-gray] sayHello, 123 -> [BackendService-normal] sayHello, 123%
➜ ~ curl http://127.0.0.1:15700/echo\?method\=sayHi\&value\=123
[FrontService] sayHi, 123 -> [MiddleService-gray] sayHello, 123 -> [BackendService-gray] sayHello, 123%
➜ .dubbo curl http://127.0.0.1:15700/echo\?method\=sayHi\&value\=polaris
[FrontService] sayHi, polaris -> [MiddleService-gray] sayHello, polaris -> [BackendService-gray] sayHello, polaris%
➜ .dubbo curl http://127.0.0.1:15700/echo\?method\=sayHi\&value\=polaris
[FrontService] sayHi, polaris -> [MiddleService-gray] sayHello, polaris -> [BackendService-gray] sayHello, polaris%
➜ .dubbo curl http://127.0.0.1:15700/echo\?method\=sayHi\&value\=polaris
[FrontService] sayHi, polaris -> [MiddleService-gray] sayHello, polaris -> [BackendService-gray] sayHello, polaris%
➜ .dubbo curl http://127.0.0.1:15700/echo\?method\=sayHi\&value\=polaris
[FrontService] sayHi, polaris -> [MiddleService-gray] sayHello, polaris -> [BackendService-gray] sayHello, polaris%
➜ .dubbo curl http://127.0.0.1:15700/echo\?method\=sayHi\&value\=polaris
[FrontService] sayHi, polaris -> [MiddleService-gray] sayHello, polaris -> [BackendService-gray] sayHello, polaris%
路由样例包括 3 个工程。
- front工程:dubbo-router-front
- middle工程:dubbo-router-middle
- back工程:dubbo-router-back
4 - 访问限流
Dubbo 分类
Dubbo当前常用的有2个分支版本,一个是apache dubbo(GroupID是org.apache.dubbo), 一个是dubbox (GroupID是com.alibaba)。两个分支的dubbo,对应不同的接入插件,大家接入之前可以先通过GroupID判断下当前项目依赖的是哪个分支的dubbo。
Apache Dubbo 接入
支持版本
- dubbo 2.x 版本的接入,最新版本为
0.2.2
- dubbo 3.x 版本的接入,最新版本请参考: release
引入依赖
首先,动态路由需要依赖以下2个插件,需要将2个插件引入POM中,插件版本建议使用最新版本。
<!-- 北极星注册发现插件 -->
<dependency>
<groupId>com.tencent.polaris</groupId>
<artifactId>dubbo-registry-polaris</artifactId>
<version>${version}<version>
</dependency>
<!-- 北极星限流功能插件 -->
<dependency>
<groupId>com.tencent.polaris</groupId>
<artifactId>dubbo-ratelimit-polaris</artifactId>
<version>${version}<version>
</dependency>
启用北极星访问限流插件
<dubbo:service filter="polaris_ratelimit">
dubbo.provider.filter=polaris_ratelimit
配置北极星注册中心地址
接下来,需要添加北极星 registry 的配置,指定北极星的地址及相关配置信息,可以通过配置文件及代码的方式进行指定:
配置文件方式添加:
<dubbo:registry address="polaris://127.0.0.1:8091"/>
dubbo.registry.address=polaris://127.0.0.1:8091
限流规则字段
访问限流可以实现在被调端基于dubbo的请求消息内容来对请求进行流量限制,比如将带了某些user标签的请求限制速率为100/s。
当前支持针对dubbo消息的以下内容进行流量限制:
应用级注册发现
消息类型 | dubbo消息内容 | 路由规则请求类型 |
---|---|---|
消息头 | attachment | 请求头(HEADER) |
RPC接口 | dubbo interface 全限定名 | 接口名称 |
RPC方法 | dubbo interface 下的具体某个方法的名称 | 请求匹配规则-方法(METHOD) |
请求体参数 | dubbo 方法入参某个字段 | 请求匹配规则-请求参数(QUERY) |
接口级注册发现
消息类型 | dubbo消息内容 | 路由规则请求类型 | |
---|---|---|---|
消息头 | attachment | 请求头(HEADER) | |
RPC方法 | method | 方法(METHOD) | |
请求体参数 | dubbo 方法入参某个字段 | 请求匹配规则-请求参数(QUERY),字段格式 |
- 请求匹配规则为 请求参数(QUERY)
- 请求匹配规则为 请求头(HEADER):
- 标签来源: RPC 调用的额外标签信息,即 Invoaction.Attachments()
- 根据 Dubbo 的 dubbo.application.register-mode 字段的值,决定限流规则的读取
- instance: 仅读取 dubbo 应用级的限流规则
- interface: 仅读取 dubbo 接口级的限流规则
- all: 同时读取 dubbo 应用级、接口级的限流规则,先匹配应用级下的限流规则,后匹配接口级限流规则,只要其中有一个触发限流,Filter 返回错误
功能验证
针对 Dubbo 接口级别的限流
针对 Dubbo 接口下某个方法的限流
代码中无需额外添加限流判断代码,插件会自动在被调端进行请求的限流计算和拦截。
最终限流效果
18:21:58.748 |-ERROR [DubboServerHandler-10.21.22.75:20880-thread-8] .apache.dubbo.rpc.filter.ExceptionFilter: -|
[DUBBO] Got unchecked and undeclared exception which called by 10.21.22.75. service: com.tencent.polaris.dubbo.example.
api.GreetingService, method: sayHi, exception: org.apache.dubbo.rpc.RpcException: Failed to invoke service com.tencent.
polaris.dubbo.example.api.GreetingService.sayHi because exceed max service tps., dubbo version: 3.2.6, current host:
192.168.255.10, error code: 5-36. This may be caused by , go to https://dubbo.apache.org/faq/5/36 to find instructions.
org.apache.dubbo.rpc.RpcException: Failed to invoke service com.tencent.polaris.dubbo.example.api.GreetingService.sayHi
because exceed max service tps.
访问限流样例包括2个工程,代表的是主调端和被调端,限流行为工作在被调端。
环境变量设置
export CONFIG_CENTER_ADDR=127.0.0.1:8093
export METADATA_REPORT_ADDR=127.0.0.1:8091
export POLARIS_DISCOVERY_ADDR=127.0.0.1:8091
export REGISTER_MODE=all
export POD_IP={IP}
- consumer工程:dubbo-governance-consumer
- provider工程:dubbo-governance-provider
代码中无需额外添加限流判断代码,插件会自动在被调端进行请求的限流计算和拦截。
最终限流效果
18:21:58.748 |-ERROR [DubboServerHandler-10.21.22.75:20880-thread-8] .apache.dubbo.rpc.filter.ExceptionFilter: -|
[DUBBO] Got unchecked and undeclared exception which called by 10.21.22.75. service: com.tencent.polaris.dubbo.example.
api.GreetingService, method: sayHi, exception: org.apache.dubbo.rpc.RpcException: Failed to invoke service com.tencent.
polaris.dubbo.example.api.GreetingService.sayHi because exceed max service tps., dubbo version: 3.2.6, current host:
192.168.255.10, error code: 5-36. This may be caused by , go to https://dubbo.apache.org/faq/5/36 to find instructions.
org.apache.dubbo.rpc.RpcException: Failed to invoke service com.tencent.polaris.dubbo.example.api.GreetingService.sayHi
because exceed max service tps.
代码中无需额外添加限流判断代码,插件会自动在被调端进行请求的限流计算和拦截,假如出现限流,则会返回PolarisBlockException异常给调用端。
访问限流样例包括2个工程,代表的是主调端和被调端,限流行为工作在被调端。
- consumer工程:dubbo-ratelimit-consumer
- provider工程:dubbo-ratelimit-provider
5 - 熔断降级
Dubbo 分类
Dubbo当前常用的有2个分支版本,一个是apache dubbo(GroupID是org.apache.dubbo), 一个是dubbox (GroupID是com.alibaba)。两个分支的dubbo,对应不同的接入插件,大家接入之前可以先通过GroupID判断下当前项目依赖的是哪个分支的dubbo。
Apache Dubbo 接入
支持版本
- dubbo 2.x 版本的接入,最新版本为
0.2.2
- dubbo 3.x 版本的接入,最新版本请参考: release
引入依赖
首先,熔断降级需要依赖以下2个插件,需要将2个插件引入POM中,插件版本建议使用最新版本。
<!-- 北极星注册发现插件 -->
<dependency>
<groupId>com.tencent.polaris</groupId>
<artifactId>dubbo-registry-polaris</artifactId>
<version>${revision}<version>
</dependency>
<!-- 北极星熔断功能插件 -->
<dependency>
<groupId>com.tencent.polaris</groupId>
<artifactId>dubbo-circuitbreaker-polaris</artifactId>
<version>${revision}</version>
</dependency>
启用北极星熔断降级插件
<dubbo:reference filter="polaris_circuitbreaker">
dubbo.consumer.filter=polaris_circuitbreaker
配置北极星注册中心地址
接下来,需要添加北极星registry的配置,指定北极星的地址及相关配置信息,可以通过配置文件及代码的方式进行指定:
配置文件方式添加:
<dubbo:registry address="polaris://127.0.0.1:8091"/>
dubbo.registry.address=polaris://127.0.0.1:8091
使用服务熔断
结果验证
➜ ~ curl http://127.0.0.1:15800/echo\?method\=sayHi\&value\=123
org.apache.dubbo.rpc.RpcException: Failed to invoke the method sayHi in the service com.tencent.polaris.dubbo.example.
api.GreetingService. Tried 3 times of the providers [192.168.31.119:20880] (1/1) from the registry 127.0.0.1:8091 on
the consumer 192.168.255.10 using the dubbo version 3.2.6. Last error is: com.tencent.polaris.circuitbreak.client.
exception.CallAbortedException: ERR-1020(CLIENT_CIRCUIT_BREAKING): rule application_rule, fallbackInfo null%
使用接口熔断
结果验证
➜ ~ curl http://127.0.0.1:15800/echo\?method\=sayHi\&value\=123
org.apache.dubbo.rpc.RpcException: java.util.concurrent.ExecutionException: org.apache.dubbo.rpc.RpcException: I'm bad sayHi provider%
➜ ~ curl http://127.0.0.1:15800/echo\?method\=sayHi\&value\=123
org.apache.dubbo.rpc.RpcException: java.util.concurrent.ExecutionException: org.apache.dubbo.rpc.RpcException: I'm bad sayHi provider%
➜ ~ curl http://127.0.0.1:15800/echo\?method\=sayHi\&value\=123
circuitbreaker downgrade info%
➜ ~ curl http://127.0.0.1:15800/echo\?method\=sayHi\&value\=123
circuitbreaker downgrade info%
使用节点熔断
节点熔断可以根据RPC调用的连续错误数、失败率等统计指标,对异常节点进行剔除,保障请求只会路由到健康的节点上去。
当前支持针对RPC调用的服务名和接口进行设置熔断规则。
规则中,设置针对该服务下节点的调用,出现连续5次的失败, 则熔断该节点。
为了测试熔断效果,服务调用的时候,可以针对服务进行多次调用。
结果验证
➜ ~ curl http://127.0.0.1:15800/echo\?method\=sayHi\&value\=123
org.apache.dubbo.rpc.RpcException: java.util.concurrent.ExecutionException: org.apache.dubbo.rpc.RpcException: I'm bad sayHi provider%
➜ ~ curl http://127.0.0.1:15800/echo\?method\=sayHi\&value\=123
[provider by polaris] hi, 123, source from 2.2.2.2%
➜ ~ curl http://127.0.0.1:15800/echo\?method\=sayHi\&value\=123
[provider by polaris] hi, 123, source from 2.2.2.2%
➜ ~ curl http://127.0.0.1:15800/echo\?method\=sayHi\&value\=123
[provider by polaris] hi, 123, source from 2.2.2.2%
➜ ~ curl http://127.0.0.1:15800/echo\?method\=sayHi\&value\=123
[provider by polaris] hi, 123, source from 2.2.2.2%
➜ ~ curl http://127.0.0.1:15800/echo\?method\=sayHi\&value\=123
样例
熔断样例包括2个工程,代表的是2个服务之间调用,调用链路为:consumer->provider(ok/nok)。
provider 通过环境变量来控制是否返回回包失败,启动的时候设置环境变量 EXCEPTION=true,则该provider进程固定会返回回包异常。
可以启动2个 provider 进程,一个进程启动的时候,不设置 EXCEPTION 变量,代表正常进程;另外一个进程设置 EXCEPTION 变量,代表不正常,用于测试熔断。
环境变量设置
export CONFIG_CENTER_ADDR=127.0.0.1:8093
export METADATA_REPORT_ADDR=127.0.0.1:8091
export POLARIS_DISCOVERY_ADDR=127.0.0.1:8091
export REGISTER_MODE=all
export POD_IP={IP}
- connsumer工程:dubbo-governance-consumer
- provider工程:dubbo-governance-provider
- connsumer工程:dubbo-circuitbreak-consumer
- provider工程:dubbo-circuitbreak-provider
6 - 配置中心
提示
Dubbo 动态配置中心仅适用于北极星服务端版本 >= 1.18.0
Dubbo 分类
Dubbo当前常用的有2个分支版本,一个是apache dubbo(GroupID是org.apache.dubbo), 一个是dubbox (GroupID是com.alibaba)。两个分支的dubbo,对应不同的接入插件,大家接入之前可以先通过GroupID判断下当前项目依赖的是哪个分支的dubbo。
Apache Dubbo 接入
支持版本
- dubbo 3.x 版本的接入,最新版本请参考: release
引入依赖
在 pom.xml 中引入以下依赖
<!-- 北极星注册发现插件 -->
<dependency>
<groupId>com.tencent.polaris</groupId>
<artifactId>dubbo-registry-polaris</artifactId>
<version>${version}</version>
</dependency>
<!-- 北极星元数据中心插件 -->
<dependency>
<groupId>com.tencent.polaris</groupId>
<artifactId>dubbo-metadatareport-polaris</artifactId>
<version>${revision}</version>
</dependency>
<!-- 北极星动态配置中心插件 -->
<dependency>
<groupId>com.tencent.polaris</groupId>
<artifactId>dubbo-configcenter-polaris</artifactId>
<version>${revision}</version>
</dependency>
参数配置
接下来,需要添加北极星 registry、config-center 的配置,指定北极星的地址及相关配置信息,可以通过配置文件及代码的方式进行指定:
配置文件方式添加:
dubbo.registry.address=polaris://127.0.0.1:8091
dubbo.metadata-report.address=polaris://127.0.0.1:8091
dubbo.config-center.address=polaris://127.0.0.1:8093
北极星地址的URL支持通过参数指定可选的配置,具体参数列表如下:
参数 | 类型 | 含义 |
---|---|---|
namespace | string | 指定服务的命名空间 |
token | string | 指定用户token |
persist_enable | bool | 设置是否开启客户端本地文件容灾缓存 |
stat_type | string | 设置监控数据上报方式, pull 或者 push |
stat_pull_port | int | stat_type == pull 时,设置 SDK 额外暴露的 metrics web 端口 |
stat_push_addr | string | stat_type == push 时,设置 pushgateway 的 IP:PORT 地址 |
stat_push_interval | int | stat_type == push 时,设置上报周期,单位为毫秒 |
config_port | int | 设置北极星配置中心链接端口,默认为8093 |
discover_port | int | 设置北极星注册中心链接端口,默认为8091 |
验证
服务注册样例可以参考:dubbo-discovery-provider
这里我们已 dubbo 本身的 QOS 能力开关做一个示范, 这里我们现在北极星创建一个控制 dubbo QOS 能力的配置
- 北极星配置分组名为 dubbo application name
- dubbo 默认会给配置中心的接入地址填充 namespace 信息为 dubbo
未在配置中心发布 Dubbo 配置
我们在启动 dubbo 应用之后,可以观察到 dubbo 开启了 qos-server
12:36:50.117 |-INFO [main] org.apache.dubbo.qos.server.Server:123 -| [DUBBO] qos-server bind localhost:22222, dubbo version: 3.2.6, current host: 10.21.22.75
在配置中心发布 Dubbo 配置
我们在启动 dubbo 应用之后,可以观察到 dubbo 在启动过程中, 从北极星配置中心读取到到了 dubbo.application.qos-enable=false 配置,因此不会启动 dubbo 内置的 qos-server
15:26:03.571 |-INFO [main] he.dubbo.qos.protocol.QosProtocolWrapper:109 -| [DUBBO] qos won't be started because it is disabled.
Please check dubbo.application.qos.enable is configured either in system property, dubbo.properties or XML/spring-boot configuration., dubbo version: 3.2.6, current host: 10.21.22.75