Как предотвратить блокировку метода отправки ActiveMQ CPP навсегда?

#c #jms #activemq

#c #jms #activemq

Вопрос:

Я разрабатываю программное обеспечение, которое использует ActiveMQ библиотеку C . Проблема, с которой я сталкиваюсь, заключается в том, что когда я пытаюсь отправить сообщение, а сеть отключена, метод отправки (метод cms::MessageProducer класса) блокируется навсегда, и в этом случае мне нужно восстановить управление.

Я использую постоянный режим доставки (это обязательно, я не могу этого избежать).

Ответ №1:

Устанавливаете ли вы время отправки при создании ActiveMQConnectionFactory ? По умолчанию установлено значение 0, что означает «бесконечный».

 auto_ptr<ActiveMQConnectionFactory> connectionFactory(
     new ActiveMQConnectionFactory( brokerURI ) );
connectionFactory->setSendTimeout( 1000 ); // number of milliseconds
// ...
// creating Session and MessageProducer as usually
  

Комментарии:

1. Большое спасибо! вы дали мне хороший намек. На самом деле я использую cms ::ConnectionFactory, а не ActiveMQConnectionFactory. Я не знаю, в чем разница между этими двумя классами. Кстати, вы знаете хороший учебник по ActiveMQ для cpp?

2. @CMorgan cms ::ConnectionFactory — это абстрактный класс, вы наверняка используете ActiveMQConnectionFactory, получая к нему доступ через cms ::ConnectionFactory (это интерфейс в java JMS API, это переводится в абстрактный класс C ). Для получения руководства проверьте, как JMS работает на Java (CMS, похоже, моделирует его точно так же), и загрузите исходный код библиотеки ActiveMQ C и посмотрите раздел «Примеры». О, кстати, не забудьте принять ответ, если он работает для вас.