【问题标题】:How to handle global resources in Spring State Machine?Spring State Machine中如何处理全局资源?
【发布时间】:2016-11-28 19:12:11
【问题描述】:

我正在考虑将 Spring 状态机用于 TCP 客户端。协议本身是基于具有消息 id 和长度字段的专有 TCP 消息给出的。客户端建立与服务器的 TCP 连接,发送一条消息,并在发送下一条消息之前始终等待响应。在每个州,只允许某些响应。多个客户端必须并行运行。

现在我有以下与 Spring State machine 相关的问题。

1) 在从断开连接到连接的初始转换期间,客户端通过 java.net.Socket 建立连接。如何使此套接字(或从套接字获取的 DataOutputStream 和 BufferedReader 对象)可用于其他转换的操作?

从这个意义上说,套接字是状态机的某种全局资源。到目前为止,我看到的唯一方法是将它放在邮件标题中。但这看起来不太自然。

2) Spring State Machine 需要哪个运行时环境?

JVM 够用还是需要 Tomcat?

它是线程安全的吗?

谢谢,沃尔夫冈

【问题讨论】:

    标签: spring-statemachine


    【解决方案1】:
    1. 使用事件标头没有什么问题,但这些并不是真正的全局资源,因为标头仅在事件处理期间存在。我会尝试将所需的对象添加到机器的 extended state 中,然后可用于所有操作。
    2. 您只需要 JVM。默认机器执行是同步的,所以不应该有任何线程问题。如果你想替换底层的异步执行器,文档会有注释(如果使用多个并发区域,通常会这样做)。

    【讨论】:

    • 您好 Janne,感谢您的回复。事实上,对于全局资源,我在摆姿势后不久就切换到使用扩展状态。这按预期工作。最好的问候,沃尔夫冈
    猜你喜欢
    • 2017-07-23
    • 2021-08-19
    • 2018-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-29
    • 2017-03-23
    • 2021-09-18
    相关资源
    最近更新 更多