2010-02-09 3 views
1

Предположим, что у меня не установлена ​​сетевая карта на моем компьютере, и я хотел бы иметь функциональность, подобную следующей:Interprocess PubSub без сетевой зависимости

Процесса 1 публиковать сообщения в какой-то URI, скажем «Uri1»

var publisher = new Publisher("Uri1"); 
publisher.publish(new Message("Somedata"); 

Process 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")) 

Process 3 будет прослушивать сообщения от обоих URIs

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, которая работала достаточно хорошо, но новая требование работать без сетевой карты заставляет нас использовать другой механизм для работы в автономном режиме, по крайней мере, насколько я знаю

Спасибо!

ответ

3

В конце концов, мы выбрали разделяемой памяти готовое решение: http://pubsub.codeplex.com/ Первоначальное тестирование подразумевает, что хорошо работает в нашем случае

0

Ну, в соответствии с http://answers.yahoo.com/question/index?qid=20080616091430AAAxTJB вы можете использовать обратный адрес без установленной сетевой платы. Возможно, вы можете использовать эту функциональность, чтобы продолжить использовать существующий код?

Примечание: Я не проверял это, это была просто идея.

+0

Спасибо, я дам ему выстрелили завтра, хотя я считаю, что я бы не стал быть в состоянии связать сокет PGM с 127.0.0.1. Я понимаю, что сетевая карта или маршрутизатор несут ответственность за многоадресную передачу, и в отсутствие обоих я не вижу, как будет работать существующий код –

+0

OK, поэтому Я не могу связать сокет PGM с 127.0.0.1. UDP тоже не работает, поскольку я не могу многоадресной или braodbast до 127.0.0.1 ... любых идей? –

+0

Вздох, извините. Думал, что это стоит того. – TJMonk15