接上一个节,看看消息的接收过程,如果按照于发送的对称的方法,大概也能猜出大概的过程。
与发送不同的是,并不是消息队列管理器QueueManager新建接收协调器,然后运行接收服务。真正的流程是QueueManager直接接收协调器 AcceptMessages(其实就是一个回调函数,不过其实他也不算真正的接收协调器,他只是负责消息接收序列化的存储,然后返回一个负责事务的另一个接收协调器IMessageAcceptance)初始化网络接收操作Receiver,网络接收操作本身就是一个tcp监听服务,然后按照一般的流程接收连接,并且按照队列协议处理相关的数据。
接收的流程对于写过网络程序人来说很简单,加之采用了一个异步辅助框架,这个会在后续文章里面提到。具体的流程如下
1、监听连接;
2、接收连接;
3、接收消息的长度;
4、按照步骤3的长度读取消息数据;
5、序列化收到的数据;
6、调用前面提到的QueueManager初始化接收连接时传递的AcceptMessages的回调函数保存消息,同时回调函数会返回另一个接收协调器负责后续的事务处理;
7、向发送方发送确认消息,然后等待发送收到确认消息后的回复;
8、收到发送方的回复的消息后,提交事务,或者没有收到,回滚事务;
9、如果步骤8提交事务出错,或者回滚事务,则向发送端发送撤销消息;如果正常则正常关闭。
流程可以参照如下,因为是所有的异步,所以这个流程的退出不会影响监听的。