|
30 | 30 |
|
31 | 31 | #### Конфигурация
|
32 | 32 | Конфигурация саг указывается в аннотациях [@SagaHeader](https://github.com/mmasiukevich/service-bus/blob/master/src/Sagas/Annotations/SagaHeader.php) и [@SagaEventListener](https://github.com/mmasiukevich/service-bus/blob/master/src/Sagas/Annotations/SagaEventListener.php) соответсвенно
|
33 |
| - - **idClass**: Пространство имён класса идентификатора саги. |
34 |
| - - **expireDateModifier**: Интервал времени, в течение которого сага будет считаться открытой |
35 |
| - - **containingIdProperty**: Поле, в которм будет передаваться идентификатор саги. В нашем примере это поле называется *operationId*. Для того, что бы привязать событие к конкретной саге (ведь одно и то же событие может ждать несколько саг), нужно передавать идентификатор. Данная опция указывает на то, какое свойство события содержит этот идентификатор. Параметр можно переопределить в рамках конкретного слушателя, указав в аннотации @SagaEventListener нужное значение. |
| 33 | + - ```idClass```: Пространство имён класса идентификатора саги. |
| 34 | + - ```expireDateModifier```: Интервал времени, в течение которого сага будет считаться открытой |
| 35 | + - ```containingIdProperty```: Поле, в которм будет передаваться идентификатор саги. В нашем примере это поле называется *operationId*. Для того, что бы привязать событие к конкретной саге (ведь одно и то же событие может ждать несколько саг), нужно передавать идентификатор. Данная опция указывает на то, какое свойство события содержит этот идентификатор. Параметр можно переопределить в рамках конкретного слушателя, указав в аннотации @SagaEventListener нужное значение. |
36 | 36 |
|
37 | 37 | Каждый слушатель именуется по следующему шаблону: ```on{EventName}```, где *on* - префикс, а *{EventName}* базовое название класса (без указания пространства имён)
|
38 | 38 |
|
39 | 39 | #### Жизненный цикл
|
40 |
| -Выполнение саги начинается с команды [start](https://github.com/mmasiukevich/service-bus/blob/master/src/Sagas/Saga.php#L133), которая будет вызвана автоматически (пример создания ниже). В рамках саги доступны методы (имеют protected область видимости): |
41 |
| -- [fire](https://github.com/mmasiukevich/service-bus/blob/master/src/Sagas/Saga.php#L191): Отправляет в транспорт команду |
42 |
| -- [raise](https://github.com/mmasiukevich/service-bus/blob/master/src/Sagas/Saga.php#L174): Отправляет в транспорт событие |
43 |
| -- [makeCompleted](https://github.com/mmasiukevich/service-bus/blob/master/src/Sagas/Saga.php#L209): Закрывает сагу, помечая её, как успешную |
44 |
| -- [makeFailed](https://github.com/mmasiukevich/service-bus/blob/master/src/Sagas/Saga.php#L228): Завершает сагу, помечая её, как неуспешную |
| 40 | +Выполнение саги начинается с команды [start()](https://github.com/mmasiukevich/service-bus/blob/master/src/Sagas/Saga.php#L133), которая будет вызвана автоматически (пример создания ниже). В рамках саги доступны методы (имеют protected область видимости): |
| 41 | +- [fire()](https://github.com/mmasiukevich/service-bus/blob/master/src/Sagas/Saga.php#L191): Отправляет в транспорт команду |
| 42 | +- [raise()](https://github.com/mmasiukevich/service-bus/blob/master/src/Sagas/Saga.php#L174): Отправляет в транспорт событие |
| 43 | +- [makeCompleted()](https://github.com/mmasiukevich/service-bus/blob/master/src/Sagas/Saga.php#L209): Закрывает сагу, помечая её, как успешную |
| 44 | +- [makeFailed()](https://github.com/mmasiukevich/service-bus/blob/master/src/Sagas/Saga.php#L228): Завершает сагу, помечая её, как неуспешную |
45 | 45 |
|
46 | 46 | При изменениях статуса в транспорт будут отправлены события:
|
47 |
| -- [SagaCreated](https://github.com/mmasiukevich/service-bus/blob/master/src/Sagas/Contract/SagaCreated.php): Сага была создана |
48 |
| -- [SagaStatusChanged](https://github.com/mmasiukevich/service-bus/blob/master/src/Sagas/Contract/SagaStatusChanged.php): Изменился статус саги |
49 |
| -- [SagaClosed](https://github.com/mmasiukevich/service-bus/blob/master/src/Sagas/Contract/SagaClosed.php): Обработка саги завершена |
| 47 | +- [SagaCreated()](https://github.com/mmasiukevich/service-bus/blob/master/src/Sagas/Contract/SagaCreated.php): Сага была создана |
| 48 | +- [SagaStatusChanged()](https://github.com/mmasiukevich/service-bus/blob/master/src/Sagas/Contract/SagaStatusChanged.php): Изменился статус саги |
| 49 | +- [SagaClosed()](https://github.com/mmasiukevich/service-bus/blob/master/src/Sagas/Contract/SagaClosed.php): Обработка саги завершена |
50 | 50 |
|
51 | 51 | #### Создание
|
52 | 52 | Для операций с сагами есть специальный провайдер - [SagaProvider](https://github.com/mmasiukevich/service-bus/blob/master/src/SagaProvider.php), имеющий несколько методов (каждый метод возвращает объект [Promise](https://github.com/amphp/amp/blob/master/lib/Promise.php))
|
53 |
| -- [start](https://github.com/mmasiukevich/service-bus/blob/master/src/SagaProvider.php#L78): Создаёт и запускает новую сагу, передавая в неё команду |
54 |
| -- [obtain](https://github.com/mmasiukevich/service-bus/blob/master/src/SagaProvider.php#L126): Получает существующую сагу из базы данных |
55 |
| -- [save](https://github.com/mmasiukevich/service-bus/blob/master/src/SagaProvider.php#L161): Сохраняет все изменения в саге, а так же триггерит отправку сообщений в транспорт |
| 53 | +- [start()](https://github.com/mmasiukevich/service-bus/blob/master/src/SagaProvider.php#L78): Создаёт и запускает новую сагу, передавая в неё команду |
| 54 | +- [obtain()](https://github.com/mmasiukevich/service-bus/blob/master/src/SagaProvider.php#L126): Получает существующую сагу из базы данных |
| 55 | +- [save()](https://github.com/mmasiukevich/service-bus/blob/master/src/SagaProvider.php#L161): Сохраняет все изменения в саге, а так же триггерит отправку сообщений в транспорт |
56 | 56 |
|
57 | 57 | #### Примеры кода
|
58 | 58 |
|
|
0 commit comments