2013-03-20 2 views
3

У меня было два брокера ActiveMQ (A и B), которые были настроены как сеть хранения. Они отлично работают для пересылки сообщений от A до B, когда есть потребитель, подключенный к брокеру B, и производитель отправляет сообщения A. Проблема заключается в том, что, когда потребитель убит и подключен к A, поставленные в очередь сообщения на B (они были отправлены из A) не будет отправляться обратно в A, к которому подключен потребитель. Даже я отправляю новые сообщения в B, все сообщения застряли на B, пока я не перезапущу брокеров. Я попытался установить networkTTL = "4" и duplex = "true" в сетевом коннекторе брокера, но он не работает.Сеть брокерской сети ActiveMQ не передает сообщения

ответ

3

Поздний ответ, но, надеюсь, это поможет кому-то еще в будущем.

Сообщения застревают в B, потому что по умолчанию AMQ не позволяет отправлять сообщения брокеру, к которому они ранее были доставлены. В нормальном случае это не позволяет сообщениям циклически перемещаться по сетчатым сетевым топологиям без доставки, но в случае сбоя в результате этого возникают сообщения, прикрепленные к одному брокеру и неспособные добраться до брокера, где находятся все потребители.

Чтобы разрешить сообщениям вернуться к брокеру, если текущий брокер является тупиком, потому что к нему не подключены потребители, вы должны использовать replayWhenNoConsumers = true, чтобы разрешить пересылку сообщений, которые застряли на B обратно на A.

Этот вариант конфигурации, некоторые настройки, которые вы можете использовать в сочетании с ним, и некоторые соображения при использовании его, описаны в «задержались сообщения (версия 5.6)» раздел http://activemq.apache.org/networks-of-brokers.html, http://tmielke.blogspot.de/2012/03/i-have-messages-on-queue-but-they-dont.html и https://issues.apache.org/jira/browse/AMQ-4465. Убедитесь, что вы можете жить с побочными эффектами этих изменений (например, возможность дублирования доставки сообщений другими сообщениями через ваши сетевые подключения брокера к брокерам).

1

Можете ли вы предоставить дополнительную информацию о конфигурации брокера A и B, а также о том, чего вы пытаетесь достичь?

Мне кажется, что вы можете достичь того, чего хотите, установив сеть брокеров (с A и B), при этом производитель только подключается к одному, потребитель к другому. Сообщения будут автоматически переданы другому брокеру, если у другого брокера активная подписка на адрес, на который было отправлено сообщение.

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

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