# Триггер для выработки Message Throwing Event

**URL:** <https://forum.reunico.com/t/trigger-dlya-vyrabotki-message-throwing-event/87>\
**Category:** Camunda 7\
**Created:** [07.Июнь.2021 19:24:29 UTC](https://forum.reunico.com/t/trigger-dlya-vyrabotki-message-throwing-event/87 "2021-06-07T19:24:29Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Mstislav](https://forum.reunico.com/user_avatar/forum.reunico.com/mstislav/32/102_2.png) [@Mstislav](https://forum.reunico.com/u/Mstislav)\
**Post date:** [07.Июнь.2021 19:24:29 UTC](https://forum.reunico.com/t/trigger-dlya-vyrabotki-message-throwing-event/87/1 "2021-06-07T19:24:29Z")

</div>

Всем привет!

Вопрос наверное, не столько про камунду, сколько про Spring Boot.

Дано:

1. Микросервис Spring Boot + Spring MVC/REST + Spring Data + Camunda
2. Есть набор сущностей A, B, C, D, E, update которых происходит через REST-контроллер.
3. При update сущностей нужно проверять, изменились ли определенные поля и посылать message throwing event (вместе с измененными данными) в процессный движок.
4. Периодически со стороны фронта работает автосохранение, вызываемое если пользователь внес изменения в форме (запросов на изменение может быть много).

Рассматриваются следующие альтернативные варианты:

1. Организовать отдельный метод (в контроллере и сервисе), который будет принимать на вход message + данные/DTO.
2. Добавить дополнительный обработчик в @EntityListeners на классы A, B, C, D, E (точнее на их абстрактного предка) в котором перехватывать update и посылать сообщение.
3. Добавить вызовы для отправки сообщения в существующие контроллеры/сервисы для update этих объектов.
4. По таймеру (раз в N минут) проверять есть ли изменения указанных объектов и посылать сообщение, если есть? (Не понятно, где хранить последнее состояние значений? Если в переменных процесса, как синхронизировать переменные процесса и данные?)

Не могу выбрать, какой из вариантов является самым оптимальным с точки зрения быстродействия, нагрузки, сложности реализации и архитектурной чистоты.  
Пока склоняюсь к варианту 2.

---

<div class="post-metadata">

**Author:** ![Mstislav](https://forum.reunico.com/user_avatar/forum.reunico.com/mstislav/32/102_2.png) [@Mstislav](https://forum.reunico.com/u/Mstislav)\
**Post date:** [11.Июнь.2021 07:47:46 UTC](https://forum.reunico.com/t/trigger-dlya-vyrabotki-message-throwing-event/87/2 "2021-06-11T07:47:46Z")

</div>

> [@Mstislav](#):
>
> - Добавить дополнительный обработчик в @EntityListeners на классы A, B, C, D, E (точнее на их абстрактного предка) в котором перехватывать update и посылать сообщение.
> - Добавить вызовы для отправки сообщения в существующие контроллеры/сервисы для update этих объектов.

UPDATE  
Эти два варианта не годятся, т.к. могут рождаться параллельные потоки в приложении, которые могут вызвать исключения/взаимные блокировки.

Пока остановились на опции 1.
