#java #messaging #qpid
#java #обмен сообщениями #qpid
Вопрос:
Я использую Apache Qpid, я смотрю на примеры, но нигде не могу найти, как настроить приемник таким образом, чтобы он не закрывал соединение и проверял, есть ли какие-либо новые сообщения в очереди.
Комментарии:
1. Используете ли вы default_container? Обработчик сообщений? Тогда приемники не будут закрыты, пока вы этого не сделаете. Когда у вас есть новое сообщение, вы должны получить его с помощью on_message .
2. @MertKoksal Я использовал примерный пример, там они описывают
MessageConsumer
, сConnectionFactory
помощью которого открывается и после1000 ms
истечения времени ожидания закрывается
Ответ №1:
Похоже, вы используете JMS-клиент Qpid. Его самые простые примеры, которые на самом деле просто показывают различные компоненты, доступные в JMS, и не являются репрезентативными приложениями (поскольку это будет полностью зависеть от того, что вы хотели сделать), имеют простой приемник, настроенный на выполнение синхронного вызова recieve() с таймаутом, так что он ждет так долгодля нового сообщения (отправленного другими битами примеров), и если ни один из них не поступает в течение времени ожидания, это означает, что все сделано, а затем завершается.
Если вы хотите дождаться сообщений, у вас есть различные варианты, такие как повторный вызов receive вместо выхода, как в примере, вызов recieve с большим тайм-аутом, чтобы избежать слишком быстрого истечения времени ожидания, или даже вызов recieve вообще без тайм-аута, чтобы он ждал следующего сообщения столько, сколько необходимо перед возвращением. В качестве альтернативы вы можете зарегистрировать асинхронный MessageListener для потребителя таким образом, чтобы прослушиватель вызывался по мере поступления для него сообщения.
Вы можете обратиться к любому руководству по JMS, чтобы получить более подробную информацию об этих концепциях.