Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 微服务中的会话管理_Java_Session_Cookies_Weblogic_Microservices - Fatal编程技术网

Java 微服务中的会话管理

Java 微服务中的会话管理,java,session,cookies,weblogic,microservices,Java,Session,Cookies,Weblogic,Microservices,我们有以下设置 STM(Stingrey流量管理器)进行负载平衡+会话粘性 Weblogic“群集” 由第三方工具处理的身份验证 因此,我不必担心与水平扩展/运行应用程序的多个实例有关的会话。STM/Weblogic群集确保后续请求到达同一托管服务器 我们目前拥有的是一个单片应用程序,我们正试图转向微服务。此外,我们不希望脱离当前的基础架构(即STM/Weblogic cluster/Auth tool)。我们的计划是: 将请求路由到其他微服务的网关战 每个功能子域的N x微服务(WAR) 只有

我们有以下设置

  • STM(Stingrey流量管理器)进行负载平衡+会话粘性
  • Weblogic“群集”
  • 由第三方工具处理的身份验证
  • 因此,我不必担心与水平扩展/运行应用程序的多个实例有关的会话。STM/Weblogic群集确保后续请求到达同一托管服务器

    我们目前拥有的是一个单片应用程序,我们正试图转向微服务。此外,我们不希望脱离当前的基础架构(即STM/Weblogic cluster/Auth tool)。我们的计划是:

  • 将请求路由到其他微服务的网关战
  • 每个功能子域的N x微服务(WAR)
  • 只有API网关接收用户请求,其他微服务无法从外部访问
  • 所以我的问题是

  • 当其他微设备处于无状态时,API网关是否应为状态已满
  • 如果是这样,API网关和微服务之间应该如何共享用户会话数据

  • 请提供更好的选择和资源/链接。谢谢。

    让我谈谈我的看法

    首先,如果您可以使应用程序保持无状态,请务必这样做:) 它将是性能和可扩展性方面的最佳解决方案

    现在,如果不可能,那么您应该维护一些分布式会话管理层

    负责身份验证的网关可以生成一些唯一的会话标识符,这些标识符稍后可以用作密钥。 这个密钥可以传播到所有的微服务,并成为API或其他东西的一部分

    为了访问会话,微服务可以通过键“获取”值并使用它

    在实现方面:我将看一看NoSQL解决方案。其中一些可以满足您的需要:

  • 。看看那边的“hset”
  • 。它更像是一个内存网格,但如果解决方案仅限于java,则还可以实现所需的功能
  • 。它将为您提供一张刚刚分发的旧地图:)
  • 我相信还有其他解决办法

    现在,性能在这里至关重要,否则整个解决方案将太慢。因此,在我的理解中,使用RDBMS在这里是不好的,而且可能更难扩展它

    希望这有助于

    1)当其他微服务处于无状态时,API网关的状态是否已满?

    是的,所有服务都应该是无状态的

    2)如果是这样,API网关和微服务之间应该如何共享用户会话数据?

    您的API应该是无状态的,因此不要将会话状态共享给微服务。建议的方法是设置Redis缓存来存储会话数据


    您使用的是分布式缓存吗?这就是我目前管理类似场景的方式。身份验证令牌进入缓存-当然,对于任何需要进入缓存的微服务都知道的缓存条目,您需要唯一的ID。谢谢@Nio。我不使用分布式缓存,但可以考虑。如何生成身份验证令牌?您需要安装OAuth服务器吗?另外,您使用的分布式缓存是什么?如果你有任何链接,请分享给我参考。Fahim,我使用memcached和Redis进行缓存。如果你不确定是哪个,我会选择Redis。管理身份验证令牌的方法有很多种。OAuth是一种标准化的方式,虽然它有一点学习曲线,让你的头脑围绕着赠款流,但它是一个值得在你的简历上。有很多用Java实现OAuth服务器的示例。你能分享一些链接以供参考吗?我已经解释了这个机制,我想,在任何情况下,快速谷歌搜索都会揭示这一点:这是: