【发布时间】:2010-02-09 19:47:19
【问题描述】:
假设我的计算机上没有安装网卡,并且我希望具有类似于以下的功能:
进程 1 将向某个 URI 发布消息,例如“Uri1”
var publisher = new Publisher("Uri1");
publisher.publish(new Message("Somedata");
进程 2 将侦听“Uri1”上的消息并将消息发布到“Uri2”
var subscriber = new Subscriber("Uri1")
subscriber.MessageReceived += data => Console.Writeline(data.ToString());
var publisher = new Publisher("Uri2")
publisher.Publish(new Message("SomeMoreData"))
进程 3 将侦听来自两个 URI 的消息
var subscriber = new Subscriber("Uri1")
subscriber.MessageReceived += data => Console.Writeline(data.ToString());
var anotherSubscriber = new Subscriber("Uri2")
anotherSubscriber.MessageReceived += data => Console.Writeline(data.ToString());
所有进程都在同一台计算机上运行。经过一些研究,我相信 MSMQ 是可行的方法(使用队列名称作为 URI),但实现问题仍然存在。我遇到了几种可能性:
直接使用 MSMQ
这种方法的问题是我必须自己管理队列,例如创造,人口,清除......同样从我读到的内容中,我可能会遇到 MSMQ 的许多陷阱和限制,因为我没有经验
使用NServiceBus、MassTransit或RhinoServiceBus(都使用MSMQ) 它们看起来都很有能力,尤其是 NServiceBus,但我似乎无法从文档中弄清楚如何从它们中提取基本的 pubsub 功能,以便我可以将它封装在类似于上面的接口中
使用WCF(over MSMQ) 再次,这看起来是一个不错的选择,但鉴于我远非 WCF 专家,我想确保这是在我开始深入研究之前要走的路
到目前为止,我们的方法一直依赖于运行良好的 PGM 多播,但是在没有网卡的情况下工作的新要求迫使我们使用另一种机制进行离线工作,至少据我所知
谢谢!
【问题讨论】:
标签: c# msmq ipc multicast publish-subscribe