1

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

进程 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(通过 MSMQ) ,这看起来是一个不错的选择,但鉴于我离 WCF 专家还很远,我想确保这是在我开始深入研究之前要走的路

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

谢谢!

4

2 回答 2

3

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

于 2010-02-16T22:23:16.043 回答
0

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

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

于 2010-02-09T20:07:29.317 回答