MQ Advanced — ленивая очередь

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

Блогер: Пьяница.
Личный профиль: Наслаждайтесь вином и используйте энергию вина для борьбы за будущее.
Эта статья вдохновляет: Когда мы втроем путешествуем вместе, мы должны быть моим учителем.

Пожалуйста, добавьте описание изображения
Этот проект основан на Java «SpringCloud Microservice Technology Stack» от темного программиста станции B , SpringCloud+RabbitMQ+Docker+Redis+search+distributed.

[SpringCloud+RabbitMQ+Docker+Redis+search+distributed, подробное описание системы, курс по стеку технологий микросервисов Springcloud | Темная лошадка программиста Java-микросервисы] Нажмите, чтобы посмотреть

4. Ленивая очередь

2. Ленивая очередь

Ленивая очередь — это структура данных, которая временно сохраняет элементы данных в очереди для последующей обработки, когда их не требуется обрабатывать немедленно.

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

Ленивые очереди имеют широкий спектр сценариев применения.

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

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

Основные преимущества ленивой очереди:

  • Уменьшите накладные расходы на вычисления и память. Поскольку элементы в ленивой очереди обрабатываются только при необходимости, можно избежать большого количества ненужных вычислений и накладных расходов на память.
  • Улучшение использования системных ресурсов. Ленивые очереди могут эффективно использовать системные ресурсы, такие как ЦП и память, тем самым улучшая использование системных ресурсов.
  • Гибкость и масштабируемость. Ленивые очереди могут гибко справляться с различными сценариями приложений и легко масштабироваться для крупномасштабной обработки данных.

Недостатки ленивой очереди:

  • Проблемы с согласованностью данных. Поскольку элементы в ленивой очереди обрабатываются только при необходимости, могут возникнуть проблемы с согласованностью данных. Например, в многопоточной среде, если один поток читает элемент в очереди, а другой поток изменяет этот элемент, может возникнуть несогласованность данных.
  • Риск потери данных. Если элементы в ленивой очереди не обрабатываются правильно, когда это необходимо, может возникнуть риск потери данных.

Предложения по улучшению:

  • Используйте блокировки или другие механизмы синхронизации. В многопоточной среде мы можем использовать блокировки или другие механизмы синхронизации, чтобы обеспечить безопасность потоков и избежать проблем с согласованностью данных.
  • Разработайте разумную стратегию планирования. Чтобы снизить риск потери данных, мы можем разработать разумную стратегию планирования, обеспечивающую правильную обработку каждого элемента при необходимости.

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

Подводя итог, можно сказать, что ленивая очередь — это очень полезная структура данных, которая может эффективно справляться с ситуациями, когда время обработки неопределенно или процесс обработки занимает много времени. Временно сохраняя ожидающие элементы и обрабатывая их при необходимости, ленивые очереди могут снизить накладные расходы на вычисления и память, улучшить использование системных ресурсов, а также обеспечить гибкость и масштабируемость. Однако необходимо проявлять осторожность для решения проблем согласованности данных и потери данных. На практике нам следует выбирать, использовать ли ленивые очереди, исходя из конкретных сценариев приложения, и вносить соответствующие улучшения или расширения в зависимости от реальной ситуации.

Начиная с версии 3.6.0 RabbitMQ, была добавлена ​​концепция Lazy Queues, которая представляет собой ленивую очередь. Характеристики ленивой очереди следующие:

  • После получения сообщения оно сохраняется непосредственно на диске, а не в памяти.
  • Когда потребитель хочет использовать сообщение, он считывает его с диска и загружает в память.
  • Поддерживает миллионы хранилищ сообщений
  1. Установить ленивую очередь на основе командной строки

Чтобы установить очередь как ленивую очередь, вам нужно только указать атрибут x-queue-mode как ленивый при объявлении очереди. Работающую очередь можно преобразовать в ленивую очередь с помощью командной строки:

rabbitmqctl set_policy Lazy "^lazy-queue$" '{"queue-mode":"lazy"}' --apply-to queues  

Интерпретация команды:

  • rabbitmqctl: Инструмент командной строки для RabbitMQ.
  • set_policy:Добавить стратегию
  • Lazy: Имя политики, можно настроить.
  • "^lazy-queue$": используйте регулярное выражение для соответствия имени очереди.
  • '{"queue-mode":"lazy"}':Установить режим очереди в ленивый режим
  • --apply-to queues : Целью политики являются все очереди.
  1. Объявите LazyQueue на основе @RabbitListener
@RabbitListener(queuesToDeclare = @Queue(
        name = "lazy.queue",
        durable = "true",
        arguments = @Argument(name = "x-queue-mode", value = "lazy")
))
public void listenLazyQueue(String msg) {
    
    
    log.info("接收到lazy.queue的消息:{}", msg);
}

Подведем итог

Решение проблемы с накоплением сообщений?

  • Привяжите несколько потребителей к очереди, чтобы увеличить скорость потребления.
  • Используя ленивую очередь, вы можете сохранять больше сообщений в mq.

Каковы преимущества ленивой очереди?

  • В зависимости от дискового пространства, высокий лимит сообщений
  • Прерывистой выдачи страниц нет, а производительность относительно стабильна.

Каковы недостатки ленивых очередей?

  • В зависимости от дискового пространства своевременность сообщений будет снижена.
  • Производительность ограничена дисковым вводом-выводом

Acho que você gosta

Origin blog.csdn.net/m0_65144570/article/details/133150985
Recomendado
Clasificación