3

シンプルな注文処理アプリケーションがあり、注文の状態を処理するためにスプリング ステート マシンを適用しようとしています。そして、残りのサービスからの複数のリクエスト中に、同じ注文の注文の状態をどのように処理できるのでしょうか。

注文状態:

enum OrderEvents {
    FULFILL,
    PAY,
    CANCEL
}

注文イベント:

enum OrderStates {
    SUBMITTED,
    PAID,
    FULFILLED,
    CANCELLED    
}

ステート マシンの構成:

@Log
@Configuration
@EnableStateMachineFactory
class SimpleEnumStatemachineConfiguration extends StateMachineConfigurerAdapter<OrderStates, OrderEvents> {

    @Override
    public void configure(StateMachineTransitionConfigurer<OrderStates, OrderEvents> transitions) throws Exception {
        transitions
                .withExternal().source(OrderStates.SUBMITTED).target(OrderStates.PAID).event(OrderEvents.PAY)
                .and()
                .withExternal().source(OrderStates.PAID).target(OrderStates.FULFILLED).event(OrderEvents.FULFILL)
                .and()
                .withExternal().source(OrderStates.SUBMITTED).target(OrderStates.CANCELLED).event(OrderEvents.CANCEL)
                .and()
                .withExternal().source(OrderStates.PAID).target(OrderStates.CANCELLED).event(OrderEvents.CANCEL);
    }

    @Override
    public void configure(StateMachineStateConfigurer<OrderStates, OrderEvents> states) throws Exception {
        states
                .withStates()
                .initial(OrderStates.SUBMITTED)
                .state(OrderStates.PAID)
                .end(OrderStates.FULFILLED)
                .end(OrderStates.CANCELLED);
    }

    @Override
    public void configure(StateMachineConfigurationConfigurer<OrderStates, OrderEvents> config) throws Exception {
        config.withConfiguration()
                .autoStartup(true)
    }
}

私の注文サービスで私は電話します

StateMachine<OrderStates, OrderEvents> sm = this.factory.getStateMachine(orderIdKey);

しかし、同じorderIdKeyでも毎回新しいステートマシンが作成されているようです。では、注文が次の状態で送信されたときに作成された状態マシンにアクセスするにはどうすればよいですか?

4

1 に答える 1