我们有一个核心系统,它通过 MSMQ 与其客户端和其他内部系统异步通信。这是一个很好的选择,因为客户端是发送短信的手机,而其他系统具有 MQ 适配器。此外,这些通信过程默认情况下是异步的。
现在我们需要支持其他需要默认同步通信样式的系统。一个典型的例子是手持设备,它支持通过 HTTP 的 rpc 样式请求/响应通信。
有一个解决方案建议通过添加一个 HTTP“代理”/端点来支持这一点,它将从这些客户端收到的消息推送到具有相关 ID 的入站队列,然后在出站队列中查找具有相同相关 ID 的消息。希望消息的处理完成,具有预期相关 ID 的消息将出现在出站队列中。这将发生在将消息推送到核心系统以模拟请求响应的同一线程上。
但是,我们看到通过correlationId (MessageQueue.ReceiveByCorrelationId) 接收消息是性能杀手。真正减慢系统速度并不需要很多客户端线程。
我想问题是提出的设计,使用通过相关 ID 方法接收来模拟同步请求响应是这里的问题。在当前架构中,出站队列驻留在远程主机上,一直在阅读此内容以查看是否存在问题。
有没有人有任何其他方法来解决这个问题?我想合乎逻辑的事情是将消息从出站队列填充到数据库或来自单个接收进程的东西,然后搜索具有相应correlationId的消息