自定rpc框架Provider

xiaoxiao2021-02-28  31

写代码之前我们先定义好工程结构

1 :Rpc-Server

服务发布 框架的RPC 服务器(用于将用户系统的业务类发布为 RPC 服务) * 使用时可由用户依赖Spring容器注入到用户的业务系统中

2:Rpc-Registry

服务注册 Zookeeper 在该架构中扮演了“服务注册表”的角色,用于注册所有服务器的地址与端口,并对客户端提供服务发现的功能

3:Rpc-Common

通信编码,解码

4:Rpc-Client

框架的RPC 客户端(用于发送 RPC 请求)

RpcServer: public class RpcServer implements ApplicationContextAware, InitializingBean {

private static final Logger LOGGER = LoggerFactory.getLogger(RpcServer.class); private String serverAddress; public RpcServer(String serverAddress) { this.serverAddress = serverAddress; } public RpcServer(String serverAddress){ } public void setApplicationContext(ApplicationContext ctx) throws BeansException { } public void afterPropertiesSet() throws Exception { EventLoopGroup bossGroup = new NioEventLoopGroup(); EventLoopGroup workerGroup = new NioEventLoopGroup(); try { ServerBootstrap bootstrap = new ServerBootstrap(); bootstrap .group(bossGroup, workerGroup) .channel(NioServerSocketChannel.class) .childHandler(new ChannelInitializer<SocketChannel>() { @Override public void initChannel(SocketChannel channel) throws Exception { } }).option(ChannelOption.SO_BACKLOG, 128) .childOption(ChannelOption.SO_KEEPALIVE, true); String[] array = serverAddress.split(":"); String host = array[0]; int port = Integer.parseInt(array[1]); ChannelFuture future = bootstrap.bind(host, port).sync(); LOGGER.debug("server started on port {}", port); future.channel().closeFuture().sync(); } finally { workerGroup.shutdownGracefully(); bossGroup.shutdownGracefully(); } }

}

RpcServer类实现了 ApplicationContextAware, InitializingBean 的两个接口,spring构造本对象时会调用setApplicationContext()方法,从而可以在方法中通过自定义注解获得用户的业务接口和实现,还会调用afterPropertiesSet()方法,在方法中启动netty服务器


总结:RpcServer为自定义rpc框架的核心类之一,用于使用者来发布服务.。RpcServer只提供了一个netty的服务端的。并没有像我们说的rpc服务接口。。好的。下篇我们通过自定义注解来实现我们的rpc的服务,并为netty 服务端和客户端提供编码解码的实现类

转载请注明原文地址: https://www.6miu.com/read-2630003.html

最新回复(0)