Аксон 4 - Сага снова запускается после перезагрузки JVM - PullRequest
0 голосов
/ 01 февраля 2019

Я использую Axon4 с загрузкой Spring.Создана простая сага.Хорошо работает во время полета в JVM.Однако после перезапуска Saga снова запускается.

Попытка сохранения в JpaSagaStore для сохранения не сработала.Ниже приведен фрагмент кода.Пожалуйста, помогите.

@Configuration
public class AxonConfig {
    @PersistenceContext
    private EntityManager entityManager;

    @Bean
    public SagaStore sagaStore() {
        return JpaSagaStore.builder().entityManagerProvider(new SimpleEntityManagerProvider(entityManager)).build();
    }
}    

@Saga(sagaStore = "sagaStore")
@Slf4j
public class OrderSaga {

    @Autowired
    private transient CommandGateway commandGateway;

    private UUID orderId;

    private boolean passed;

    @StartSaga
    @SagaEventHandler(associationProperty = "orderId")
    public void on(OrderPlacedEvt evt) {
        log.debug("handling {}", evt);
        if (!passed) {
            orderId = evt.getOrderId();
            UUID shipmentId = UUID.randomUUID();
            associateWith("shipmentId", shipmentId.toString());
            commandGateway.send(new PrepareShipmentCmd(shipmentId, evt.getDestination()));
        }
    }


    @SagaEventHandler(associationProperty = "shipmentId")
    public void on(ShipmentPreparedEvt evt) {
        log.debug("handling {}", evt);
        log.debug("orderId: {}", orderId);
        commandGateway.send(new RegisterShipmentForOrderPreparedCmd(orderId, evt.getShipmentId()));
    }

    @SagaEventHandler(associationProperty = "shipmentId")
    @EndSaga
    public void on(ShipmentArrivedEvt evt) {
        log.debug("handling {}", evt);
        log.debug("orderId: {}", orderId);
        commandGateway.send(new RegisterShipmentForOrderArrivedCmd(orderId, evt.getShipmentId()));
    }
}

1 Ответ

0 голосов
/ 04 февраля 2019

Решение Prashant своего вопроса было дополнительно обсуждено здесь

Короче говоря, база данных была установлена ​​на create при каждом запуске.Из-за этого токены (для процессора отслеживания событий), которые отслеживали, как далеко была Saga с обработкой событий, сбрасывались при каждом запуске приложения.

Следовательно, переключение линии spring.jpa.properties.hibernate.hbm2ddl.auto=create на spring.jpa.properties.hibernate.hbm2ddl.auto=update решена проблема.

...