您的位置:首页 > 其它

Dubbo源码阅读之 服务端和客户端处理链

2017-06-28 19:35 381 查看
【 DubboProtocolTest.java ====>> 服务器 ===>> 处理器职责链】

1. 职责链:NettyHandler --> NettyServer --> MultiMessageHandler --> HeartbeatHandler 

                --> AllChannelHandler --> DecoderHandler --> HeaderExChangeHandler 

                --> requestHandler=new ExchangeHandlerAdapter

2. 处理器:NettyHandler

                        ======>>> 维护客户端与服务端建立连接的 channel,通过ConcurrentMap来做到的。

3. 处理器:NettyServer

                        ======>>> 啥事都没有做,直接传递给下一个消息处理器。

4. 处理器:MultiMessageHandler

                        ======>>> 在接受消息的方法中,判断了当前消息是否是 MultiMessage 也就是 message instanceof MultiMessage。

5. 处理器:HeartbeatHandler

                        ======>>> 更新当前处理器的读写的时间戳。

                        ======>>> 在接受消息的方法中,判断当前消息是否是心跳消息,如果是心跳请求,就查看当前消息是否要响应,如果需要响应就发送一个心跳响应。

6. 处理器:AllChannelHandler

                        ======>>> 启动一个Task,提交到一个无界的线程池。

7. 处理器:DecoderHandler

                        ======>>> 判断该消息是否实现了接口Decodeable,如果实现了就调用方法 decode()。

8. 处理器:HeaderExChangeHandler

                        ======>>> receive方法中会调用发送方法,给客户端返回结果值。

9. 处理器:requestHandler

                        ======>>> 接收消息,判断消息是否是 Invocation。

                        ======>>> 根据Key获取的Invoker,就是目标实例/方法。
                        ======>>> 调用目标方法。

【 DubboProtocolTest.java ====>> 客户端器 ===>> 处理器职责链】

1. 职责链:NettyHandler --> NettyClient --> MultiMessageHandler --> HeartbeatHandler 

                --> AllChannelHandler --> DecoderHandler --> HeaderExChangeHandler 

                --> requestHandler=new ExchangeHandlerAdapter

2. 处理器:NettyHandler

                        ======>>> 维护客户端与服务端建立连接的 channel,通过ConcurrentMap来做到的。

3. 处理器:NettyServer

                        ======>>> 啥事都没有做,直接传递给下一个消息处理器。

4. 处理器:MultiMessageHandler

                        ======>>> 在接受消息的方法中,判断了当前消息是否是 MultiMessage 也就是 message instanceof MultiMessage。

5. 处理器:HeartbeatHandler

                        ======>>> 更新当前处理器的读写的时间戳。

                        ======>>> 在接受消息的方法中,判断当前消息是否是心跳消息,如果是心跳请求,就查看当前消息是否要响应,如果需要响应就发送一个心跳响应。

6. 处理器:AllChannelHandler

                        ======>>> 启动一个Task,提交到一个无界的线程池。

7. 处理器:DecoderHandler

                        ======>>> 判断该消息是否实现了接口Decodeable,如果实现了就调用方法 decode()。

8. 处理器:HeaderExChangeHandler

                        ======>>> receive方法中会调用发送方法,给服务器发送响应

9. 处理器:requestHandler

                        ======>>> 接收消息,判断消息是否是 Invocation。

                        ======>>> 根据Key获取的Invoker,就是目标实例/方法。

                        ======>>> 调用目标方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息