没有网络依赖的进程间pubsub

时间:2010-02-09 19:47:20

标签: c# msmq ipc multicast publish-subscribe

假设我的计算机上没有安装网卡,我希望功能类似于以下内容:

进程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的局限,因为我对它没有经验

使用NServiceBusMassTransitRhinoServiceBus(均使用MSMQ) 它们似乎都很有能力,特别是NServiceBus,但我似乎无法从文档中弄清楚如何从其中任何一个中提取基本的pubsub功能,以便我可以将它封装在类似于上面的接口中

使用WCF(over MSMQ) 再次看起来这是一个不错的选择,但看到我远离WCF专家,我想确保在我开始钻研它之前要做的就是这样做

到目前为止,我们的方法依赖于PGM多播,这种方法运行良好,但是没有网卡工作的新要求迫使我们使用其他机制进行离线工作,至少据我所知

谢谢!

2 个答案:

答案 0 :(得分:3)

最后,我们选择了一个共享内存现成的解决方案: http://pubsub.codeplex.com/ 初步测试意味着它适用于我们的案例

答案 1 :(得分:0)

嗯,根据http://answers.yahoo.com/question/index?qid=20080616091430AAAxTJB,您可以使用没有安装NIC的环回地址。也许您可以使用该功能继续使用现有代码?

注意:我没有测试过,这只是一个想法。