Шесть режимов работы RabbitMQ

очередь сообщений

Я давно не обновлял свой блог.После того как я приехал в Ханчжоу, сверхурочная работа стала обычным явлением.У компании был проект, который должен был быть запущен в сентябре, но его перенесли на середину августа. С августа почти каждую ночь в 11 часов. На самом деле сверхурочная работа — это пустяк, все знают, что программисты умеют хорошо писать код и ловить рыбу, и интенсивность неплохая. Но сверхурочная работа привела к тому, что времени на ежедневную учебу стало меньше.Изначально я хотел заниматься по часу в день, но это казалось немного сложным, поэтому моя учеба стала прерывистой, и на прошлой неделе я снова пошла домой. Я был в контакте с rabbitmq раньше, и я был в контакте и учился в течение этого времени. В последнем блоге рассказывалось, как PHP отправляет и получает очереди сообщений. Конечно, это просто простое приложение. Я не могу сказать, что я Я опытен, но у меня все еще есть некоторое понимание некоторых принципов. Ниже я запишу кое-что из того, чему научился за это время. В этой статье в основном представлены шесть режимов работы rabbitmq, а также некоторые принципы работы.

1. Объяснение концепции

1. канал канала:

Концепция: Канал — это канал, по которому производитель и потребитель общаются с кроликом.Производитель публикует или потребитель подписывается на очередь через канал. Канал — это виртуальное соединение, установленное на TCP-соединении, что это значит? Иными словами, rabbitmq устанавливает сотни или тысячи каналов на TCP для достижения обработки нескольких потоков.Этот TCP совместно используется несколькими потоками, каждый поток соответствует каналу, и канал имеет уникальный идентификатор в кролике, что обеспечивает конфиденциальность канала. , что соответствует единственному используемому потоку.

疑问:为什么不建立多个TCP连接呢?原因是rabbit保证性能,系统为每个线程开辟一个TCP是非常消耗性能,
每秒成百上千的建立销毁TCP会严重消耗系统。所以rabbitmq选择建立多个信道(建立在tcp的虚拟连接)
连接到rabbit上。

类似概念:TCP是电缆,信道就是里面的光纤,每个光纤都是独立的,互不影响。

2. Переключатель Exchange и ключ маршрутизации привязки (это связано со следующим режимом работы)

Роль биржи аналогична роли маршрутизатора: ключ маршрутизации является ключом маршрутизации, и сервер направляет сообщение с биржи в очередь в соответствии с ключом маршрутизации.

Существует много типов обмена, и наиболее часто используемые из них — прямой, разветвленный и тематический. Первые три аналогичны установленному соответствию, (прямое) 1:1, (разветвленное) 1:N, (тематическое) N:1

прямое: 1:1 как точное совпадение

Разветвление: 1: N может публиковать сообщение в несколько очередей параллельно.Проще говоря, когда несколько очередей привязаны к разветвленному обмену, обмен одновременно копирует несколько сообщений и отправляет их в связанные очереди соответственно.Вкл., каждая очередь имеет копия этого сообщения.

ps:这个可以在业务上实现并行处理多个任务,比如,用户上传图片功能,当消息到达交换器上,它可以同时路由到积分
增加队列和其它队列上,达到并行处理的目的,并且易扩展,以后有什么并行任务的时候,直接绑定到fanout交换器
不需求改动之前的代码。

Для темы N:1 несколько бирж могут направлять сообщения в одну и ту же очередь. Согласно методу нечеткого сопоставления, например, ключ маршрутизации очереди *.test, то все суффиксы ключа маршрутизации .test в пришедшем на биржу сообщении будут маршрутизироваться в эту очередь.

3. Очередь (очередь)

1. Push-режим: подпишитесь с помощью команды AMQP basic.consume, сообщения будут приниматься автоматически с высокой пропускной способностью.

2. Режим извлечения: через команду AMQP bsaic.get

Примечание. Если в очереди несколько потребителей, сообщения, полученные очередью, будут отправляться потребителям в циклическом режиме. Каждое сообщение будет отправлено только одному подписанному потребителю

