.net - WCF MSMQ 的观察者模式

标签 .net wcf msmq observer-pattern

MSMQ携带的消息是否可以有多个监听器?

WCF 似乎以服务的形式构建一切,使通信成为点对点的事情。我想使用消息队列来缓冲另一个在数据库中记录日志的进程的传入流量。

可以有任何数量的其他进程对监视传入流量感兴趣,这肯定需要观察者模式,但我看不出如何表达观察者模式,至少不能通过 WCF 使用 MSMQ。

有人可以就此给我建议吗?


关于我为什么关心的一些背景,这也可以用来说明问题:我有一个 Windows 服务,它接受来自现场小黑盒的连接请求。它设置套接字,黑匣子发送消息描述事件,并在时间和空间上用 GPS 位置注释。

我解析来自套接字流的消息数据包,并通过 MSMQ 将它们发送到另一个进程,该进程过滤重复项并将数据包写入数据库表。

任何数量的后处理都可以从响应传入流量的增量计算中获益,并且用户工具也会执行用户通知以响应传入流量。

所以,我真的很希望有一个进程发送消息,而多个进程接收消息。这些接收者之一负责解析数据包内容并将消息转录到数据库中;这是最终从队列中删除消息的责任的明显候选者,但存在如何确保这是处理消息的最后一个处理程序的问题。

最佳答案

我认为 MSMQ 本身并没有适本地设计来处理这种情况。对于一条消息,您只能做两件事——Peek() 或 Get()。 AFAIK,没有一种好方法来跟踪消息是否已被所有处理程序处理。

可行的方法是让转录消息的进程成为观察者,并在转录消息和写入数据库之前将消息发布(可能使用 .NET 事件架构)给所有感兴趣的观察者。这将保证所有感兴趣的观察者都能看到消息,并且消息会被适本地写入数据库。

关于.net - WCF MSMQ 的观察者模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/248541/

相关文章:

.net - Ftp 仅在 .NET 4.0 中抛出 WebException

c# - 使用 WPF 动画淡出任何控件

c# - WCF 作为应用程序工作,而不是作为服务

c# - 带有 WCF DataService 的 OData - 添加自定义查询选项

c# - 消息队列 - 同时处理多个响应 - C#.NET

c# - 嵌入式系统: Sockets vs MSMQ

c# - 使用 Rx 和 SelectMany 限制并发请求

c# - 使用 ODBC 命令进行选择时出现错误 "ORA-00933: SQL command not properly ended"

c# - 在 azure 上运行时访问本地文件

msmq - nServiceBus、公共(public)交通、Rhino 服务总线、其他?