在无状态微服务中管理会话

时间:2018-10-30 03:30:02

标签: java microservices

如果微服务是无状态的,那么我们如何在基于JSP的项目中管理会话。假设我正在将陈旧的独石打破为微服务。

2 个答案:

答案 0 :(得分:0)

您无法在无状态服务器中管理会话。

您可以做的是将唯一令牌及其相应信息存储到Redis / MemCache中。

您需要在客户端中存储令牌而不是JSESSIONID。

答案 1 :(得分:0)

行业中大多数微服务实现都是通过HTTP进行通信的事实并不意味着微服务将被用作Web服务器。

微服务:

  1. 不必通过HTTP进行通信(尽管大多数实现是为了方便起见)

  2. 并不意味着接收网络浏览器发出的请求(尽管您可以使用网络浏览器向HTTP侦听微服务发出请求以对其进行测试)

  3. 肯定不是要生成包含可以在浏览器中呈现的HTML的响应。

由于这些原因,微服务通常没有会话的概念。

如果您绝对必须使微服务能够感知会话,并使其保持无状态(以便仍可以合法地称为微服务),那么每次请求到达时,都必须让其从持久性存储中获取所有必要的会话信息。 ,并在返回响应之前将更改后的所有内容保存回持久性存储中。但这不是微服务的工作原理。

通常,我们在网络上使用微服务的方式如下:

  1. 我们要么在运行着浏览器的JavaScript上维护会话状态,一边向微服务发出无会话请求,并在必要时包含身份验证信息[*]或

  2. 我们构建了一个传统的Web服务器,该服务器以传统方式维护会话状态,因此 不是 是微服务,并且我们让该Web服务器在内部发布无会话请求微服务以完成其工作。

脚注:

[*]请注意,我对许多人这样做的事实丝毫不表示赞同这种做法。