【问题标题】:spring statemachine for multiple thread concurrently并发用于多个线程的弹簧状态机
【发布时间】:2016-05-12 10:41:44
【问题描述】:

我在单独的线程中有 20 个并发用户处理订单。如何使用弹簧状态机维护状态?

我正在尝试:

public class myclass extends EnumStateMachineConfigurerAdapter<OrderState, OrderEvents>

 @Override
    public void configure(StateMachineTransitionConfigurer<OrderState, OrderEvents> transitions)
            throws Exception {
        transitions
                .withExternal()
                .source(OrderState.A).target(OrderState.B)
                .event(OrderEvents.X)
                .and()
                .withExternal()
                .source(OrderState.A).target(OrderState.C)
                .event(OrderEvents.Y)
@Override
    public void configure(StateMachineConfigurationConfigurer<OrderState, OrderEvents> config) throws Exception {
        config
                .withConfiguration()
                .autoStartup(true)
                .listener(new OrderStateMachineListener());
    }

但它在;y 告诉我状态机,而不是哪个顺序:

@Override
    public void stateChanged(State<OrderState, OrderEvents> from, State<OrderState, OrderEvents> to) {
        System.out.println("Order state changed to " + to.getId());
    }

我有其他选项,但这个选项对于每个事件来说都不是很好:

stateMachine.stop();
        stateMachine
                .getStateMachineAccessor()
                .doWithAllRegions(access -> access.resetStateMachine(new DefaultStateMachineContext<>(sourceState, null, null, null)));
        stateMachine.start();
        stateMachine.sendEvent(event);

【问题讨论】:

    标签: java spring state-machine spring-statemachine


    【解决方案1】:

    终于成功了。我不得不在配置级别使用@EnableStateMachineFactory 而不是@EnableStateMachine,并且从调用程序:

    @Autowired
    StateMachineFactory<String, String> factory;
    
        public void getOrderStatus(long id) {
            StateMachine<String, String> stateMachine = factory.getStateMachine();
            stateMachine.start();
            stateMachine.sendEvent();
        }
    

    【讨论】:

    • 您的状态机将代表哪个 ORDER 的状态?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多