多个反应式 Spring statemachine 3.2.0 实例在 OpenShift 4 中运行单个线程

问题描述 投票:0回答:0

我正在运行创建 Spring statemachine 3.2.0 实例的 Springboot (2.5.9) 服务。 Java SDK 版本为 11.0.17 当 springboot 服务在 OpenShift 4 Pod 中运行时,我有一个奇怪的行为;所有状态机实例都运行相同的并行线程,而每个状态机运行自己的可池化线程在我运行 Windows 操作系统的笔记本电脑上是正常的。 非常感谢任何提示!

Pod 运行的操作系统

$ uname -a  Linux gin-backend-numerisation-dev-5897964856-vplzb 4.18.0-305.57.1.el8_4.x86_64 #1 SMP Tue Jul 5 17:55:55 EDT 2022 x86_64 x86_64 x86_64 GNU/Linux

Pod 的 Java 版本:

$ java --version  openjdk 11.0.17 2022-10-18 OpenJDK Runtime Environment Temurin-11.0.17+8 (build 11.0.17+8) OpenJDK 64-Bit Server VM Temurin-11.0.17+8 (build 11.0.17+8, mixed mode, sharing)

本地机器的输出(正常行为)

2023-04-12 08:10:24.978 [GIN] [restartedMain] INFO  c.q.h.g.SpringBootApplication - Starting State Machine [Instance_2]...

2023-04-12 08:10:25.050 \[GIN\] \[restartedMain\] INFO  c.q.h.g.s.StateMachineEventListener - ----- State entered \[INITIAL\]

2023-04-12 08:10:25.061 \[GIN\] \[parallel-1\] INFO  c.q.h.g.s.StateMachineEventListener - ----- State exited \[INITIAL\]

2023-04-12 08:10:25.062 \[GIN\] \[restartedMain\] INFO  c.q.h.g.s.StateMachineEventListener - ----- State changed from \[null\] to \[INITIAL\]

2023-04-12 08:10:25.064 \[GIN\] \[restartedMain\] INFO  c.q.h.g.s.StateMachineEventListener - ----- state machine started: \[Instance_2\]

2023-04-12 08:10:25.065 \[GIN\] \[restartedMain\] INFO  c.q.h.g.SpringBootApplication - Started \[Instance_2\]...

2023-04-12 08:10:25.066 \[GIN\] \[restartedMain\] INFO  c.q.h.g.SpringBootApplication - Starting State Machine \[Instance_1\]...

2023-04-12 08:10:25.066 \[GIN\] \[parallel-1\] INFO  c.q.h.g.s.StateMachineEventListener - ----- State entered \[STARTED\]

2023-04-12 08:10:25.067 \[GIN\] \[restartedMain\] INFO  c.q.h.g.s.StateMachineEventListener - ----- State entered \[INITIAL\]

2023-04-12 08:10:25.068 \[GIN\] \[restartedMain\] INFO  c.q.h.g.s.StateMachineEventListener - ----- State changed from \[null\] to \[INITIAL\]

2023-04-12 08:10:25.068 \[GIN\] \[restartedMain\] INFO  c.q.h.g.s.StateMachineEventListener - ----- state machine started: \[Instance_1\]

2023-04-12 08:10:25.069 \[GIN\] \[restartedMain\] INFO  c.q.h.g.SpringBootApplication - Started \[Instance_1\]...

2023-04-12 08:10:25.070 \[GIN\] \[parallel-1\] INFO  c.q.h.g.s.StateMachineEventListener - ----- State changed from \[INITIAL\] to \[STARTED\]

2023-04-12 08:10:25.072 \[GIN\] \[parallel-3\] INFO  c.q.h.g.s.a.StateMachineAction - State Machine: \[Instance_2\] Received message: \[null\] From: \[INITIAL\] To: \[STARTED\] Running action: \[StartAction\]

2023-04-12 08:10:25.078 \[GIN\] \[parallel-3\] INFO  c.q.h.g.s.a.StateMachineAction - --------------------- Waiting for future state event...

2023-04-12 08:10:25.376 \[GIN\] \[parallel-2\] INFO  c.q.h.g.s.StateMachineEventListener - ----- State exited \[INITIAL\]

2023-04-12 08:10:25.376 \[GIN\] \[parallel-2\] INFO  c.q.h.g.s.StateMachineEventListener - ----- State entered \[STARTED\]

2023-04-12 08:10:25.377 \[GIN\] \[parallel-2\] INFO  c.q.h.g.s.StateMachineEventListener - ----- State changed from \[INITIAL\] to \[STARTED\]

