RocketMQ (9): отправка сообщения (продолжение)

задняя часть база данных сервер Netty

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

Схема развертывания сети RocketMQ

  • NameServer: в системе это служба именования, обновляющая и обнаруживающая брокерские услуги.
  • Broker-Master: Хост-сервер сообщений брокера.
  • Broker-Slave: подчиненный сервер сообщений брокера.
  • Производитель: Производитель сообщения.
  • Потребитель: потребитель сообщений.

проиллюстрировать:Серия RocketMQ будет представлена ​​вместе с RocketMQ-4.1.0-Incubating.

Читая исходный код, я сделал определенный комментарий, официальный аккаунт [Ingenuity Zero] ответил: Rocketmq, вы можете получить подробные комментарии к китайскому коду на основе Rocketmq4.1.0. Добро пожаловать в звезду и форк!

Часть 1RocketMQ (восемь): отправка сообщенийВ основном анализируется общий процесс отправки.В этой статье будет представлена ​​ситуация отправки по времени, последовательной отправки, пакетной отправки и так далее.

Обзор обмена сообщениями

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

Примечание:В этой статье будет представлена ​​ситуация отправки по времени, последовательной отправки и пакетной отправки Эти ситуации объясняются с точки зрения производителя.Контент, связанный с брокером, будет анализироваться при анализе связанного контента брокера.

Время отправки

Что такое сообщение по времени

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

форма вызова

Это в основном то же самое, что и обычная отправка вызова, единственное, что есть еще одно сообщение для установки setDelayTimeLevel. Вызов кода показан на рисунке:

Итак, какой уровень должен быть заполнен здесь? Соответствует чему? ---> Этот фрагмент будет разобран позже, сегодня я кратко объясню его здесь:

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

Последовательно отправлено

Что такое последовательная отправка

Ссылка: https://help.aliyun.com/document_detail/49319.html?spm=a2c4g.11186623.2.3.21aKRd

форма вызова

Давайте посмотрим на конкретное содержимое и реализуем вызов, чтобы понять, что происходит:

  • Получить всю информацию, которую можно отправить

  • Отправить контент

  • Используется для различения (например, номер заказа, этот тип номера заказа соответствует порядку, но может не соответствовать порядку с другими номерами заказа)

 sendResult = producer.send(msg, new MessageQueueSelector() {
                    @Override
                    public MessageQueue select(List<MessageQueue> mqs, Message msg, Object arg) {
                        Integer id = (Integer) arg;
                        int index = id % mqs.size();
                        return mqs.get(index);
                    }
                }, orderId);

Здесь mqs для получения всей информации, которая может быть отправлена, а orderId используется для различения, каждый раз, когда orderId и all являются по модулю (если нет изменений во всех случаях), то одна из них является фиксированной очередью.(Очередь «первым пришел — первым ушел»), а последующее потребление анализирует, как потребление справляется с этим.

**Примечания:** порядок здесь также относительный.Если брокер добавлен или количество брокеров уменьшено, информация по модулю неизбежно будет противоречивой, поэтому ее необходимо понимать.

Массовая рассылка

Что такое массовая рассылка

Я считаю, что все хорошо знакомы с концепцией пакетной обработки.Во многих настройках, таких как пакетная обработка базы данных, некоторые запросы объединяются и отправляются и т. д., аналогичные реализации, поэтому пакетная отправка RocketMQ также преследует производительность, особенно в порядке Когда он большой, пакетный эффект очень заметен.

**Примечание: **Поскольку это пакет, он отправляется после пакета, поэтому производительность в реальном времени может немного задерживаться (это можно игнорировать, особенно в случае большого объема данных). Обычно я обрабатываю пакеты в 2 измерениях, и при достижении одного из них он может быть запущен, 1. Достижение заданного количества элементов 2. Достижение заданного времени (например, раз в 3 с, если объема данных все еще недостаточно в это время он будет отправлен)...

Rocketmq предоставляет только интерфейс для отправки пакета данных, поэтому время отправки этого пакета данных зависит от вашего собственного выбора, то есть два приведенных выше метода являются общими:

  • достигает заданного количества баров.
  • дойти до указанного времени.
форма вызова

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

Преобразуйте их в формы a, b, c и т. д.

Давайте посмотрим на пример, который Rocketmq отправляет нам партиями, почему он дает нам 2 примера?Надо подумать! ! !, я объясню это вам ниже:

Примечание:Пакетная отправка требует той же темы и того же waitStoreMsgOK и не поддерживает отправку по расписанию.

Сообщения одного и того же пакета должны иметь: одну и ту же тему, один и тот же waitStoreMsgOK и не поддерживать расписание.

Этот вид отправки является пакетным (партия здесь не особо большая), и он отправляется сам по себе.

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

Мы знаем, что Rocketmq в настоящее время поддерживает 4M для отправки содержимого сообщения по умолчанию (независимо от того, одно это или в пакетах), Если это необходимо настроить, его можно настроить, поэтому всегда не будет верхнего предела? Есть еще много людей, которые сказали, что настройка 10M не вступила в силу (здесь необходимо настроить как производителя, так и брокера на стороне сервера, поясняется в последующем объяснении, и потому что он основан на сетевой передаче , возможно, вам нужно посмотреть на этоRocketMQ (2): связь RPC, объяснение здесь)

Здесь определяется, что максимальным и максимальным может быть только16M, при необходимости его нужно модифицировать.В общем случае модифицировать не рекомендуется.Так же, как и второй способ пакетной отправки.


Если вы чувствуете себя вознагражденным после прочтения, пожалуйста, подпишитесь и добавьте официальную учетную запись [Ingenuity Zero], чтобы узнать больше захватывающей истории! ! !

Присоединяйтесь к Планете Знаний и обсуждайте вместе!

img