我有一个关于MSMQ的任务......我设计了一个像这样的异步架构:
CLient - > WCF服务(托管在WinService中) - > MSMQ
所以基本上WCF服务接收请求,处理它们,将它们添加到INPUT队列并返回GUID.相同的WCF服务(通过侦听器)从队列中获取第一条消息(执行某些操作......)然后将其放回另一个队列(OUTPUT).
问题是当客户端请求时,如何从OUTPUT队列中检索结果...因为MSMQ不允许随机访问它的消息,唯一的解决方案是遍历所有消息并将其推回,直到找到我需要的确切一个.我不想在这个OUTPUT队列中使用DB,因为客户端施加了一些限制......
队列本质上是一种"先进先出"的数据结构,而您想要的是"随机访问"数据结构.它不是为你想要在这里实现的目标设计的,所以没有任何"干净"的方法来做到这一点.即使有办法,也会是黑客攻击.
如果你详细说明客户施加的限制,也许还有其他选择.你为什么不想使用数据库?你可以使用本地SQLite数据库,甚至是内存中的数据库吗?
编辑:如果你有一个客户端规定实施细节自己有害,那么你真的只有三种方法:
您可以使用输入查找输出队列中的消息
var mq = new MessageQueue(outputQueueName);
mq.PeekById(yourId);
Run Code Online (Sandbox Code Playgroud)
通过Id接收:
mq.ReceiveById(yourId);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5552 次 |
| 最近记录: |