2023-04-12 08:10:25.377 \[GIN\] \[parallel-4\] INFO  c.q.h.g.s.a.StateMachineAction - State Machine: \[Instance_1\] Received message: \[null\] From: \[INITIAL\] To: \[STARTED\] Running action: \[StartAction\]

2023-04-12 08:10:25.377 \[GIN\] \[parallel-4\] INFO  c.q.h.g.s.a.StateMachineAction - --------------------- Waiting for future state event...

2023-04-12 08:10:26.557 \[GIN\] \[GIN-Async2\] INFO  c.q.h.g.s.a.StateMachineAction - ----------------------- Completing future state event \[REJECT_DOCUMENT_EVENT\]

2023-04-12 08:10:26.557 \[GIN\] \[GIN-Async1\] INFO  c.q.h.g.s.a.StateMachineAction - ----------------------- Completing future state event \[REJECT_DOCUMENT_EVENT\]

2023-04-12 08:10:26.557 \[GIN\] \[parallel-3\] INFO  c.q.h.g.s.a.StateMachineAction - ------------------- Consumed completed future state event \[REJECT_DOCUMENT_EVENT\]

2023-04-12 08:10:26.557 \[GIN\] \[parallel-4\] INFO  c.q.h.g.s.a.StateMachineAction - ------------------- Consumed completed future state event \[REJECT_DOCUMENT_EVENT\]

2023-04-12 08:10:26.561 \[GIN\] \[parallel-3\] INFO  c.q.h.g.s.a.StateMachineAction - -------------------- sending event \[REJECT_DOCUMENT_EVENT\]

2023-04-12 08:10:26.561 \[GIN\] \[parallel-4\] INFO  c.q.h.g.s.a.StateMachineAction - -------------------- sending event \[REJECT_DOCUMENT_EVENT\]

2023-04-12 08:10:26.571 \[GIN\] \[parallel-3\] INFO  c.q.h.g.s.StateMachineEventListener - ----- State exited \[STARTED\]

2023-04-12 08:10:26.571 \[GIN\] \[parallel-4\] INFO  c.q.h.g.s.StateMachineEventListener - ----- State exited \[STARTED\]

2023-04-12 08:10:26.572 \[GIN\] \[parallel-3\] INFO  c.q.h.g.s.StateMachineEventListener - ----- State entered \[REJECT_DOCUMENT\]

2023-04-12 08:10:26.572 \[GIN\] \[parallel-4\] INFO  c.q.h.g.s.StateMachineEventListener - ----- State entered \[REJECT_DOCUMENT\]

2023-04-12 08:10:26.573 \[GIN\] \[parallel-4\] INFO  c.q.h.g.s.StateMachineEventListener - ----- State changed from \[STARTED\] to \[REJECT_DOCUMENT\]

2023-04-12 08:10:26.573 [GIN] [parallel-3] INFO c.q.h.g.s.StateMachineEventListener - ----- 状态从 [STARTED] 更改为 [REJECT_DOCUMENT]

2023-04-12 08:10:26.573 \[GIN\] \[parallel-5\] INFO  c.q.h.g.s.a.StateMachineAction - State Machine: \[Instance_2\] Received message: \[REJECT_DOCUMENT_EVENT\] From: \[STARTED\] To: \[REJECT_DOCUMENT\] Running action: \[RejectDocumentAction\]

2023-04-12 08:10:26.573 \[GIN\] \[parallel-6\] INFO  c.q.h.g.s.a.StateMachineAction - State Machine: \[Instance_1\] Received message: \[REJECT_DOCUMENT_EVENT\] From: \[STARTED\] To: \[REJECT_DOCUMENT\] Running action: \[RejectDocumentAction\]

Openshift 的输出 - 意外行为:2 个实例运行单个线程(parallel-1)

2023-04-12 08:37:48.128 \[GIN\] \[main\] INFO  c.q.h.g.SpringBootApplication - Started SpringBootApplication in 70.821 seconds (JVM running for 74.85)

2023-04-12 08:37:48.212 \[GIN\] \[main\] INFO  c.q.h.g.SpringBootApplication - Starting State Machine \[Instance_1\]...

2023-04-12 08:37:48.693 \[GIN\] \[main\] INFO  c.q.h.g.s.StateMachineEventListener - ----- State entered \[INITIAL\]

2023-04-12 08:37:48.702 \[GIN\] \[parallel-1\] INFO  c.q.h.g.s.StateMachineEventListener - ----- State exited \[INITIAL\]

2023-04-12 08:37:48.705 \[GIN\] \[main\] INFO  c.q.h.g.s.StateMachineEventListener - ----- State changed from \[null\] to \[INITIAL\]

