1 - 服务注册
在 dubbogo 中快速体验北极星的服务注册以及服务发现能力
环境准备
参考 dubbogo 官网文档
dubbogo.yaml 配置文件
dubbo:
registries:
polaris-1:
protocol: polaris
address: ${北极星服务端IP}:8091
namespace: ${北极星命名空间信息}
token: ${北极星资源鉴权 token} # 如果北极星服务端开启了针对客户端的鉴权,则需要配置该参数
示例代码(dubbogo 原生使用方式)
当前 PolarisMesh 已实现了 dubbogo 的注册发现扩展点,因此你只需要调整你的 dubbogo.yaml 文件中的 registries 配置项,新增 protocol 为 polaris 的注册中心配置即可,可以参考下面的样例。
func init() {
config.SetProviderService(&UserProvider{})
hessian.RegisterPOJO(&User{})
}
type UserProvider struct {}
func (u *UserProvider) GetUser(ctx context.Context, req *User) (*User, error) {
rsp := User{"A001", "Alex Stocks", 18, time.Now()}
return &rsp, nil
}
func main() {
if err := config.Load(); err != nil {
panic(err)
}
initSignal()
}
验证
可根据 dubbogo example 开展
2 - 服务发现
在 dubbogo 中快速体验北极星的服务发现能力
环境准备
参考 dubbogo 官网文档
dubbogo.yaml 配置文件
dubbo:
registries:
polaris-1:
protocol: polaris
address: ${北极星服务端IP}:8091
namespace: ${北极星命名空间信息}
token: ${北极星资源鉴权 token} # 如果北极星服务端开启了针对客户端的鉴权,则需要配置该参数
示例代码(dubbogo 原生使用方式)
dubbogo 在进行服务调用时,会先通过 Polaris Registry 的 Extension 获取到服务的实例列表,然后转换为 dubbogo invoker,最终完成 dubbogo 服务调用。
当前 Polaris 已实现了 dubbogo 原生的服务发现扩展点,因此原本的 dubbogo 服务调用无需调整业务代码,仅需要在 dubbogo.yaml 中新增 protocol 为 polaris 的注册中心配置即可。
func main() {
var userProvider = &UserProvider{}
config.SetConsumerService(userProvider)
hessian.RegisterPOJO(&User{})
if err := config.Load(); err != nil {
panic(err)
}
user, err := userProvider.GetUser(context.TODO(), &User{Name: "Alex001"})
if err != nil {
panic(err)
}
logger.Infof("response result: %v\n", user)
}
验证
可根据 dubbogo example 开展
3 - 动态路由
当前支持针对 dubbogo 消息的以下内容进行动态路由:
消息类型 | dubbo消息内容 | 路由规则请求类型 |
---|---|---|
消息头 | attachment | 请求头(HEADER) |
RPC方法 | method | 路径(PATH) |
环境准备
参考 dubbogo 官网文档
dubbogo.yaml 配置文件
dubbo:
registries:
polaris-1:
protocol: polaris
address: ${北极星服务端IP}:8091
namespace: ${北极星命名空间信息}
token: ${北极星资源鉴权 token} # 如果北极星服务端开启了针对客户端的鉴权,则需要配置该参数
- 在使用动态路由能力时,需要先启用 Polaris 在 dubbogo 中的注册发现功能。
如何配置服务路由参数
dubbogo 中的 PolarisMesh PriorityRouter 扩展点实现,能够根据用户配置的服务路由规则,自动的从当前 RPC 调用上下文以及请求信息中识别出需要参与服务路由的请求标签信息。
假定一个场景:
- 希望 uid 为 user-1 的请求,路由到 environment 标签为 pre 的实例上
- 希望 uid 为 user-2 的请求,路由到 environment 标签为 dev 的实例上
- 其他则路由到 environment 标签为 prod 的实例上,那可以为 dubbogo 服务设置三条路由规则。
- 请求匹配规则为 请求参数(QUERY)
- 请求匹配规则为 请求头(HEADER):
- 标签来源: RPC 调用的额外标签信息,即 Invoaction.Attachments()
示例代码(dubbogo 原生使用方式)
func (s *Service) GetUser(uid string) {
atta := make(map[string]interface{})
atta["uid"] = uid
// 通过这种方式往 attachement 传入路由条件
reqContext := context.WithValue(context.Background(), constant.DubboCtxKey("attachment"), atta)
for i := 0; i < 5; i++ {
time.Sleep(200 * time.Millisecond)
user, err := userProvider.GetUser(reqContext, &User{Name: "Alex001"})
if err != nil {
logger.Errorf("error: %v\n", err)
}
logger.Infof("response: %v\n", user)
}
}
验证
可根据 dubbogo example 开展
4 - 访问限流
当前支持针对 dubbogo 消息的以下内容进行访问限流:
消息类型 | dubbo消息内容 | 路由规则请求类型 |
---|---|---|
消息头 | attachment | 请求头(HEADER) |
RPC方法 | method | 路径(PATH) |
环境准备
参考 dubbogo 官网文档
dubbogo.yaml 配置文件
在 dubbogo 中启用 Polaris 的 TpsLimiter,具体开启配置参考如下
dubbo:
registries:
polaris-1:
protocol: polaris
address: ${北极星服务端IP}:8091
namespace: ${北极星命名空间信息}
token: ${北极星资源鉴权 token} # 如果北极星服务端开启了针对客户端的鉴权,则需要配置该参数
provider:
services:
UserProvider:
interface: org.apache.dubbo.UserProvider.Test
tps.limiter: polaris-limit # 配置 tps.limiter 为 polaris-limiter 即可
- Polaris 的访问限流能力是工作在 Provider 侧的。
- 在使用访问限流能力时,需要先启用 Polaris 在 dubbogo 中的注册发现功能。
如何配置服务限流参数
dubbogo 中的 PolarisMesh TpsLimiter 扩展点实现,能够根据用户配置的限流规则,自动的从当前 RPC 调用上下文以及请求信息中识别出需要参与限流的请求标签信息。
比如对 dubbogo 中的 GetUser 方法,对请求参数 Name 为 Alex 的请求进行限流,速率为10/s。
- 请求匹配规则为 请求参数(QUERY)
- 请求匹配规则为 请求头(HEADER):
- 标签来源: RPC 调用的额外标签信息,即 Invoaction.Attachments()
验证
可根据 dubbogo example 开展