Comments (8)
@freewms Опишите пожалуйста сценарий, когда это могло бы быть полезно (получать и подтверждать сообщения пачками)?
Например сейчас в Адаптере в каждом из потоков мы получаем одно сообщение, загружаем его в базу, и затем подтверждаем. Т.е. в этом сценарии вроде нет необходимости в получении и подтверждении сразу нескольких сообщений.
from pinkrabbitmq.
Я рассматривал возможность использовать компоненту как внешний регистратор событий. В случае, когда обработка событий связана с запросами - удобнее погрузить стоящие в очереди сообщения массивом в запрос и отфильтроваться. Иначе получается весьма ресурсоемко.
from pinkrabbitmq.
Для этого можно использовать локальные очереди
from pinkrabbitmq.
Что есть "локальные очереди"?
from pinkrabbitmq.
@freewms Если Источник сообщений генерирует много сообщений (событий), а получателю нужна только часть, то обычно:
- При отправке сообщений заполняют в них ключ маршрутизации
- Делают для такого получателя отдельную очередь
- Настраивают для этой очереди правила маршрутизации (bindings), так чтобы в нее приходили только нужные сообщения
- Получают все сообщения из очереди без фильтрации
По нашему опыту можно настроить заполнение ключа маршрутизации и правила маршрутизации так, чтобы можно было отсеить все "не нужные сообщения".
Но если это не удается ("просачивается" небольшое количество "не нужных сообщений") то мы загружаем сообщения по одному (как обычно) и подтверждаем без обработки (т.к. их немного, это не является проблемой)
from pinkrabbitmq.
Само собой, ключи маршрутизации использую, Кролик достаточно умен для того что бы хорошо с этим справляться.
Однако иногда нужна именно блоковое получение сообщений, потом обработа на стороне приемника блока целиком (в результате обработки могут возникать различные исключения, в т.ч. по превышению расхода памяти, например), а потом по результату обработки хочется отправить ack что бы удалить блок из очереди.
В целом, это позволит сделать систему с отрицательной обратной связью: сорвалась обработка блока -> уменьшили размер пачки -> повторили попытку обработки. При плавающей нагрузке на систему удобный функционал весьма, на мой вкус.
from pinkrabbitmq.
В целом протокол AMQP позволяет сделать пакетное подтверждение сразу нескольких сообщений. Либы, которая используется в основе компоненты тоже. Вполне себе технически реализуемо и костылей городить не придется.
from pinkrabbitmq.
@freewms "Однако иногда нужна именно блоковое получение сообщений" приведите пожалуйста пример (нам нужно понять, нужно ли нам это в адаптере, чтобы принять решение, делать ли нам это самим)
from pinkrabbitmq.
Related Issues (20)
- Сборка компоненты v2.1.0.59 под Linux на Ubuntu 18 HOT 1
- Добавить метод sleep
- В планах есть релизавать методы по работе по протоколу WebSocket.
- Ошибка при возникновении AMQP server timeout error HOT 3
- BasicConsumeMessage ожидает сообщение ровно столько, сколько установлен timeout
- Падение процессов сервера 1с при работе с компонентой HOT 8
- Тип не определен "AddIn.BITERP.PinkRabbitMQ" HOT 5
- Есть какое-то ограничение на длину ключа маршрутизации? HOT 2
- Количество сообщений в очереди HOT 2
- В чём отличие версий? HOT 2
- Подскажите как установить свойства сообщения
- Поведение компоненты при сбоях связи с сервером RabbitMQ
- Проблема с методом Connect. Перезагрузка сервера.
- Получение сообщений из очереди с типом quorum HOT 2
- Как узнать ответ Кролика на отправку сообщения в очередь? HOT 3
- Работа со свойствами AppId, ContentType, UserId, ContentEncoding HOT 2
- Вылет платформы на больших сообщениях
- Вылет платформы при загрузке большого числа сообщений
- Падение платформы при обрыве соединения отправки
- Аварийное завершение BasicConsumeMessage
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from pinkrabbitmq.