REST 端点实例之间的通信
Communication between REST endpoint instances
客户端连接到 JAX-RS 端点以检索数据。此端点使用 EJB 访问数据库并执行逻辑,然后 returns 将数据发送到端点。
Client <----> Rest Endpoint <----> EJB
在将数据返回给客户端之前,我需要将数据传递给另一个端点实例(连接到此 Rest 端点的另一个客户端)。我想将其保留为 REST 服务,但我遇到了两个问题:
- REST 端点是无状态的。 因此没有会话与端点链接。但是,这可以通过 上下文注入 (效率不高)或传递 userID 作为参数来解决。
- 无通信方法。 有 WebSockets,但它如何帮助我在服务器上的会话之间进行通信?有 JMS,但据我了解,它适用于应用程序到应用程序,而不是会话。
我要问的是:有没有办法在不同的 REST(或 EJB)之间进行通信instances/sessions?如果可以,怎么做?
您必须将会话持久保存到某些外部存储(如 Redis),并在各个系统组件之间通过每个请求传递会话标识符。处理此类请求后,您可以从存储中加载会话状态并进行相应处理。
大多数 EJB/Servlet 容器都允许您打开会话持久性。
客户端连接到 JAX-RS 端点以检索数据。此端点使用 EJB 访问数据库并执行逻辑,然后 returns 将数据发送到端点。
Client <----> Rest Endpoint <----> EJB
在将数据返回给客户端之前,我需要将数据传递给另一个端点实例(连接到此 Rest 端点的另一个客户端)。我想将其保留为 REST 服务,但我遇到了两个问题:
- REST 端点是无状态的。 因此没有会话与端点链接。但是,这可以通过 上下文注入 (效率不高)或传递 userID 作为参数来解决。
- 无通信方法。 有 WebSockets,但它如何帮助我在服务器上的会话之间进行通信?有 JMS,但据我了解,它适用于应用程序到应用程序,而不是会话。
我要问的是:有没有办法在不同的 REST(或 EJB)之间进行通信instances/sessions?如果可以,怎么做?
您必须将会话持久保存到某些外部存储(如 Redis),并在各个系统组件之间通过每个请求传递会话标识符。处理此类请求后,您可以从存储中加载会话状态并进行相应处理。
大多数 EJB/Servlet 容器都允许您打开会话持久性。