Size: a a a

2021 January 19

ГС

Господин Случай... in pro.jvm
если можно оптимизировать подскажите как
https://pastebin.com/mdPc3wCP
источник

ch

central hardware in pro.jvm
что именно оптимизировать и зачем?
источник

ГС

Господин Случай... in pro.jvm
память и время
источник

C

Cyclone in pro.jvm
Имхо, Вы с одной стороны говорите про супероптимизацию, а с другой пишете логику на эксепшенах, что мало совместимо.
источник

DC

Denis Chikanov in pro.jvm
Господин Случай
если можно оптимизировать подскажите как
https://pastebin.com/mdPc3wCP
Переписать на С
источник

C

Cyclone in pro.jvm
Напишите просто, чтобы работало, потратив минимум своего времени, а потом уже измеряйте, что лечить надо именно тут.
источник

A

Anton in pro.jvm
Приветствую!
Помогите, пожалуйста, с  проблемой идемпотентности чтения из кролика.
Есть такая ситуация, что сообщение из очереди, тригеррит отправку пушей пользователю, пуши нужно отправлять только 1 раз на 1 сообщение.
Есть 2 Дата Центра, и, в каждом ДЦ есть нода кролика и 2 ноды сервиса, гарантия доставки at least once, есть достаточно шансов, что сообщение будет отправлено несколько раз = обработано =  отправлены пуши.
Я однажды решал такую проблему, и решил это с помощью блокировок в БД. Пришло сообщение(у каждого сообщения есть уникальный correlationId), я его ловлю preprocess hookом реббита(Не помню название класса), сохраняю в таблицу, где есть unique констрейнт на correlationId и отправляю в метод-листнер. Таким образом обработать сообщение может только 1 листнер, который смог сохранить сообщение в БД, остальные упадут с ошибкой ConstraintIntegrityViolation, которую мы обработаем.
Может кто знает более элегантное решение?
источник

DP

Denis Pavlyuchenko in pro.jvm
Anton
Приветствую!
Помогите, пожалуйста, с  проблемой идемпотентности чтения из кролика.
Есть такая ситуация, что сообщение из очереди, тригеррит отправку пушей пользователю, пуши нужно отправлять только 1 раз на 1 сообщение.
Есть 2 Дата Центра, и, в каждом ДЦ есть нода кролика и 2 ноды сервиса, гарантия доставки at least once, есть достаточно шансов, что сообщение будет отправлено несколько раз = обработано =  отправлены пуши.
Я однажды решал такую проблему, и решил это с помощью блокировок в БД. Пришло сообщение(у каждого сообщения есть уникальный correlationId), я его ловлю preprocess hookом реббита(Не помню название класса), сохраняю в таблицу, где есть unique констрейнт на correlationId и отправляю в метод-листнер. Таким образом обработать сообщение может только 1 листнер, который смог сохранить сообщение в БД, остальные упадут с ошибкой ConstraintIntegrityViolation, которую мы обработаем.
Может кто знает более элегантное решение?
кажется, можно переложить эту проблему на гугл и эпл. Например, у эпла есть параметр пуша - apns-collapse-id, который должен помочь в случае дублирования одного и того же сообщения
источник

dd

dude dude in pro.jvm
Anton
Приветствую!
Помогите, пожалуйста, с  проблемой идемпотентности чтения из кролика.
Есть такая ситуация, что сообщение из очереди, тригеррит отправку пушей пользователю, пуши нужно отправлять только 1 раз на 1 сообщение.
Есть 2 Дата Центра, и, в каждом ДЦ есть нода кролика и 2 ноды сервиса, гарантия доставки at least once, есть достаточно шансов, что сообщение будет отправлено несколько раз = обработано =  отправлены пуши.
Я однажды решал такую проблему, и решил это с помощью блокировок в БД. Пришло сообщение(у каждого сообщения есть уникальный correlationId), я его ловлю preprocess hookом реббита(Не помню название класса), сохраняю в таблицу, где есть unique констрейнт на correlationId и отправляю в метод-листнер. Таким образом обработать сообщение может только 1 листнер, который смог сохранить сообщение в БД, остальные упадут с ошибкой ConstraintIntegrityViolation, которую мы обработаем.
Может кто знает более элегантное решение?
А бд где лежит?
источник

