Flexberry / NewPlatform.Flexberry.ServiceBus

Flexberry Service Bus - Runtime service
MIT License
3 stars 4 forks source link

Добавить поддержку ограничения длины очереди #81

Open archaim opened 4 years ago

archaim commented 4 years ago

Цель

Бывает так, что внешний отправитель, которого мы не можем контролировать, переполняет шину сообщениями, которые получатель не успевает обрабатывать. Требуется добавить возможность ограничивать длину очереди сообщений для отдельных подписок. В случае переполнения очереди шина должна возвращать клиенту-отправителю ошибку с сообщением о том, что очередь для данного типа сообщений переполнена.

Функциональные требования

Разработать новое поведение при приёме сообщений: При отправке сообщений в шину, если для подписки включена функция ограничения длины очереди, шина должна проверять количество ожидающих отправки сообщений по той же подписке, и, если их количество больше или равно ограничению, возвращать отправителю ошибку с текстом «Очередь сообщений типа X для клиента Y переполнена, повторите отправку позже».

Требования к реализации

  1. Добавить в модель БД новые поля для подписок:
    1. RestrictQueueLength (Ограничить длину очереди), тип Boolean, значение по умолчанию — false.
    2. MaxQueueLength (Максимальная длина очереди), тип Integer, значение по умолчанию — 1000.
  2. Внести изменения в компонент, отвечающий за приём сообщений. Если при приёме сообщений в таблице «Сообщение» уже находятся сообщения с таким же типом и таким же получателем, и при этом их количество больше или равно максимальной длине очереди для этой подписки, то вернуть отправителю ошибку с текстом «Очередь сообщений типа X для клиента Y переполнена, повторите отправку позже».

Тесты

Написать модульные тесты.

Примерная оценка трудоёмкости

16