【问题标题】:Sticky Sessions and Zuul in Spring CloudSpring Cloud 中的粘性会话和 Zuul
【发布时间】:2015-05-26 21:42:50
【问题描述】:

我有一组微服务,我们使用 zuul 从前端进行路由,作为使用 Spring Cloud 将 uri 上下文路径映射到特定微服务的一种方式。

我们在内部和外部都使用 spring OAuth2 并且效果很好。

但是,对于一项特定服务,出现了对 SAML 的要求,这对该服务提出了粘性会话要求。

是否有人考虑过这一点,以及为 zuul 提供粘性会话支持的正确方法是什么。

作为一种解决方法,直到我弄清楚这一点,我将一些请求从我们在前端的 HAProxy 直接路由到该服务。

【问题讨论】:

    标签: spring-security spring-cloud netflix-zuul


    【解决方案1】:

    我假设如果您需要有多个后端的粘性会话,那么您必须使用功能区过滤器。粘性会话可以添加为IRule,例如

    @RibbonClient(value="myui", configuration=UiRibbonConfiguration.class)
    public class UiRibbonConfiguration {
      @Bean
      public IRule loadBalancerRule() {
        return new MyStickySessionRule();
      }
    }
    

    加上一个ZuulFilter(或后端中的一个servlet Filter),它为关联添加一个cookie - 每个后端实例必须唯一标识自己,然后在MyStickySessionRule 中你必须查看传入的cookie决定将请求发送到哪个实例(例如,如果后端是 Spring Boot 应用程序,您可以将“X-Application-Context”标头值作为 cookie 发送)。

    注意如果您可以在后端使用 Spring Session,您将不需要粘性会话。

    【讨论】:

    • 谢谢,我现在正在看 Spring Session。现在要弄清楚如何让 Spring SAML 使用它。 :)
    • 应该是透明的。
    • 大家好,问题解决了吗?你能分享解决方案吗? (最好有完整的代码:)
    • 嗨 Tomasz,我们最终使用了 Spring Session,这是一个更好的使用解决方案。然后我不必担心实施粘性会话。我确实研究了如何使用规则来做到这一点,它看起来并不难。
    • 如果有人感兴趣,我使用@DaveSyer 的建议为粘性会话实现了 IRule:github.com/alejandro-du/vaadin-microservices-demo/blob/master/…
    猜你喜欢
    • 2017-09-29
    • 2018-11-18
    • 2012-05-16
    • 2011-09-16
    • 2019-09-24
    • 2016-07-25
    • 1970-01-01
    • 2018-08-23
    相关资源
    最近更新 更多