2023-04-12 08:37:48.707 \[GIN\] \[main\] INFO  c.q.h.g.s.StateMachineEventListener - ----- state machine started: \[Instance_1\]
2023-04-12 08:37:48.707 \[GIN\] \[main\] INFO  c.q.h.g.SpringBootApplication - Started \[Instance_1\]...

2023-04-12 08:37:48.708 \[GIN\] \[main\] INFO  c.q.h.g.SpringBootApplication - Starting State Machine \[Instance_2\]...

2023-04-12 08:37:48.709 \[GIN\] \[main\] INFO  c.q.h.g.s.StateMachineEventListener - ----- State entered \[INITIAL\]

2023-04-12 08:37:48.798 \[GIN\] \[main\] INFO  c.q.h.g.s.StateMachineEventListener - ----- State changed from \[null\] to \[INITIAL\]

2023-04-12 08:37:48.798 \[GIN\] \[main\] INFO  c.q.h.g.s.StateMachineEventListener - ----- state machine started: \[Instance_2\]

2023-04-12 08:37:48.799 \[GIN\] \[main\] INFO  c.q.h.g.SpringBootApplication - Started \[Instance_2\]...

2023-04-12 08:37:48.802 \[GIN\] \[parallel-1\] INFO  c.q.h.g.s.StateMachineEventListener - ----- State entered \[STARTED\]

2023-04-12 08:37:48.813 \[GIN\] \[parallel-1\] INFO  c.q.h.g.s.StateMachineEventListener - ----- State changed from \[INITIAL\] to \[STARTED\]

2023-04-12 08:37:48.815 \[GIN\] \[parallel-1\] INFO  c.q.h.g.s.StateMachineEventListener - ----- State exited \[INITIAL\]

2023-04-12 08:37:48.816 \[GIN\] \[parallel-1\] INFO  c.q.h.g.s.StateMachineEventListener - ----- State entered \[STARTED\]

2023-04-12 08:37:48.817 \[GIN\] \[parallel-1\] INFO  c.q.h.g.s.StateMachineEventListener - ----- State changed from \[INITIAL\] to \[STARTED\]

2023-04-12 08:37:48.821 \[GIN\] \[parallel-1\] INFO  c.q.h.g.s.a.StateMachineAction - State Machine: \[Instance_1\]

Received message: \[null\] From: \[INITIAL\] To: \[STARTED\] Running action: \[StartAction\]

2023-04-12 08:37:48.900 \[GIN\] \[parallel-1\] INFO  c.q.h.g.s.a.StateMachineAction - --------------------- Waiting for future state event...

2023-04-12 08:37:53.699 \[GIN\] \[GIN-Async1\] INFO  c.q.h.g.s.a.StateMachineAction - ----------------------- Completing future state event \[REJECT_DOCUMENT_EVENT\]

2023-04-12 08:37:53.699 \[GIN\] \[parallel-1\] INFO  c.q.h.g.s.a.StateMachineAction - ------------------- Consumed completed future state event \[REJECT_DOCUMENT_EVENT\]

2023-04-12 08:37:53.704 \[GIN\] \[parallel-1\] INFO  c.q.h.g.s.a.StateMachineAction - -------------------- sending event \[REJECT_DOCUMENT_EVENT\]

2023-04-12 08:37:53.797 \[GIN\] \[parallel-1\] INFO  c.q.h.g.s.StateMachineEventListener - ----- State exited \[STARTED\]

2023-04-12 08:37:53.807 \[GIN\] \[parallel-1\] INFO  c.q.h.g.s.StateMachineEventListener - ----- State entered \[REJECT_DOCUMENT\]

2023-04-12 08:37:53.808 \[GIN\] \[parallel-1\] INFO  c.q.h.g.s.StateMachineEventListener - ----- State changed from \[STARTED\] to \[REJECT_DOCUMENT\]

2023-04-12 08:37:53.813 \[GIN\] \[parallel-1\] INFO  c.q.h.g.s.a.StateMachineAction - ----- consuming state event \[REJECT_DOCUMENT_EVENT\]

2023-04-12 08:37:53.813 \[GIN\] \[parallel-1\] INFO  c.q.h.g.s.a.StateMachineAction - State Machine: \[Instance_2\] Received message: \[null\] From: \[INITIAL\] To: \[STARTED\] Running action: \[StartAction\]

2023-04-12 08:37:53.828 \[GIN\] \[parallel-1\] INFO  c.q.h.g.s.a.StateMachineAction - --------------------- Waiting for future state event\

一些搜索结果建议配置线程池来运行状态机实例,例如以下示例 (https://docs.spring.io/spring-statemachine/docs/current/reference/#statemachine-config-commonsettings),但是这样的选项看起来不适用于反应式异步状态机。

spring openshift threadpool reactive state-machine
© www.soinside.com 2019 - 2024. All rights reserved.