Как подключиться к ActiveMQ при запуске с WCF и IIS - PullRequest
2 голосов
/ 10 июня 2011

Каков наилучший способ объединения службы WCF с одним экземпляром, которая использует ActiveMQ и работает в IIS / AppFabric?

Наши службы должны поддерживать как транспорт HTTP, так и ActiveMQ (прослушивание и отправка сообщений). Мы решили не использовать MSMQ и будем использовать Spring.Net.NMS. Основная проблема, с которой я столкнулся сейчас, заключается в том, что ActiveMQ должен подключаться к очереди (ям) при запуске и оставаться подключенным, но WAS мешает его функции активации сообщений. Если служба не активирована до тех пор, пока не прибудет сообщение (HTTP / MSMQ и т. Д.), То не будет триггера для установления соединения с AMQ.

Я знаю, что могу отключить режим утилизации, и я знаю, что я могу сделать хостинг с помощью службы Windows. Но я хочу воспользоваться мониторингом и другими функциями AppFabric. Я уже шел по пути с IServiceBehavior и буду использовать это для других приятных вещей. Но этот интерфейс не вызывается, пока не поступит сообщение (не AMQ). Так что это не сработает. Я надеялся на то, что ServletContextListeners работает в Java, где вы получаете события как запуска, так и выключения. Но, похоже, в WAS такого не существует ... это обусловлено только поступающими сообщениями.

Я изучал каждый дюйм веб-информации в течение 3 дней, и единственное, с чем я столкнулся, было использование трюка со статическим построением классов (C #) в качестве триггера. Это хак, но я могу жить с этим. Это все еще оставляет проблему чистого выключения, которую я могу выяснить позже.

У кого-нибудь есть твердое решение для этого?

Ответы [ 2 ]

4 голосов
/ 20 июня 2011

Прямая поддержка WCM для ActiveMQ, о которой упоминает Ладислав, все еще поддерживается. Официального релиза для модуля давно не было. Однако вы все равно можете получить его последнюю версию из ветви 1.5.x или транка и скомпилировать ее самостоятельно.

1.5.x ветвь для использования с Apache.NMS 1.5.0: https://svn.apache.org/repos/asf/activemq/activemq-dotnet/Apache.NMS.WCF/branches/1.5.x/

Ознакомьтесь с инструкциями: http://activemq.apache.org/nms/source.html

1 голос
/ 10 июня 2011

Была прямая поддержка WCF для ActiveMQ , но я думаю, что она больше не разрабатывается. Ваша проблема на самом деле заключается в архитектуре хостинга IIS / WAS (обеспечивает хостинг для протоколов, отличных от http). Службы в WAS всегда активируются при получении сообщения - глобальный запуск отсутствует. Причина этого заключается в том, что хостинг WAS ожидает, что существует отдельный процесс (служба Windows), постоянно выполняющий прослушиватель, и этот процесс имеет адаптер, который вызывает WAS и использует активацию на уровне сообщений. Я предполагаю, что у вас нет такого процесса для ActiveMQ, и из-за этого у вас будут проблемы с использованием конечной точки ActiveMQ, размещенной в WAS. Разработка такого слушателя может быть сложной задачей ( пример для UDP ).

Вероятно, можно избежать создания пользовательского прослушивателя с помощью IIS 7.5 / AppFabric функция автозапуска . Существует также не очень хорошо документированный способ запуска кода при запуске приложения .

...