A

Anton in pro.jvm
dude dude
А бд где лежит?
В одном из 2х ДЦ
источник

AK

Alexander Komarov in pro.jvm
Anton
Приветствую!
Помогите, пожалуйста, с  проблемой идемпотентности чтения из кролика.
Есть такая ситуация, что сообщение из очереди, тригеррит отправку пушей пользователю, пуши нужно отправлять только 1 раз на 1 сообщение.
Есть 2 Дата Центра, и, в каждом ДЦ есть нода кролика и 2 ноды сервиса, гарантия доставки at least once, есть достаточно шансов, что сообщение будет отправлено несколько раз = обработано =  отправлены пуши.
Я однажды решал такую проблему, и решил это с помощью блокировок в БД. Пришло сообщение(у каждого сообщения есть уникальный correlationId), я его ловлю preprocess hookом реббита(Не помню название класса), сохраняю в таблицу, где есть unique констрейнт на correlationId и отправляю в метод-листнер. Таким образом обработать сообщение может только 1 листнер, который смог сохранить сообщение в БД, остальные упадут с ошибкой ConstraintIntegrityViolation, которую мы обработаем.
Может кто знает более элегантное решение?
а сейчас плохо работает?
источник

A

Anton in pro.jvm
Alexander Komarov
а сейчас плохо работает?
Нет, тот подход, что описал я использовал на другом проекте, там всё работает ок, просто, может, кто-то решал эту проблему по-другому, было бы интересно узнать как
источник

dd

dude dude in pro.jvm
У реббита есть режим работы 2х нод, при котором, в случае проблем связи обработка приостанавливается. Это позволяет избежать дубликацию сообщений, но понижает пропускную способность. Можно вообще на одной ноде реббит повесить в цоде с бд, т.к. у данного сервиса этот main ЦОД узкое место
источник

AK

Alexander Komarov in pro.jvm
Anton
Нет, тот подход, что описал я использовал на другом проекте, там всё работает ок, просто, может, кто-то решал эту проблему по-другому, было бы интересно узнать как
ну я бы не трогал, то что работает. принципиально по другому с кроликом наверное сложно решить. вместо бд можно взять распределенный сервис блокировок, консул/зукипер/etcd - но я бы их тащил только если вам дополнительно для чего-то это нужно. а если есть уже постгресс и он работает - я бы не трогал
источник

dd

dude dude in pro.jvm
Либо поднять 3  ноды реббита: два в main цоде и 1 в дополнительном
источник

R

Ruslan in pro.jvm
Всем привет! Кто-то может сталкивался с подобной проблемой
Caused by: io.netty.handler.codec.EncoderException: java.lang.OutOfMemoryError: Direct buffer memory

Использую WebClient for consuming a restfull web service, в какой-то момент ловлю это исключение, понятия не имею как полечить это, vmOptions не помогает, там выставил память 16гб, и директ буффер выставил 16гб, все равно в определенный момент падает, тело ответа сохраняю батчами  через итератор, нагуглить ответа не могу, пробовал переделать на RestTemplate, но он работает медленнее, может кто знает как полечить?
источник

AG

Alexey Genus in pro.jvm
Т.е. установка -XX:MaxDirectMemorySize не помогает?
источник

R

Ruslan in pro.jvm
Alexey Genus
Т.е. установка -XX:MaxDirectMemorySize не помогает?
неа
источник

AG

Alexey Genus in pro.jvm
Тогда, наверное, старые буферы не очищаются, несмотря на то, что не используются. Надо бы посмотреть по мониторингу, правда ли это
источник

AG

Alexey Genus in pro.jvm
Вообще, WebClient - это обёртка спринга и надо смотреть, какую имплементацию он использует в данный момент, а дальше почитать доку по имплементации. Вполне возможно, она не умеет частями читать запросы.
источник