small-rpc 框架(六)-服务端服务发布
public class ProviderServer {
public static void main(String[] args) {
//注册中心
ServiceRegistry serviceDiscovery = new ZkServiceDiscovery("192.17.x.x:2181");
//服务注册
//server配置
ServerConfig serverConfig =
ServerConfig.builder().appName("mic-hello")
.host(NetUtil.getLocalhostStr())
.port(9999)
.build();
NettyRpcServer server = new NettyRpcServer(serverConfig,serviceDiscovery);
//具体服务
HelloService helloService = new HelloServiceProvider();
//服务注册
server.registerService(helloService);
//server启动
server.start();
}
}
服务器服务发布流程,主要在 registerService
进行注册
public void registerService(Object handler) {
//接口类名
serviceProviderRegistry.addService(handler.getClass().getInterfaces()[0].getCanonicalName(), handler);
}
委托给 ServiceProviderRegistry
ServiceProviderRegistry
public interface ServiceProviderRegistry {
/**
* 服务注册
* @param interfaces: 接口完整类名,如 com.xx.HelloService
* @param handler: bean instance
*/
void addService(String interfaces,Object handler);
/**
* 获取 beanName获取
* @param interfaces: 接口完整类名,如 com.xx.HelloService
* @return
*/
Object getService(String interfaces);
}
public class DefaultServiceProviderRegistry implements ServiceProviderRegistry {
// classFullName,Object
private Map<String, Object> map = new ConcurrentHashMap<>();
@Override
public void addService(String interfaces, Object handler) {
if (!map.containsKey(interfaces)) {
map.put(interfaces, handler);
}
}
@Override
public Object getService(String interfaces) {
return map.get(interfaces);
}
}
ServerConfig
@Data
@Builder
public class ServerConfig {
private String host;
private int port;
//服务名称
private String appName;
}