
1.背景:
目前GW(CMDIFGW)和TA(TaskAdapter)之间通信方式有MSMQ和UDP或PGM组播,TA发出的MQ消息和组播消息并不能保证在GW接收时候能够按照TA发送时候的顺序接收。如下场景:
1)场景: 出现几率比较高
✧TA发送Queuing消息到MQ
✧TA发送Running消息到多播组
✧多播组发送Running消息到GW
✧MQ发送Queuing消息到GW
图1.1
2)场景: 在使用的UDP组播协议时候(局域网几乎不会出现)
✧TA发送三个通知消息到多播组,如:1,2,3…
✧多播组发送三个乱序的消息到GW,如:2,1,3…
图1.2
2.解决方法:
需要修改GWTA协议内容,在Header节点下面新增EventID元素,该元素表示当前任务的事件序号。
图2.1
1)TA(MPC) – 针对该任务(任务标志ID:ReuqestID)将返回给GW的OnReply消息以及OnNotify消息进行从0编号,发送一个消息EventID编号加一。
2)TA(MSV) – 针对该任务(任务标志ID:ReuqestID)将返回给GW的OnReply消息以及OnNotify消息进行从0编号,发送一个消息EventID编号加一。
3)GW – 在没有收到OnReply或Timeout超时消息前缓存针对该任务(任务标志ID:ReuqestID)的所有消息,并根据缓存消息中的EventID有序地反馈给WorkFlow Layer。
