Size: a a a

2020 October 26

R

Ruslan in pro.jvm
Nikita Gryzlov
а чем ha-policy и федерация не HA?
HA != XA, разные вещи
источник

R

Ruslan in pro.jvm
Мне ничего не мешает отправить ack, но я не хочу этим управлять, тем более если мне например сообщение из очереди в базу надо надёжно переместить.
источник

NG

Nikita Gryzlov in pro.jvm
Ruslan
HA != XA, разные вещи
что вы понимаете под XA в таком случае?
источник

AK

Alexander Komarov in pro.jvm
наверное распределенные транзакции, а не хай эвейлебилити
источник

NG

Nikita Gryzlov in pro.jvm
Ruslan
Мне ничего не мешает отправить ack, но я не хочу этим управлять, тем более если мне например сообщение из очереди в базу надо надёжно переместить.
тогда логично было бы настроить консьюмер таким образом, чтобы ack слался только после полной отработки колбэка.
источник

AK

Alexander Komarov in pro.jvm
XA и HA
источник

R

Ruslan in pro.jvm
источник

R

Ruslan in pro.jvm
Да, вот эту хрень
источник

R

Ruslan in pro.jvm
Nikita Gryzlov
тогда логично было бы настроить консьюмер таким образом, чтобы ack слался только после полной отработки колбэка.
Возможно я не знаю как это сделать. И есть проблема с "полной отработкой", как понять, она полная или нет. Если у меня @transactional на методе, коммит был? Что раньше, коммит в базу или ack?
источник

AB

Andrey Belyaev in pro.jvm
Ruslan
Возможно я не знаю как это сделать. И есть проблема с "полной отработкой", как понять, она полная или нет. Если у меня @transactional на методе, коммит был? Что раньше, коммит в базу или ack?
Вот как раз XA транзакции за тебя эту проблему могут решить. Если у тебя метод @Transactional и в нем вычитывание из очереди и запись в базу, то, пока сообщение в базу не запишется и commit в базе не завершится, в очереди сообщение будет считаться непрочитанным. Да, если transaction manager правильный. Какой-нибудь Atomikos посмотри.

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

AB

Andrey Belyaev in pro.jvm
Но про накладные расходы могу наврать, лично не замерял 😊
источник

AE

Alexandr Emelyanov in pro.jvm
накладные будут, на сколько они критичны - каждый решает сам
источник

AB

Andrey Belyaev in pro.jvm
Alexandr Emelyanov
накладные будут, на сколько они критичны - каждый решает сам
Exactly. Даром ничего не будет, надо мерить и решать, готов ли ты мириться с ними в своем конкретном случае.
источник

ВШ

Виктор Шиян... in pro.jvm
Подскажите по поводу rabbit , нужно ли из кода проверять существует ли очередь? Если очереди не будет я так понимаю сообщения всё ровно будут уходить просто не будут как либо обрабатываться rabbit&
источник

R

Ruslan in pro.jvm
Andrey Belyaev
Вот как раз XA транзакции за тебя эту проблему могут решить. Если у тебя метод @Transactional и в нем вычитывание из очереди и запись в базу, то, пока сообщение в базу не запишется и commit в базе не завершится, в очереди сообщение будет считаться непрочитанным. Да, если transaction manager правильный. Какой-нибудь Atomikos посмотри.

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

R

Ruslan in pro.jvm
Виктор Шиян
Подскажите по поводу rabbit , нужно ли из кода проверять существует ли очередь? Если очереди не будет я так понимаю сообщения всё ровно будут уходить просто не будут как либо обрабатываться rabbit&
Зависит от конфигурации серверной части. Есть два основных подхода, в первом созданием очередей рулят на сервере. Второй - очередями рулит клиентский код, модно и молодежно.
источник

R

Ruslan in pro.jvm
Виктор Шиян
Подскажите по поводу rabbit , нужно ли из кода проверять существует ли очередь? Если очереди не будет я так понимаю сообщения всё ровно будут уходить просто не будут как либо обрабатываться rabbit&
Спринговая реализация by default использует второй подход. Если что то пойдёт не так и очереди в к будет - то в лог пишется вал ошибок.
источник

AB

Andrey Belyaev in pro.jvm
Ruslan
У меня нет проблем ни с XA ни с рэбитом. Разговор пошел от вопроса Алексея выше про использование рэбита с гарантированной доставкой. А ее у раббита нет...
А, понял.
источник

R

Ruslan in pro.jvm
))
источник

 P

 ‌‌Gleb Pilipets... in pro.jvm
Ребят, а как в микросервисной архитектуре реализовать обработку запроса от клиента?

Например, флов такой.
client->s1(initial)->s2|s3|s4->s5|s3->sx(final)->client

s1(initial), sx(final) работают как один микросервис, просто разные endpoints.
s - префикс для микросервиса.

Что в это время происходит с запросом клиента? Ну то есть в случае одного сервера он просто в хендлере сделает всю работу и вернёт ответ, а здесь тогда что?

Нужно как-то понимать, на sx, был ли такой запрос на s1, и если был, то отправить ответ и удалить инфу о запросе, но как это сделать?🤔🤔
А на s1 нужно как-то хранить запросы
источник