【问题标题】:Interprocess pubsub without network dependency没有网络依赖的进程间发布订阅
【发布时间】: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 的许多陷阱和限制,因为我没有经验

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

使用WCF(over MSMQ) 再次,这看起来是一个不错的选择,但鉴于我远非 WCF 专家,我想确保这是在我开始深入研究之前要走的路

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

谢谢!

【问题讨论】:

    标签: c# msmq ipc multicast publish-subscribe


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      好吧,根据http://answers.yahoo.com/question/index?qid=20080616091430AAAxTJB,您可以在不安装网卡的情况下使用环回地址。也许您可以使用该功能继续使用现有代码?

      注意:我没有对此进行测试,这只是一个想法。

      【讨论】:

      • 谢谢,明天我会试一试,虽然我相信我无法将 PGM 套接字绑定到 127.0.0.1 .. 我的理解是网卡或路由器负责多播,在没有两者的情况下,我看不到现有代码将如何工作
      • 好的,所以我无法将 PGM 套接字绑定到 127.0.0.1。 UDP 也不起作用,因为我无法多播或广播到 127.0.0.1……有什么想法吗?
      • 叹气,对不起。无论如何都认为值得一试。
      猜你喜欢
      • 2015-09-12
      • 1970-01-01
      • 2020-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-22
      相关资源
      最近更新 更多