Dubbo provider处理请求

服务端接收并响应请求流程

provider处理请求流程

在这里插入图片描述

- NettyServerWorker线程接收请求
    - ByteToMessageDecoder.channelRead()
        - ByteToMessageDecoder.callDecode()
            - NettyCodecAdapter.InternalDecoder.decode()
                - DubboCountCodec.decode()解码
        - fireChannelRead(ctx, out, size)
            - NettyServerHandler.channelRead()
                - AbstractPeer.received()
                    - MultiMessageHandler.received()
                        - HeartbeatHandler.received()
                            - AllChannelHandler.received()
                                - cexecutor.execute(new ChannelEventRunnable())// 请求派发到线程池处理,逻辑在ChannelEventRunnable.run()里

AllChannelHandler.received()方法中:

cexecutor.execute(new ChannelEventRunnable(channel, handler, ChannelState.RECEIVED, message));

会将请求交给 ChannelEventRunnable 进行处理,后续在 DubboServerHandler 线程池里的调用逻辑:
在这里插入图片描述

- provider处理请求流程
- ChannelEventRunnable.run()通道事件,判断RECEIVED事件进行处理
    - DecodeHandler.received()解码处理器
        - HeaderExchangeHandler.received()基于消息头的处理
            - 1.HeaderExchangeHandler.handleRequest()处理请求
                - DubboProtocol.requestHandler.reply()
                - 1.从exporterMap(服务暴露时创建的)中获取对应的invoker对象
                - 2.invoker.invoke()
                    - 经过各个filter.invoke()
                    - InvokerWrapper.invoke()
                        - AbstractProxyInvoker.invoke()中
                        - 1.doInvoke(methodName,paramType, arguments)
                            - JavassistProxyFactory.doInvoke()
                                - com.alibaba.dubbo.demo.provider.DemoServiceImpl.sayHello()
                                    - DemoServiceImpl.sayHello()
                        - 2.new RpcResult()上一步的返回结果包装成RpcResult返回,后续处理原路返回
            - 2.channel.send(response)响应请求
            - // 参见 provider响应请求流程

provider请求响应流程

- provider响应请求流程
    - 各个filter的后续处理
        - HeaderExchangeHandler.received()中处理请求时走handleRequest(),请求处理完后通过channel.send(response)响应
            - AbstractPeer.send()
                - netty4/NettyChannel.send()
                
- 响应线程NettyServerWorker-3-1
    - Thread.run()
        - DefaultThreadFactory$DefaultRunnableDecorator.run()
            - SingleThreadEventExecutor.run()
                - NioEventLoop.run()
                    - SingleThreadEventExecutor.runAllTasks()
                    - // ...
                        - AbstractChannelHandlerContext$WriteAndFlushTask.write()
                            - NettyServerHandler.write()
                                - AbstractPeer.sent()
                                    - AbstractChannelHandlerDelegate.sent()
                                        - HeartbeatHandler.sent()设置最后的写时间
                                            - WrappedChannelHandler.sent()
                                                - AbstractChannelHandlerDelegate.sent()
                                                    - HeaderExchangeHandler.sent()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FlyingZCC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值