2008-10-29 47 views
3

Observer模式是否有可能有多个听众通过MSMQ进行消息?与WCF MSMQ

WCF出现在服务方面,以框一切,使得通信的点,以点事。我想使用消息队列来缓冲另一个在数据库中记录日志的进程的传入流量。

可能有任何数量的其他进程感兴趣的监视传入的流量,这积极乞求观察者模式,但我不明白如何表达观察者模式,至少不通过WCF使用MSMQ。

谁能告诉我这个?


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

我解析从插座流消息分组,并且经由MSMQ它们发送到其过滤重复并且将分组写入到数据库表的另一过程。

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

所以,我真的很想有一个进程发送消息,和几个接收他们。其中一个接收器负责解析数据包内容并将消息转录成数据库;这是终于从队列中移除该消息的责任,一个明显的候选人,但如何保证这是最后的处理程序处理消息的问题。

回答

3

我不相信MSMQ适当地设计自己来处理这种情况。对消息只能做两件事 - Peek()或Get()。 AFAIK,没有一个好方法来跟踪消息是否已经被所有处理程序处理。

可能的工作是让您的流程将讯息转录为观察者,然后在转录消息并写入数据库之前将消息(可能使用.NET事件架构)发布给所有感兴趣的观察者。这将保证所有感兴趣的观察者都能看到该消息,并将消息正确写入数据库。

+0

哈珀,这正是我最终做的。我创建了两个接口,IPublisher和ISubscriber,以及一个双工绑定。记录器是MSMQ端点,在数据安全地存储在数据库中后,它会通知任何订户。 – 2008-10-30 00:20:42

0

我想你需要一个Publish-Subscribe Channel

如何发送广播事件给所有感兴趣的接收者? 发送事件上的发布 - 订阅频道,它提供了一个特别事件 的副本到每个接收器。

发布 - 订阅通道的工作原理是这样的:它有一个输入通道 其分成多个输出通道,一个用于每个用户。 当一个事件被发布到通道中,发布 - 订阅 通道递送消息的副本到每个输出信道。 每个输出通道仅具有一个订户,这是只允许 消耗消息一次。通过这种方式,每个用户只收到一次消息 ,消费副本从其频道中消失。

此模式在MSMQ之上由MassTransitNServiceBus实施。