Я получаю исключение при попытке установить соединение с ActiveMQ через NMS в консольном приложении .NET Core. ⇐ C#
Я получаю исключение при попытке установить соединение с ActiveMQ через NMS в консольном приложении .NET Core.
Я пытаюсь создать простое консольное приложение для проверки концепции, которое создает сообщение XML-файла в очередь, а затем потребляет сообщение из этой очереди. Проблема в том, что я не могу создать соединение с помощью метода .CreateConnection(). Когда я пытаюсь это сделать, я получаю следующее исключение:
Необработанное исключение. Apache.NMS.NMSConnectionException: ошибка при создании транспорта. ---> System.Exception: NewInstance не удалось найти совпадение для id = tcp в Apache.NMS.ActiveMQ.Transport.TransportFactory.NewInstance (строковая схема) в Apache.NMS.ActiveMQ.Transport.TransportFactory.CreateTransportFactory (расположение Uri) Вот мой файл program.cs:
с использованием Apache.NMS; использование Apache.NMS.ActiveMQ; использование Microsoft.Extensions.Configuration; классная программа { static void Main(String[] args) { вар строитель = новый ConfigurationBuilder(); Нить? brokerUri = "tcp://localhost:61616"; Нить? requestQueueName = "новая очередь"; String filePath = "C:\\Users\\asasy\\OneDrive\\Desktop\\Dokumenciki\\Tauron\\ActiveMQ_Sender\\messages\\files.xml"; Строка xmlResponseContent = String.Empty; xmlResponseContent = System.IO.File.ReadAllText(filePath); // Отправляем сообщения в очередь Console.WriteLine(xmlResponseContent); SendMessage (brokerUri, requestQueueName, xmlResponseContent); Thread.Sleep(120); // Получаем сообщения из очереди ReceiveMessages(brokerUri, "RequestQueue"); Console.WriteLine("Нажмите любую клавишу, чтобы выйти..."); Консоль.ReadKey(); } static void SendMessage(StringbrokerUri,StringqueueName,String message) { Фабрика Apache.NMS.IConnectionFactory = новая ConnectionFactory(новый Uri(brokerUri)); используя (соединение IConnection = Factory.CreateConnection()) { пытаться { соединение.Старт(); используя (сеанс ISession = Connection.CreateSession(AcknowledgementMode.AutoAcknowledge)) { Назначение назначения ID = session.GetQueue(queueName); используя (производитель IMessageProducer = session.CreateProducer(назначение)) { ITextMessage textMessage = Producer.CreateTextMessage(сообщение); производитель.Отправить(текстовое сообщение); Console.WriteLine("Сообщение отправлено: " + textMessage.Text); } } } поймать (Исключение ex) { Console.WriteLine("Произошла ошибка: " + ex.Message); } окончательно { if (соединение != null && Connection.IsStarted) { соединение.Стоп(); соединение.Закрыть(); } } } } static void ReceiveMessages(StringbrokerUri,StringqueueName) { Фабрика IConnectionFactory = новый NMSConnectionFactory (brokerUri); используя (соединение IConnection = Factory.CreateConnection()) { пытаться { соединение.Старт(); используя (сеанс ISession = Connection.CreateSession(AcknowledgementMode.AutoAcknowledge)) { Назначение назначения ID = session.GetQueue(queueName); используя (потребитель IMessageConsumer = session.CreateConsumer(пункт назначения)) { пока (правда) { Сообщение IMessage = Consumer.Receive(); if (сообщение — ITextMessage textMessage) { Console.WriteLine("Получено сообщение: " + textMessage.Text); } иначе, если (сообщение == ноль) { // В очереди больше нет сообщений перерыв; } } } } } поймать (Исключение ex) { Console.WriteLine("Произошла ошибка: " + ex.Message); } окончательно { if (соединение != null && Connection.IsStarted) { соединение.Стоп(); соединение.Закрыть(); } } } } } Вот мои транспортные коннекторы из файла activemq.xml
Я пробовал использовать разные протоколы, например Stomp, но это не особо помогло. Я пробовал отключить брандмауэр и антивирус, надеясь, что это поможет, но не помогло.
Я просмотрел документацию и исходный код, чтобы понять сообщение «не удалось найти совпадение для id = tcp», но ничего по этому поводу не нашел.
Я пытаюсь создать простое консольное приложение для проверки концепции, которое создает сообщение XML-файла в очередь, а затем потребляет сообщение из этой очереди. Проблема в том, что я не могу создать соединение с помощью метода .CreateConnection(). Когда я пытаюсь это сделать, я получаю следующее исключение:
Необработанное исключение. Apache.NMS.NMSConnectionException: ошибка при создании транспорта. ---> System.Exception: NewInstance не удалось найти совпадение для id = tcp в Apache.NMS.ActiveMQ.Transport.TransportFactory.NewInstance (строковая схема) в Apache.NMS.ActiveMQ.Transport.TransportFactory.CreateTransportFactory (расположение Uri) Вот мой файл program.cs:
с использованием Apache.NMS; использование Apache.NMS.ActiveMQ; использование Microsoft.Extensions.Configuration; классная программа { static void Main(String[] args) { вар строитель = новый ConfigurationBuilder(); Нить? brokerUri = "tcp://localhost:61616"; Нить? requestQueueName = "новая очередь"; String filePath = "C:\\Users\\asasy\\OneDrive\\Desktop\\Dokumenciki\\Tauron\\ActiveMQ_Sender\\messages\\files.xml"; Строка xmlResponseContent = String.Empty; xmlResponseContent = System.IO.File.ReadAllText(filePath); // Отправляем сообщения в очередь Console.WriteLine(xmlResponseContent); SendMessage (brokerUri, requestQueueName, xmlResponseContent); Thread.Sleep(120); // Получаем сообщения из очереди ReceiveMessages(brokerUri, "RequestQueue"); Console.WriteLine("Нажмите любую клавишу, чтобы выйти..."); Консоль.ReadKey(); } static void SendMessage(StringbrokerUri,StringqueueName,String message) { Фабрика Apache.NMS.IConnectionFactory = новая ConnectionFactory(новый Uri(brokerUri)); используя (соединение IConnection = Factory.CreateConnection()) { пытаться { соединение.Старт(); используя (сеанс ISession = Connection.CreateSession(AcknowledgementMode.AutoAcknowledge)) { Назначение назначения ID = session.GetQueue(queueName); используя (производитель IMessageProducer = session.CreateProducer(назначение)) { ITextMessage textMessage = Producer.CreateTextMessage(сообщение); производитель.Отправить(текстовое сообщение); Console.WriteLine("Сообщение отправлено: " + textMessage.Text); } } } поймать (Исключение ex) { Console.WriteLine("Произошла ошибка: " + ex.Message); } окончательно { if (соединение != null && Connection.IsStarted) { соединение.Стоп(); соединение.Закрыть(); } } } } static void ReceiveMessages(StringbrokerUri,StringqueueName) { Фабрика IConnectionFactory = новый NMSConnectionFactory (brokerUri); используя (соединение IConnection = Factory.CreateConnection()) { пытаться { соединение.Старт(); используя (сеанс ISession = Connection.CreateSession(AcknowledgementMode.AutoAcknowledge)) { Назначение назначения ID = session.GetQueue(queueName); используя (потребитель IMessageConsumer = session.CreateConsumer(пункт назначения)) { пока (правда) { Сообщение IMessage = Consumer.Receive(); if (сообщение — ITextMessage textMessage) { Console.WriteLine("Получено сообщение: " + textMessage.Text); } иначе, если (сообщение == ноль) { // В очереди больше нет сообщений перерыв; } } } } } поймать (Исключение ex) { Console.WriteLine("Произошла ошибка: " + ex.Message); } окончательно { if (соединение != null && Connection.IsStarted) { соединение.Стоп(); соединение.Закрыть(); } } } } } Вот мои транспортные коннекторы из файла activemq.xml
Я пробовал использовать разные протоколы, например Stomp, но это не особо помогло. Я пробовал отключить брандмауэр и антивирус, надеясь, что это поможет, но не помогло.
Я просмотрел документацию и исходный код, чтобы понять сообщение «не удалось найти совпадение для id = tcp», но ничего по этому поводу не нашел.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение