基于netty实现Dubbo RPC调用

netty是基于NIO(同步非阻塞)开发的网络通信框架;对比传统BIO(阻塞IO),其并发性能有很大提升。而dubbo的底层就是使用netty作为网络框架,本文就手写简单的基于netty的RPC框架。

1 设计步骤

定义一个通用接口,作为服务提供者(provider)和消费者(consumer)之间的操作纽带

创建一个服务提供者,实现通用接口,并返回处理结果;网络方面监听消费者请求

创建一个服务消费者,通过代理模式调用远程服务接口

1.1 程序目录

在这里插入图片描述

1.2 定义一个通用接口

public interface TestService {
   
    String hello(String msg);
}

2 服务提供者模块

2.1 接口实现

public class TestServiceImpl implements TestService {
   
    @Override
    public String hello(String msg) {
   

        System.out.println("TestServiceImpl中hello被调用,参数:" + msg);
        return "你好客户端,我已经收到你的消息:" + msg;
    }
}

2.2 定义一个服务启动类

public class ServerBootStrap {
   
    public static void main(String[] args) {
   
        NettyServer nettyServer = new NettyServer(40004);
        nettyServer.init();
    }
}

2.3 创建netty服务端

**此步骤是netty常规服务端创建方式**

public class NettyServer {
   

    private int port;

    public NettyServer(int port) {
   
        this.port = port;
    }

    public void init() {
   
		//创建一个用于接收连接的线程组,参数代表线程个数
        EventLoopGroup boss = new NioEventLoopGroup(1);
        //创建处理操作时间的线程组,没有参数netty会默认线程为内核数*2
        EventLoopGroup worker = new NioEventLoopGroup();
        try {
   
            ServerBootstrap serverBootstrap = new ServerBootstrap();
            serverBootstrap
                    .group(boss, worker)
                    .channel(NioServerSocketChannel.class)
                    .childHandler(new ChannelInitializer<SocketChannel>() {
   
                        @Override
                        protected void initChannel(SocketChannel socketChannel) throws Exception {
   
                            ChannelPipeline pipeline = socketChannel.pipeline();
                            pipeline.addLast(new StringDecoder()
  • 11
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值