ActiveMQ темы - PullRequest
       19

ActiveMQ темы

0 голосов
/ 05 ноября 2019

Сколько времени занимает нить, чтобы остановиться и выйти на ActiveMQConsumer? При закрытии приложения возникает ошибка сегментации. То, что я выяснил, было связано с потоками ActiveMQ. Если я комментирую потребителя, проблема больше не присутствует. В настоящее время я использую cms::MessageConsumer в activemq-cpp-library-3.9.4.

Я вижу, что activemq::core::ActiveMQConsumer имеет функцию isClosed(), которую я могу использовать, чтобы подтвердить, что потребитель закрыт, а затем переместитьвперед с удалением объектов, тем самым избегая ошибки сегментации. Я предполагаю, что это решит мою проблему. Но я хотел знать, каков правильный подход к этим объектам ActiveMQ, чтобы избежать проблем с потоками?

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

Поэтому я разделил сеанс для отправки и получения и создал экземпляр фабрики соединений, соединения и сеанса для каждого отдельно. Этот дизайн не имеет проблем, пока память приложений не очищается из-за ошибки сегментации, описанной выше.

Вот почему я хотел знать, когда мне следует использовать cms::MessageConsumer против ActiveMQConsumer?

1 Ответ

1 голос
/ 05 ноября 2019

На сайте ActiveMQ есть документация с примерами для клиента CMS. Я бы посоветовал прочитать их и следовать примеру кода о том, как он отключает соединение и ресурсы библиотеки перед закрытием приложения, чтобы обеспечить надлежащую очистку ресурсов.

Как и в случае с JMS, экземпляр потребителя CMS связан с потоком в сеансе, который его создал, поэтому, если вы закрываете хорошее правило, которому нужно следовать, закройте сеанс, чтобы убедиться, что доставка сообщений остановлена ​​перед удалениемвсе потребительские экземпляры.

...