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

Вид: 13505|Ответ: 2

Настройки постоянной подписки ActiveMQ

[Скопировать ссылку]
Опубликовано 09.01.2017 11:12:10 | | |

Настройки постоянной подписки 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 и изменить его, а также сохранить сообщение в других базах данных.




Предыдущий:Пятое поколение VIP-канала для покупки билетов на 360, быстро зайдите в VIP-очередь
Следующий:. Платформа .Net
 Хозяин| Опубликовано 09.01.2017 13:41:53 |
1 Сравнение технических характеристик очереди и темы
имя
Тема
Очередь
Обзор
Опубликовать Подписаться на сообщения Опубликовать подписочные сообщения
Точка-точка-точка-точка
Государства не существует
Тематические данные по умолчанию безсостоятельны.
Данные очереди по умолчанию сохраняются в виде файла на сервере MQ, например, Active MQ обычно хранится в $AMQ_HOME\data\kr-store\data. Его также можно настроить как хранилище баз данных.
Гарантия целостности
Нет гарантии, что каждая опубликованная издателем информация будет принята подписчиком.
Очередь гарантирует, что каждый фрагмент данных может быть получен получателем.
будет ли сообщение потеряно
В общем, когда издатель публикует сообщение по теме, только сабреддит, который слушает адрес темы, может принять его сообщение. Если нет субреддита, тема теряется.
Отправитель отправляет сообщение целевой очереди, и получатель может получать сообщения в этой очереди асинхронно. Сообщения в очереди не будут потеряны, если пока нет получателя, который мог бы их принять.
Политика приёма сообщений
Политика публикации и получения сообщений «один к многим»: несколько сабреддитов, слушающих один и тот же адрес темы, могут получать сообщения, отправленные издателем. Сабреддит получает уведомление на mq-сервер
Политики публикации и получения сообщений один к одному, сообщения, отправленные отправителем, могут быть получены только одним получателем. После получения MQ-сервер уведомляет MQ-сервер о получении, и MQ-сервер удаляет или выполняет другие действия с сообщениями в очереди.

 Хозяин| Опубликовано 09.01.2017 13:42:15 |
Главное отличие между темой и очередью заключается в том, что тема проводится в виде трансляции, уведомления всех клиентов онлайн-прослушивания о новом сообщении, и клиент без мониторинга не получит это сообщение; Очередь, напротив, уведомляет одного из нескольких прослушивающих клиентов в одноранговой форме.

2 Сравнение эффективности обработки сообщений между методами по темам и очереди
        Увеличивая количество параллельных взаимодействий слушающего клиента, проверяйте, снизится ли значительное снижение сообщения темы из-за увеличения параллелизма слушающего клиента.
        По измеренным результатам нет значительной разницы в эффективности отправки и получения сообщений, отправленных методом темы, при условии одного абонента и 100 подписчиков, но при условии 500 параллельных потоков разница в эффективности очевидна (из-за параллелизма 500 потоков уровень использования процессора моего компьютера достигает 70-90%, поэтому невозможно подтвердить, связано ли это с узким местом в производительности, вызванным моим локальным тестом, или узким местом в методе отправки тематических сообщений), что привело к значительному снижению эффективности).
        Существенной разницы в эффективности отправки и получения сообщений по методу темы и режиму очереди при условии одного абонента и 100 абонентов нет, но при условии 500 параллельных сообщений эффективность режима темы значительно ниже, чем в очереди.
        Эффективность отправки и получения сообщений, отправленных методом очереди, существенно не меняется при условии, что один абонент — 100 абонентов и 500 абонентов.
Данные по теме измерения:


Общее количество сообщений, отправленных отправителем
Общее количество сообщений, полученных всеми подписчиками
Среднее время отправки и получения сообщений
Одиночный абонент
100
100
101 мс
100 подписчиков
100
10000
103 мс
500 подписчиков
100
50000
14162мс

Данные, измеряемые в очереди:


Общее количество сообщений, отправленных отправителем
Общее количество сообщений, полученных всеми подписчиками
Среднее время отправки и получения сообщений
Одиночный абонент
100
100
96мс
100 подписчиков
100
100
96мс
500 подписчиков
100
100
100 мс

Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com