4. Продолжительность

Чтобы включить функцию постоянства, необходимо выполнить следующие требования: постоянство выбора режима доставки сообщений, постоянство включения обмена, постоянство включения очереди

5. Механизм подтверждения (ack)

1. Режим подтверждения отправителя: сообщение отправлено на биржу — отправка завершена —> сообщение доставлено в очередь или сохранено на диск асинхронный обратный вызов уведомляет производителя

2. Механизм подтверждения потребителя: доставка сообщения потребителю-подтверждение-удаление сообщения-доставка следующего

Примечание. До получения ACK сообщение не будет отправлено потребителю повторно, но следующее сообщение будет отправлено другим потребителям.

2. Рабочий режим

1. Простой режим (т.е. самый простой режим трансивера)

1. Сообщение генерирует сообщение и помещает сообщение в очередь

2. Потребитель сообщения (consumer) слушает очередь сообщений.Если в очереди есть сообщение, он его потребляет.После того как сообщение заберется, оно будет автоматически удалено из очереди (скрытое сообщение может быть не должным образом обработано потребителем и исчезло из очереди.) Если сообщение потеряно, для него можно установить ручное подтверждение, но если оно установлено для ручного подтверждения, сообщение подтверждения должно быть отправлено в очередь вовремя после обработки, в противном случае это вызовет переполнение памяти).

2. Режим работы (соревнование ресурсов)

1. Производитель сообщения помещает сообщение в очередь. Потребителей может быть несколько. Потребитель 1 и потребитель 2 слушают одну и ту же очередь одновременно, и сообщение потребляется. C1 и C2 совместно конкурируют за текущее содержимое очереди сообщений, и тот, кто получит его первым, несет ответственность за потребление сообщения (скрытая опасность: в случае высокого параллелизма определенное сообщение будет использоваться несколькими потребителями по умолчанию, вы можете установить переключаться (синхронизировать), чтобы гарантировать, что одно сообщение Сообщение может быть использовано только одним потребителем).

3.публикация/подписка публикация и подписка (общие ресурсы)

1. Каждый потребитель слушает свою очередь;

2. Производитель отправляет сообщение брокеру, а биржа пересылает сообщение в каждую очередь, связанную с биржой, и каждая очередь, связанная с биржой, получит сообщение.

Режим маршрутизации Four.routing

1. Производитель сообщения отправляет сообщение коммутатору Согласно оценке маршрутизации, маршрутизация представляет собой строку (информация) Текущее сгенерированное сообщение содержит символ маршрутизации (метод объекта), и коммутатор может только сопоставить сообщение очередь, соответствующая ключу маршрутизации в соответствии с ключом маршрутизации. , соответствующий потребитель может использовать сообщение;

2. Определите строки маршрутизации на основе бизнес-функций

3. Получите соответствующую строку функции из логики кода системы и поместите задачу сообщения в соответствующую очередь.

4. Бизнес-сценарии: уведомление об ошибке, ИСКЛЮЧЕНИЕ, функция уведомления об ошибке, традиционное уведомление об ошибке, уведомление клиента, с помощью ключевой маршрутизации ошибки в программе могут быть инкапсулированы в сообщения и переданы в очередь сообщений, а разработчики могут настроить потребление, получение ошибок в реальном времени;

5. тематический режим (разновидность режима маршрутизации)

1. Знак фунта со звездочкой представляет собой подстановочный знак.

2. Звездочка представляет несколько слов, а знак решетки представляет слово.

3. Функция маршрутизации добавляет нечеткое соответствие

4. Генератор сообщений генерирует сообщение и отправляет сообщение коммутатору.

5. Коммутатор fuzzy сопоставляется с соответствующей очередью в соответствии с правилами ключа, а контролирующий потребитель очереди получает потребление сообщений.

(В моем понимании это нечеткое сопоставление маршрутного запроса, похожее на метод нечеткого запроса в sql)

6. Режим RPC

Я еще не совсем понял, в следующий раз дополню. . .