我正在努力解决有关Spring State Machine和Spring Cloud Sleuth的问题。发出事件以更改状态机的状态后,我再也看不到traceId。 traceId会迷路。
例如,我有一个只有三个状态的简单状态机:
@Configuration @EnableStateMachine
public class StateMachineConfiguration extends EnumStateMachineConfigurerAdapter<State, Event> {
@Override
public void configure(StateMachineStateConfigurer<State, Event> states) throws Exception {
states
.withStates()
.initial(State.STARTED)
.end(State.FINISHED)
.states(EnumSet.allOf(State.class));
}
@Override
public void configure(StateMachineTransitionConfigurer<State, Event> transitions) throws Exception {
transitions
.withExternal()
.source(State.STARTED).target(State.PROCESSING)
.event(Event.ANALYZE)
.and()
.withExternal()
.source(State.PROCESSING).target(State.FINISHED)
.event(Event.ANALYZE)
;
}
}
以及带有日志的控制器方法以查看状态:
@RestController
public class StateMachineController {
@Autowired
private StateMachine<State, Event> stateMachine;
@GetMapping
public void stateMachineTest() {
log.info("Invoking state machine.");
stateMachine.start();
log.info(" --- {} / traceId = {}", stateMachine.getUuid(), MDC.get("X-B3-TraceId"));
stateMachine.sendEvent(Event.ANALYZE);
log.info(" --- {} / traceId = {}", stateMachine.getUuid(), MDC.get("X-B3-TraceId"));
stateMachine.sendEvent(Event.ANALYZE);
log.info(" --- {} / traceId = {}", stateMachine.getUuid(), MDC.get("X-B3-TraceId"));
}
}
访问此方法的结果是:
2020-06-24 17:54:49.212 INFO [spring-sm,c98b3d6a7a0eb04f,c98b3d6a7a0eb04f,false] 4156 --- [nio-8082-exec-1] b.c.l.pf.spring.sm.SpringSmApplication : Invoking state machine.
2020-06-24 17:54:49.238 INFO [spring-sm,c98b3d6a7a0eb04f,c98b3d6a7a0eb04f,false] 4156 --- [nio-8082-exec-1] b.c.l.pf.spring.sm.SpringSmApplication : --- 41ac020d-5c25-4acd-b757-262c4491fcb7 / traceId = c98b3d6a7a0eb04f
2020-06-24 17:54:49.260 INFO [spring-sm,,,] 4156 --- [nio-8082-exec-1] b.c.l.pf.spring.sm.SpringSmApplication : --- 41ac020d-5c25-4acd-b757-262c4491fcb7 / traceId = null
2020-06-24 17:54:49.262 INFO [spring-sm,,,] 4156 --- [nio-8082-exec-1] b.c.l.pf.spring.sm.SpringSmApplication : --- 41ac020d-5c25-4acd-b757-262c4491fcb7 / traceId = null
我们可以看到在更改状态的第一个事件后traceId丢失了,我不知道发生了什么。我当前正在使用以下版本:
对此有任何想法/建议吗?
几分钟前,我注意到 Spring Boot 2.2.2.RELEASE 和 Spring Cloud Dependencies << strong> Hoxton.RELEASE 。上面的示例结果如下:
2020-06-24 09:38:52.781 INFO [spring-sm,e96c38b34cd805bd,e96c38b34cd805bd,false] 7008 --- [nio-8082-exec-1] b.c.l.pf.spring.sm.SpringSmApplication : Invoking state machine.
2020-06-24 09:38:52.803 INFO [spring-sm,e96c38b34cd805bd,e96c38b34cd805bd,false] 7008 --- [nio-8082-exec-1] b.c.l.pf.spring.sm.SpringSmApplication : --- 69de87f9-738e-429a-8e07-8e465260301c started
2020-06-24 09:38:52.815 INFO [spring-sm,e96c38b34cd805bd,e96c38b34cd805bd,false] 7008 --- [nio-8082-exec-1] b.c.l.pf.spring.sm.SpringSmApplication : --- 69de87f9-738e-429a-8e07-8e465260301c in processing
2020-06-24 09:38:52.818 INFO [spring-sm,e96c38b34cd805bd,e96c38b34cd805bd,false] 7008 --- [nio-8082-exec-1] b.c.l.pf.spring.sm.SpringSmApplication : --- 69de87f9-738e-429a-8e07-8e465260301c finished
这里最大的问题是我现在无法将我的“真实项目”更新为Spring Boot 2。
任何想法或建议将不胜感激。预先感谢。