Interprocess pubsub без сетевой зависимости - PullRequest
1 голос
/ 09 февраля 2010

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

Процесс 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 (более MSMQ) Опять же, это выглядит как хороший вариант, но, поскольку я далек от эксперта WCF, я хотел бы убедиться, что это правильный путь, прежде чем я начну вникать в него

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

Спасибо!

Ответы [ 2 ]

3 голосов
/ 17 февраля 2010

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

0 голосов
/ 09 февраля 2010

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

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

...