Как подключиться к ActiveMQ при запуске с WCF и IIS

Как лучше всего объединить службу 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 ответа

Прямая поддержка 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

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

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

Другие вопросы по тегам