使用分布式注册与发现服务
生态 / Solon Cloud Discovery [传送]
1、情况简介
分布式注册与发现服务,也可叫云端注册与发现服务(一般给 Rpc 架构使用)。
- 主要通过 CloudDiscoveryService 接口进行适配
- 使用 CloudClient.discovery() 获取适配实例;从而注册和发现(一般不直接使用。自动的)
- 还可以借用 LoadBalance.get(group, service) 进行简单发现服务(一般也不直接使用)
- 一般无感知使用
目前适配有:local, water, consul, nacos, zookeeper, polaris 等
2、简单演示
2.1、配置
solon.app:
group: "demo" #同时也会做为服务分组(如果适配的服务支持的话)
name: "demoapp" #同时也做为服务注册名
solon.cloud.water:
server: "waterapi:9371"
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