如果微服务是无状态的,那么我们如何在基于JSP的项目中管理会话。假设我正在将陈旧的独石打破为微服务。
答案 0 :(得分:0)
您无法在无状态服务器中管理会话。
您可以做的是将唯一令牌及其相应信息存储到Redis / MemCache中。
您需要在客户端中存储令牌而不是JSESSIONID。
答案 1 :(得分:0)
行业中大多数微服务实现都是通过HTTP进行通信的事实并不意味着微服务将被用作Web服务器。
微服务:
不必通过HTTP进行通信(尽管大多数实现是为了方便起见)
并不意味着接收网络浏览器发出的请求(尽管您可以使用网络浏览器向HTTP侦听微服务发出请求以对其进行测试)
肯定不是要生成包含可以在浏览器中呈现的HTML的响应。
由于这些原因,微服务通常没有会话的概念。
如果您绝对必须使微服务能够感知会话,并使其保持无状态(以便仍可以合法地称为微服务),那么每次请求到达时,都必须让其从持久性存储中获取所有必要的会话信息。 ,并在返回响应之前将更改后的所有内容保存回持久性存储中。但这不是微服务的工作原理。
通常,我们在网络上使用微服务的方式如下:
我们要么在运行着浏览器的JavaScript上维护会话状态,一边向微服务发出无会话请求,并在必要时包含身份验证信息[*]或
我们构建了一个传统的Web服务器,该服务器以传统方式维护会话状态,因此 不是 是微服务,并且我们让该Web服务器在内部发布无会话请求微服务以完成其工作。
脚注:
[*]请注意,我对许多人这样做的事实丝毫不表示赞同这种做法。