使用分布式发现与注册服务
生态 / Solon Cloud Discovery [传送]
1、情况简介
分布式注册与发现服务,也可叫云端注册与发现服务(一般给 Rpc 架构使用)。
- 主要通过 CloudDiscoveryService 接口进行适配
- 使用 CloudClient.discovery() 获取适配实例;从而注册和发现(一般不直接使用。自动的)
- 还可以借用 LoadBalance.get(group, service) 进行简单发现服务(一般也不直接使用)
- 支持
discovery.agent.{service}
配置代理(特别适合 k8s 环境) - 一般无感知使用
目前适配有:local, water, consul, nacos, zookeeper, polaris 等
2、简单演示
2.1、配置
solon.app:
group: "demo" #同时也会做为服务分组(如果适配的服务支持的话)
name: "demoapp" #同时也做为服务注册名
solon.cloud.water:
server: "waterapi:9371"
增强应用元信息(可用于过滤,通过 meta 和 tags):
solon.app:
name: "demoapp"
group: "demo"
meta: #添加应用元信息(可选)
version: "v1.0.2"
author: "noear"
tags: "aaa,bbb,ccc" #添加应用标签(可选)
solon.cloud.water:
server: "waterapi:9371"
增加本地发现配置(按需选择):
solon.cloud.local:
discovery:
service:
demoapp: #添加本地服务发现(demoapp 为服务名)
- "http://localhost:8081"
2.2、Rpc 注册与发现应用
Rpc 服务端(服务注册是自动的,用户无感知)
//
// 1.所有 remoting = true 的组件,即为 rpc 服务;
// 2.以 uri 的形式提供资源描述,以同时支持 rest api 和 rpc 两种模式(不要有相同的函数名出现)
//
@Mapping("/rpc/")
@Remoting
public class HelloServiceImpl implements HelloService{
@Override
public String hello(String name) {
return null;
}
}
Rpc 客户端
@Controller
public class HelloController {
//注入Rpc服务代理(会自动通过发现服务获取服务集群)
@NamiClient(name = "hellorpc", path = "/rpc/")
HelloService helloService;
public String hello(String name){
return helloService.hello(name);
}
}
2.3、基于发现服务的负载均衡
发现服务的适配成果,最终会转为负载均衡接口:
//根据服务名获取“负载均衡”
LoadBalance loadBalance = LoadBalance.get("hellorpc");
“@NamiClient(name = "hellorpc")” 便于基于 LoadBalance。再比如,支持服务名调用的 http client(solon.cloud.httputils)
String rst = HttpUtils.http("hellorpc", "/rpc/hello").data("name","world").post();
代码演示:
https://gitee.com/noear/solon-examples/tree/main/9.Solon-Cloud