2015-12-23 2 views
0

Я установил ActiveMQ 5.13.0 Release на сервере и попытался получить доступ к брокеру с клиентом C#. Я создал консольное приложение и установил пакет Apache.NMS.ActiveMQ версии 1.7.1 nuget. Когда я пытаюсь получить доступ к брокеру:ActiveMQ Нет реализации IConnectionFactory для подключения

Line 1 Uri uri = new Uri("tcp://192.168.110.136:61616"); 
Line 2 NMSConnectionFactory NMSFactory = new NMSConnectionFactory(uri); 

На второй линии он бросает Нет IConnectionFactory реализации найденной для подключения URI: TCP: //192.168.110.136: 61616/ исключения.

Версия .NET Framework версии 3.5, а также я также пытался использовать .NET 4.0 и 4.5. Но результат тот же, вызывает одно и то же исключение.

ActiveMQ работает на сервере, и я могу получить доступ к серверу 61616 с помощью telnet и интерфейса управления. Я проверил другие подобные сообщения, но не помог исправить проблему. Любая помощь приветствуется.

Спасибо.

+0

Хорошо, когда я использую ConnectionFactory NMSFactory = new ConnectionFactory (URI); вместо NMSConnectionFactory он работает. Если кто-нибудь знает, в чем разница, пожалуйста, объясните. Благодарю. – user1390638

ответ

3

Во-первых, убедитесь, что ваши приложения ссылаются на сборки Apache.NMS.dll и Apache.NMS.ActiveMQ.dll, чтобы иметь доступ ко всем битам реализации.

Тогда попробуйте использовать URI, который ссылается на реализацию поставщика, который вы пытаетесь использовать через родовой NMSConnectionFactory:

Uri uri = new Uri("activemq:tcp://192.168.110.136:61616"); 

При желании вы можете использовать реализацию ActiveMQ IConnectionFactory непосредственно:

IConnectionFactory factory = new Apache.NMS.ActiveMQ.ConnectionFactory(uri); 
+0

Не ссылаясь на Apache.NMS.ActiveMQ.dll, проблема была в моем случае. Благодаря! –

0

Если кто-нибудь знает, в чем разница, пожалуйста, объясните.

В моем проекте я использовал очень старую версию (1.1) Apache.NMS.ActiveMQ, и у нее появился файл с именем nmsprovider-activemq.config.

Когда я обновился, я попал в тот же тип проблем, которые вы наблюдали.

Я обнаружил, что NMSConnectionFactory отличается от более ранних версий.

  1. Новых версии имеют подстановки списки предварительно сконфигурированные заводские URL-адреса (чтобы найти правильную сборку и реализацию фабрики)
  2. Имя узла может быть преодолено с помощью файла конфигурации я уже упоминал. Однако, когда старые версии потребовали, чтобы файл конфигурации предоставил полное имя сборки (включая расширение DLL-файла), более новые версии NMSConnectionFactory вызывают Assembly.Load(), которые в этом случае не сработают.

Просто загрузите сборку ActiveMQ самостоятельно и создайте экземпляр своей фабрики менее сложно, но я думаю, что переключение между различными фабриками становится более сложной задачей. Практический результат (если вы только заботитесь об одном типе фабрики) тот же, однако. Основная задача NMSFactory - найти заводский класс выбранного поставщика.

Последняя ошибка при обновлении этой сборки заключается в том, что теперь требуется вызвать .Start() на объект соединения.

TL; DR: Проверьте, есть ли у вас файл конфигурации.Либо отредактируйте его (избавитесь от расширения файла DLL), либо полностью удалите его (вероятно, он не содержит никакой информации, которая уже не была жестко закодирована в сборке Apache.NMS)

Смежные вопросы