为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

狐的传说 2021-12-18 15:43:31
如果微服务是无状态的,我们如何在基于 JSP 的项目中管理会话。假设我将古老的单体分解为微服务。
查看完整描述

2 回答

?
SMILET

TA贡献1796条经验 获得超4个赞

业界大多数微服务实现通过 HTTP 进行通信的事实并不意味着微服务旨在用作 Web 服务器。

一个微服务:

  1. 不必通过 HTTP 通信(尽管大多数实现都这样做,为了方便)

  2. 不打算接收由 Web 浏览器发出的请求(尽管您可以使用 Web 浏览器向侦听 HTTP 的微服务发出请求以对其进行测试)

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

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

如果你绝对必须让你的微服务会话感知,并保持它无状态(这样它仍然可以合法地称为微服务)那么你必须让它在每次请求到达时从你的持久性存储中获取所有必要的会话信息,并保存在返回响应之前,它的任何部分都已更改回持久性存储。但这不是微服务的工作方式。

一般我们在网络上使用微服务的方式是这样的:

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

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

脚注:

[*] 请注意,我承认许多人这样做并不代表对这种做法的认可。


查看完整回答
反对 回复 2021-12-18
?
森林海

TA贡献2011条经验 获得超2个赞

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

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

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


查看完整回答
反对 回复 2021-12-18
  • 2 回答
  • 0 关注
  • 195 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号