我有一组微服务,我们使用 zuul 从前端进行路由,作为使用 Spring Cloud 将 uri 上下文路径映射到特定微服务的一种方式。
在内部和外部,我们使用 spring OAuth2 并且效果很好。
但是,对于一项特定服务,出现了对 SAML 的要求,这对该服务提出了粘性会话要求。
是否有人考虑过这一点,以及为 zuul 提供粘性会话支持的正确方法是什么。
作为一种解决方法,直到我弄清楚这一点,我将一些请求从我们在前端的 HAProxy 直接路由到该服务。
我有一组微服务,我们使用 zuul 从前端进行路由,作为使用 Spring Cloud 将 uri 上下文路径映射到特定微服务的一种方式。
在内部和外部,我们使用 spring OAuth2 并且效果很好。
但是,对于一项特定服务,出现了对 SAML 的要求,这对该服务提出了粘性会话要求。
是否有人考虑过这一点,以及为 zuul 提供粘性会话支持的正确方法是什么。
作为一种解决方法,直到我弄清楚这一点,我将一些请求从我们在前端的 HAProxy 直接路由到该服务。
我假设如果您需要有多个后端的粘性会话,那么您必须使用功能区过滤器。粘性会话可以添加为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,您将不需要粘性会话。