Size: a a a

2021 January 15

D

Dima in pro.jvm
это по сути внутрянка спринга
источник

D

Dima in pro.jvm
и не должна использоваться для таких вещей
источник

AB

Andrey Belyaev in pro.jvm
Nikita Gryzlov
делаю подсистему событий на аспектах. мне не нравится, что для публикации событий нужно в прикладные классы инжектить applicationEventPublisher и явно вызывать у него создание эвентов и их публикацию. основная идея - создать аспект, в котором выделить логику перехвата вызовов, требующих генерации событий, и собственно самой генерации событий. чтобы прикладной код отдельно, события отдельно.

прототип выглядит вот так:
https://i.postimg.cc/cL68Z9tX/image.png

так как аспектируемые объекты могут передавать this внутрь других классов, то есть риск вызова метода, на котором в аспекте назначен эдвайс, из объекта, не являющегося aоп-прокси. в конкретной текущей кодовой базе таких вызовов нет, но и подсистема событий со временем будет расширяться. дебажить такое продолбанное событие будет тем еще приключением, поэтому думаю, как защитится от этого изначально
Вот момент про риск вызова не того  метода я не понял. Вы боитесь отдать наружу из аспекта объект-не-прокси, метод которого можно будет вызвать без генерации события? Ну так напишите аспект так, чтобы не отдавать. Добавьте принудительное оборачивание объектов в нужные прокси.
источник

A

Artjom Kalita in pro.jvm
Dima
и не должна использоваться для таких вещей
Я тоже об этом думал и в один момент отловил Женю Борисова на конференции  поинтересоватся его мнением по этому поводу и он сказал что весьма ок
источник

D

Dima in pro.jvm
Artjom Kalita
Я тоже об этом думал и в один момент отловил Женю Борисова на конференции  поинтересоватся его мнением по этому поводу и он сказал что весьма ок
вообще если есть какая-то полноценная работа с событиями, надо уже подумывать об очередях
источник

A

Artjom Kalita in pro.jvm
Dima
вообще если есть какая-то полноценная работа с событиями, надо уже подумывать об очередях
Это да наверное самый разумный вариант
источник

A

Artjom Kalita in pro.jvm
Люди не хотят реббит или кафку тянуть в проект наверное
источник

AB

Andrey Belyaev in pro.jvm
Dima
и не должна использоваться для таких вещей
Почему, кстати? Если оно есть во фреймворке, в доках нет явного запрещения использования - то почему нет?
источник

A

Artjom Kalita in pro.jvm
Dima
вообще если есть какая-то полноценная работа с событиями, надо уже подумывать об очередях
У нас была идея, что это как часть декомпозиции кода, что определенная логика должна быть в одних вещах а другая в других и вот обмен между этими компонентами проходил через спринговые ивенты - нам не нужен был сложны механизм хранения ивентов и всякие гарантии по доставке сообщений
источник

AB

Andrey Belyaev in pro.jvm
Dima
вообще если есть какая-то полноценная работа с событиями, надо уже подумывать об очередях
Так тут идея, чтобы максимально разделить код генерации событий и бизнес-логику, как я понял. @nixel2007 не хочет инжектить ни EventPublisher, ни RabbitTemplate.
источник

D

Dima in pro.jvm
Andrey Belyaev
Почему, кстати? Если оно есть во фреймворке, в доках нет явного запрещения использования - то почему нет?
ну то, что ей пользуютя системные компоненты и вообще по идее эта очередь именно для ЖЦ твоего приложения
источник

D

Dima in pro.jvm
а если у тебя там полноценные бизнес-события, должна быть отдельная очередь
источник

A

Artjom Kalita in pro.jvm
Dima
а если у тебя там полноценные бизнес-события, должна быть отдельная очередь
В проекте было разделение по доменным областям - у каждой части доменной области была своя спринг стейт машина которая могла запустить процесс обработки для определенного домена - общение между разными доменными областями - происходили через спринговые ивенты - все было норм и выглядело довольно неплохо
источник

A

Artjom Kalita in pro.jvm
Можно конечно было бы кафки, реббиты или прочее интродюсить но в тот момент решили что это YAGNI и если надо будет то перейдем - надобность пока не возникала
источник

D

Dima in pro.jvm
стэйтмашина очень неплохо
источник

D

Dima in pro.jvm
для такого
источник

AB

Andrey Belyaev in pro.jvm
Dima
а если у тебя там полноценные бизнес-события, должна быть отдельная очередь
Вот тут очень тонкая грань - слово "полноценный". Если нужно просто репортить что-то типа "отчеты готовы" или "импорт завершен"  - это полноценные бизнес-события?
источник

D

Dima in pro.jvm
Andrey Belyaev
Вот тут очень тонкая грань - слово "полноценный". Если нужно просто репортить что-то типа "отчеты готовы" или "импорт завершен"  - это полноценные бизнес-события?
да
источник

D

Dima in pro.jvm
и испольщование эвент паблишера оправдано в сингл режиме)
источник

D

Dima in pro.jvm
или когда нагрузка небольшая
источник