Настройки постоянной подписки ActiveMQ Установив режим доставки PERSISTENT для издателя, вы можете использовать постоянные подписки для подписчиков, что гарантирует, что программа Pub/Sub получит все опубликованные сообщения. Подписки на сообщения делятся на неустойчивые и долгосрочные подписки, и недолгосрочные подписки могут получать сообщения, отправленные на тему, только когда клиент активен, то есть когда клиент офлайн, сообщения, отправленные в этот период, теряются и никогда не получаются. Когда клиент офлайн, ActiveMQ сохраняет все сообщения, отправленные субъекту, согласно его идентификатору, а когда клиент снова подключается к ActiveMQ, он получает все сообщения, отправленные субъекту, когда он офлайн. Постоянные подписки увеличивают накладные расходы и имеют только одного активного пользователя в постоянной подписке одновременно. Шаги для установления постоянной подписки: 1. Настройте идентификатор клиента для соединения; 2. Указать название подписки для темы подписки; Приведённая выше комбинация должна быть уникальной. Код реализует постоянные подписки
(1) При использовании очереди, то есть при очереди, на сообщение приходится только один потребитель, поэтому сохраняние очень простое — просто сохранить данные в базу данных
。 Тогда любой потребитель может забрать его и утилизировать. Неважно, отключит ли потребитель её на какое-то время.
(2) При использовании topic, то есть при подписке, каждое сообщение может иметь нескольких пользователей, что сложнее.
Во-первых, если предположить, что потребители — обычные потребители, ------------------------ После запуска <1> был запущен Activemq, был выпущен News 1, но, к сожалению, сейчас никто из потребителей не начинает, то есть никто из них не подписался. Так что
, новость была заброшена.
<2> Потребитель 1 запустился, подключился к activemq, подписался и ждал сообщения~~
Activemq публикует сообщение 2, хорошо, потребитель 1 принимает и обрабатывает его. Отказ от сообщения.
<3> Потребитель 2 тоже запущен, подключён к activemq, подписан и ждёт сообщения~~
Activemq публикует сообщение 3, ОК, потребитель 1, потребитель 2 — все получены и обработаны. Отказ от сообщения.
<4> Потребитель 1 выключен.
Activemq публикует сообщение 4, хорошо, потребитель 2 принимает и обрабатывает его. Отказ от сообщения.
<5> Потребитель 1 снова запустился.
Activemq публикует сообщения 5, OK, Consumer 1 и Consumer 2 — все получают и обрабатывают их. Отказ от сообщения. ----------------------------- Подытожим: Activemq просто отправляет сообщения текущему запущенному потребителю. Потребители, которые отключаются, пропустят много сообщений и больше не смогут их получить.
Если отправленное сообщение — важные данные синхронизации пользователя и пропускают их, данные пользователя не синхронизируются.
Так как же заставить потребителей получать пропущенные сообщения при перезагрузке?
Ответ — постоянная подписка. -----------------------------
Обычные подписки, не различая потребителей, если в заведении есть несколько человек, бросайте пару паровых булочек. Для постоянных подписок нужно записывать имя пользователя. Чжан Сан сказал: «Я Чжан Сан, для меня есть паровые булочки, я вернусь за ними». Ли Сы сказал: «Я — Ли Сы, для меня есть паровые булочки, я вернусь за ними». activemq записал имена Чжан Сана и Ли Сы.
Затем, при делении паровых булочек, одна голова всё равно даёт паровую булочку. После разделения, когда он увидел, что Чжан Сан не говорит, это значило, что его там нет, так что оставьте ему один. Ли Сы заговорил, так что оставаться не нужно.
Чжан Сан вернулся, поискал activemq и посмотрел — это не Чжан Сан, быстро принеси его паровые булочки. Это может быть одна паровая булочка, а может и 100 паровых булочек — зависит от того, сколько паровых булочек Чжан Сан разделил с тех пор, как уехал на некоторое время.
Activemq различает потребителей по клиентскому идентификатору и имени подписчика. ----------------------------- Создайте связь connection = connectionFactory.createConnection(); connection.setClientID("bbb"); Постоянные подписки требуют этой настройки. connection.start();
Создать сессию Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
Создайте пункт назначения Тема темы = session.createTopic("userSyncTopic"); Название темы
MessageConsumer consumer = session.createConsumer(тема); Регулярная подписка MessageConsumer consumer = session.createDurableSubscriber(topic,"bbb"); Постоянные подписки
Ещё один момент заключается в том, что производитель сообщения использует постоянный режим при отправке сообщений СообщениеПродюсер = ...; producer.setDeliveryMode(DeliveryMode.PERSISTENT); Если нет, то по умолчанию он сохраняется
(5) Если используется тот же «clientID», это считается одним и тем же потребителем. Если две программы используют один и тот же «clientID», только одна может одновременно подключиться к activemq, а второе соединение сообщает об ошибке.
(6) Настройки activemq находятся в режиме conf/activemq.xml, а сообщения по умолчанию сохраняются в data/kahadb, и сообщения не теряются при перезапуске activemq.
Вы можете получить доступ http://localhost:8161/admin/index.jsp: просматривать информацию о текущих очередях, темах и постоянных подписчиках, отправлять сообщения и многое другое.
Вы можете скопировать содержимое в activemq-jdbc.xml и изменить его, а также сохранить сообщение в других базах данных. |