MSMQ查询特定消息

Geo*_*XYZ 3 msmq

我有一个关于MSMQ的任务......我设计了一个像这样的异步架构:

CLient - > WCF服务(托管在WinService中) - > MSMQ

所以基本上WCF服务接收请求,处理它们,将它们添加到INPUT队列并返回GUID.相同的WCF服务(通过侦听器)从队列中获取第一条消息(执行某些操作......)然后将其放回另一个队列(OUTPUT).

问题是当客户端请求时,如何从OUTPUT队列中检索结果...因为MSMQ不允许随机访问它的消息,唯一的解决方案是遍历所有消息并将其推回,直到找到我需要的确切一个.我不想在这个OUTPUT队列中使用DB,因为客户端施加了一些限制......

EMP*_*EMP 6

队列本质上是一种"先进先出"的数据结构,而您想要的是"随机访问"数据结构.它不是为你想要在这里实现的目标设计的,所以没有任何"干净"的方法来做到这一点.即使有办法,也会是黑客攻击.

如果你详细说明客户施加的限制,也许还有其他选择.你为什么不想使用数据库?你可以使用本地SQLite数据库,甚至是内存中的数据库吗?

编辑:如果你有一个客户端规定实施细节自己有害,那么你真的只有三种方法:

  1. 解决它们.在这种情况下,这可能涉及使用SQLite数据库 - 它只是一个文件,客户端可能甚至不会将其视为"数据库".
  2. 深入探究并找出潜在问题是什么,即.为什么他们不想使用DB?他们真正的担忧和基本假设是什么?
  3. 接受一个糟糕的解决方案并向客户解释这是由于他们自己的限制.这永远不会好,也绝不容易,所以它真的是最后的手段.


Lou*_*cht 5

您可以使用输入查找输出队列中的消息

var mq = new MessageQueue(outputQueueName);
mq.PeekById(yourId);
Run Code Online (Sandbox Code Playgroud)

通过Id接收:

mq.ReceiveById(yourId);
Run Code Online (Sandbox Code Playgroud)