我从客户端应用程序向远程队列发送请求/事务(包含要执行的操作(和参数)+ transactionID)。远程服务器在某个时间点将请求出列并需要一些时间来处理它。
一旦完成处理,它会在客户端队列上发送一个响应(包含应用响应 + 事务 ID)......所以这是一种完全“断开连接”的通信模式,客户端可以将响应映射到请求是通过 transactionID。
消息响应在客户端出列,并与原始请求匹配(基于 transactionID)。
我现在正在做的是,当客户端将请求发布到服务器队列时,它会向保留 transactionId 和回调(委托)的字典添加回调。这是一个Dictionary<int, object>
将 transactionId 映射回回调以调用操作结果。
回调/委托被存储为对象,因为根据请求,回调委托签名是不同的(例如,一个响应可能返回 aList<string>
而另一个响应可能返回一个int
)。
当客户端队列出列响应时,它知道响应的类型(以及相应的回调签名),因此它根据 transactionID 从字典中获取回调。然后它将对象转换回相应的委托类型并调用回调。
我发现这种方法不是很“性感”,但我并没有真正看到执行此类任务的另一种方法。
有没有更好的方法来执行此操作?
如果问题不够清楚,请告诉我,并通过一些编辑来澄清。