|
|
|
В чем смысл acknowledgement в мессаджинговых системах
|
|||
|---|---|---|---|
|
#18+
Я так понимаю вопрос общ для jms API и для других. 1. Говорят, что есть acknowledgement для producer и для consumer Для consumer понятно: Консумер в какой-то момент говорит - я сообщение обработал, можешь удалять его из очереди и брокер получив этот ack удаляет сообщение из очереди. я для продюсера как acknowlegement работает? 2. Вопрос относительно JMS dups-OK-acknowledge mode https://docs.oracle.com/cd/E19587-01/821-0029/aeqbk/index.html In dups-OK-acknowledge mode, the session automatically sends a client acknowledgment each time it has received a fixed number of messages, or when a fixed time interval has elapsed since the last acknowledgment was sent. (This fixed batch size and timeout interval are currently 10 messages and 7 seconds, respectively, and are not configurable by the client.) Unlike the first two modes described above, the broker does not acknowledge receipt of the client acknowledgment, and the session thread does not block awaiting such return acknowledgment from the broker. This means that you have no way to confirm that your acknowledgment has been received; if it is lost in transmission, the broker may redeliver the same message more than once. However, because client acknowledgments are batched and the session thread does not block, applications that can tolerate multiple delivery of the same message can achieve higher throughput in this mode than in auto-acknowledge or client-acknowledge mode. Вот ничего не понял из этого объяснения. Зачем такой мод нужен? Откуда берутся повторяющиеся сообщения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2017, 11:51 |
|
||
|
В чем смысл acknowledgement в мессаджинговых системах
|
|||
|---|---|---|---|
|
#18+
questionerя для продюсера как acknowlegement работает? Если подтверждение от потребителя не дошло, то сообщение останется в очереди. Продюсер сообщает потребителю, что всё ОК. Сообщение удалено. В противном случае консюмеру надо слать ещё одно подтверждение, это дешевле чем повторно обрабатывать задачу. questionerВот ничего не понял из этого объяснения. То есть всё что выше в той же статье понятно?? questionerЗачем такой мод нужен? Подтверждения не бесплатны. Оптимизация подтверждений позволяет выжать больше производительности. questionerОткуда берутся повторяющиеся сообщения? Ну, если подтверждение нет, то другая сторона, должна повторно отправить сообщение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2017, 12:04 |
|
||
|
В чем смысл acknowledgement в мессаджинговых системах
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Blazkowiczquestionerя для продюсера как acknowlegement работает? Если подтверждение от потребителя не дошло, то сообщение останется в очереди. Продюсер сообщает потребителю, что всё ОК. Сообщение удалено. В противном случае консюмеру надо слать ещё одно подтверждение, это дешевле чем повторно обрабатывать задачу. Мне кажется Вы ответили на другой какой-то вопрос. Я про продюсера спрашивал. Насколько я понял потребитель ничего не знает про продюсера они оба знают про брокера сообщений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2017, 12:09 |
|
||
|
В чем смысл acknowledgement в мессаджинговых системах
|
|||
|---|---|---|---|
|
#18+
Blazkowicz Подтверждения не бесплатны. Оптимизация подтверждений позволяет выжать больше производительности. А можете как-то более понятно чем в доке выразить как это работает. Что за 10 сообщений и 7 секунд? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2017, 12:11 |
|
||
|
В чем смысл acknowledgement в мессаджинговых системах
|
|||
|---|---|---|---|
|
#18+
questionerМне кажется Вы ответили на другой какой-то вопрос. Я про продюсера спрашивал. Насколько я понял потребитель ничего не знает про продюсера они оба знают про брокера сообщений. А, ну да. Я брокера имел ввиду. А что про продюсера? Там всё просто, отправил - получит подтверждение. То же самое всё что из консюмером. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2017, 12:15 |
|
||
|
В чем смысл acknowledgement в мессаджинговых системах
|
|||
|---|---|---|---|
|
#18+
questionerА можете как-то более понятно чем в доке выразить как это работает. Мне не понятно. То есть с auto-acknowledge и client-acknowledge вам всё кристично понятно и только в dups-OK-acknowledge mode какое-то непонимание на ровном месте? Какое именно? questionerЧто за 10 сообщений и 7 секунд? Хардкод размера батча и таймаута в Sun GlassFish Message Queue 4.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2017, 12:17 |
|
||
|
В чем смысл acknowledgement в мессаджинговых системах
|
|||
|---|---|---|---|
|
#18+
Blazkowiczкристично "Кристально чисто" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2017, 12:21 |
|
||
|
В чем смысл acknowledgement в мессаджинговых системах
|
|||
|---|---|---|---|
|
#18+
BlazkowiczquestionerМне кажется Вы ответили на другой какой-то вопрос. Я про продюсера спрашивал. Насколько я понял потребитель ничего не знает про продюсера они оба знают про брокера сообщений. А, ну да. Я брокера имел ввиду. А что про продюсера? Там всё просто, отправил - получит подтверждение. То же самое всё что из консюмером. c консумером разница в том, что он шлёт подтверждение, что он получил сообщение. внутри какие-то айдишки видимо передаются и брокер понимает какое сообщение удалять из очереди. для продюсера: мы шлём сообщение(видимо тоже с айдишником каким-то) и через какое-то время получаем(или не получаем) подтверждение. Тут видимо какая-то логика для нас может быть. AUTO_ACKNOWLEDGE для потребителя: как только вызвался метод onMessage - на брокер ушло подтверждение для производителя: не особо понятно. он может всегда одинаково работает? CLIENT_ACKNOWLEDGE для потребителя: когда потребитель решил, что сообщение принято, тогда и шлётся подтверждение для производителя: наверное разницы с предыдущим модом нет DUPS_OK_ACKNOWLEDGE непонятно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2017, 12:25 |
|
||
|
В чем смысл acknowledgement в мессаджинговых системах
|
|||
|---|---|---|---|
|
#18+
questionerА можете как-то более понятно чем в доке выразить как это работает. Дык, вроде, просто всё. DUP_OK обозначает что система не сломается если вдруг придут повторы. Излишние "подтверждения" позволяют избежать повторов. Но требуют ресурсов. Если повторы не страшны, то можно оптимизировать, сократив количество "подтверждений". Повторы приходят только во время сбоев, когда подтверждение было не доставлено. Предполагается что сбоев в работающей системе должно быть не много. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2017, 12:25 |
|
||
|
В чем смысл acknowledgement в мессаджинговых системах
|
|||
|---|---|---|---|
|
#18+
questioner, оттуда жеNote – All of the acknowledgment modes discussed above apply to message consumption . For message production, the broker’s acknowledgment behavior depends on the message’s delivery mode (persistent or nonpersistent; see Message Header). The broker acknowledges the receipt of persistent messages, but not of nonpersistent ones; this behavior is not configurable by the client. Вероятно, не стоит продюсера в эту же кучу мешать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2017, 12:36 |
|
||
|
В чем смысл acknowledgement в мессаджинговых системах
|
|||
|---|---|---|---|
|
#18+
BlazkowiczquestionerА можете как-то более понятно чем в доке выразить как это работает. Дык, вроде, просто всё. DUP_OK обозначает что система не сломается если вдруг придут повторы. Излишние "подтверждения" позволяют избежать повторов. Но требуют ресурсов. Если повторы не страшны, то можно оптимизировать, сократив количество "подтверждений". Повторы приходят только во время сбоев, когда подтверждение было не доставлено. Предполагается что сбоев в работающей системе должно быть не много. Это я понял. Вот смотрите есть консумер, который работает с DUP_OK. получил сообщение... второе... десятое и после этого шлёт подтверждение, что я получил 10 сообщений с такими то айди. Брокер получает сообщение и удаляет эти 10 сообщений из очереди. Это для случая если сообщения пришли в диапазоне 7 секунд. Что будет если за первые 6 секунд пришло только 5 сообщений и потом за 1 секунду активности не наблюдалось. Потребитель отправит подтверждение только по 5 сообщениями? Это происходит автоматически или я в коде таки должен написать что-то типа msg.ack() ? Видимо я не очень понимаю что будет происходить если допустим на потребителе есть 2 потока которые читают очередь параллельно. если первый запросил и получил сообщение второй тоже запросил сообщение и получил первый шлёт ack Оба они считают одно и то же сообщение? Я понимаю, что это point to point но в amqp могут 2 потребителя читать одну очередь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2017, 12:53 |
|
||
|
В чем смысл acknowledgement в мессаджинговых системах
|
|||
|---|---|---|---|
|
#18+
questionerна потребителе есть 2 потока которые читают очередь параллельно. Это ошибочная формулировка. Два потока - две сессии. Две сессии - два потребителя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2017, 13:00 |
|
||
|
В чем смысл acknowledgement в мессаджинговых системах
|
|||
|---|---|---|---|
|
#18+
questionerЧто будет если за первые 6 секунд пришло только 5 сообщений и потом за 1 секунду активности не наблюдалось. Потребитель отправит подтверждение только по 5 сообщениями? Да ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2017, 13:03 |
|
||
|
В чем смысл acknowledgement в мессаджинговых системах
|
|||
|---|---|---|---|
|
#18+
questioner Это происходит автоматически или я в коде таки должен написать что-то типа msg.ack() ? Автоматически. В коде надо писать для Client Acknowledge режима. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2017, 13:04 |
|
||
|
В чем смысл acknowledgement в мессаджинговых системах
|
|||
|---|---|---|---|
|
#18+
questionerесли первый запросил и получил сообщение второй тоже запросил сообщение и получил первый шлёт ack Оба они считают одно и то же сообщение? Хороший вопрос. Но, думаю, что вряд ли брокер отдаёт всем клиентам одно и то же сообщение. Сообщение после отправки помечается, а если по таймауту не пришло подтверждение, то метка снимается и сообщение может получить уже другой потребитель. Это, вроде, логичный алгоритм. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2017, 13:21 |
|
||
|
В чем смысл acknowledgement в мессаджинговых системах
|
|||
|---|---|---|---|
|
#18+
Blazkowiczquestionerесли первый запросил и получил сообщение второй тоже запросил сообщение и получил первый шлёт ack Оба они считают одно и то же сообщение? Хороший вопрос. Но, думаю, что вряд ли брокер отдаёт всем клиентам одно и то же сообщение. Сообщение после отправки помечается, а если по таймауту не пришло подтверждение, то метка снимается и сообщение может получить уже другой потребитель. Это, вроде, логичный алгоритм. То есть иметь двух консумеров для одной очереди это возможно? разница с топиком в том, что брокер может удалить сообщение из очереди после одного подтверждения, а из топика после получения подтверждения всех подписанных? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2017, 13:30 |
|
||
|
В чем смысл acknowledgement в мессаджинговых системах
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, По поводу дупликатов. Получили мы за 3 секунды 3 сообщения и упали. брокер ничего не знает. мы поднялись, запросили сообщения и повторно прилетают те же самые? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2017, 14:18 |
|
||
|
В чем смысл acknowledgement в мессаджинговых системах
|
|||
|---|---|---|---|
|
#18+
questionerТо есть иметь двух консумеров для одной очереди это возможно? Невозможно, поскольку слово "консумер" не существует. Нафига вы переметнулись с RasbbitMQ - уж начали бы изучать что-то одно (AMQP), потом другое (JMS). Лучше иметь представление о том и о сём, чтобы выбирать, что больше подходит. Ваши вопросы относятся к функционированию JMS, значит, надо почитать документацию о JMS (есть на сайте Oracle). В JMS есть 2 модели подписки (subscription) получателей на сообщения - очередь (queue) и тема (topic). В AMQP их больше. В теме можно сделать подписку многим получателям, сообщение будет удалено, когда все получат. questionerПолучили мы за 3 секунды 3 сообщения и упали. На этот случай предусмотрено отключение автоматического оповещения о получении (auto acknowlegment). Вы получаете сообщение или нужный вам набор сообщений. используете в своей программе и уже потом даёте вручную оповещение, что сообщение больше не нужно и его можно удалять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2017, 14:47 |
|
||
|
В чем смысл acknowledgement в мессаджинговых системах
|
|||
|---|---|---|---|
|
#18+
Partisan M Невозможно, поскольку слово "консумер" не существует. Тут не форум лингвистов. Partisan MНафига вы переметнулись с RasbbitMQ - уж начали бы изучать что-то одно (AMQP), потом другое (JMS). никуда не перемётывался. Я попробовал amqp...всякие фанауты и директы(простите за причинённую боль). На спринге запустил 2 приложения - вроде сообщения передаются, чего ещё изучить я не понял. Вот дошло дело и до JMS. Partisan MquestionerПолучили мы за 3 секунды 3 сообщения и упали. На этот случай предусмотрено отключение автоматического оповещения о получении (auto acknowlegment). Вы получаете сообщение или нужный вам набор сообщений. используете в своей программе и уже потом даёте вручную оповещение, что сообщение больше не нужно и его можно удалять. Напомню, вопрос был про Dups-ok. Я не имел ввиду, что описанное мной поведение "плохое" - я просто интересовался будет ли так или не так. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2017, 16:56 |
|
||
|
В чем смысл acknowledgement в мессаджинговых системах
|
|||
|---|---|---|---|
|
#18+
Я думаю что в науке и технике есть принципы подобия. Jms подобен сетевым протоколам. И хотя он сам может быть встроен в разные уровни сетевого Стека - тем не менее он имеет свои механизмы подтверждений. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2017, 09:44 |
|
||
|
В чем смысл acknowledgement в мессаджинговых системах
|
|||
|---|---|---|---|
|
#18+
mayton, JMS это не протокол ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2017, 11:20 |
|
||
|
В чем смысл acknowledgement в мессаджинговых системах
|
|||
|---|---|---|---|
|
#18+
questioner, Ты слово "подобен" пропустил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2017, 11:47 |
|
||
|
В чем смысл acknowledgement в мессаджинговых системах
|
|||
|---|---|---|---|
|
#18+
Blazkowiczquestionerесли первый запросил и получил сообщение второй тоже запросил сообщение и получил первый шлёт ack Оба они считают одно и то же сообщение? Хороший вопрос. Но, думаю, что вряд ли брокер отдаёт всем клиентам одно и то же сообщение. Сообщение после отправки помечается, а если по таймауту не пришло подтверждение, то метка снимается и сообщение может получить уже другой потребитель. Это, вроде, логичный алгоритм. На самом деле в prod/cos брокер отдает только одному консьюмеру сообщение из очерди и очевидно удаляет отданное сообщение из очереди. Про таймаут я впервые слышу возможно есть такой механизм давно спеки не читал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2017, 18:16 |
|
||
|
В чем смысл acknowledgement в мессаджинговых системах
|
|||
|---|---|---|---|
|
#18+
Sergunka, Ну а зачем тогда нужен рacknowledge если он отдаёт сразу как удалил? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2017, 18:40 |
|
||
|
В чем смысл acknowledgement в мессаджинговых системах
|
|||
|---|---|---|---|
|
#18+
questionerЗачем такой мод нужен? http://docs.oracle.com/javaee/5/api/javax/jms/Session.html#DUPS_OK_ACKNOWLEDGE This acknowledgment mode instructs the session to lazily acknowledge the delivery of messages . This is likely to result in the delivery of some duplicate messages if the JMS provider fails, so it should only be used by consumers that can tolerate duplicate messages. Use of this mode can reduce session overhead by minimizing the work the session does to prevent duplicates . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.08.2017, 20:16 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39506741&tid=2122640]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
34ms |
get topic data: |
7ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
1ms |
| others: | 199ms |
| total: | 343ms |

| 0 / 0 |
