标签: netflix-zuul

为什么ZUUL强制执行SEMAPHORE隔离以执行其Hystrix命令?

我注意到Spring-Cloud ZUUL强制执行隔离到SEMAPHORE而不是THREAD默认值(根据Netflix的推荐).

评论org.springframework.cloud.netflix.zuul.filters.route.RibbonCommand说:

我们希望默认为信号量隔离,因为这包含了另外两个已经线程隔离的命令

但我仍然没有得到它:-(那两个其他命令是什么?

以这种方式配置,Zuul只能调整加载但不允许超时并让客户端离开.简而言之,即使Hystrix超时设置为1000毫秒,只有在转发到链中的服务的调用返回时(或者由于例如ReadTimeout而超时),才会释放客户端.

我试图通过覆盖配置强制THREAD隔离(不幸的是,每个服务,因为在代码中强制默认),一切似乎按预期工作.但是,如果没有正确理解其含义,我并不热衷于这样做 - 当然关于代码中的注释以及Spring的Zuul版本采用的默认值.

有人可以提供更多信息吗?谢谢

spring-cloud netflix-zuul

11
推荐指数
1
解决办法
5916
查看次数

如何在Zuul后置滤波器中获得响应体?

post过滤器中使用Zuul作为代理时如何读取响应主体?

我试图像这样调用代码:

@Component
public class PostFilter extends ZuulFilter {

    private static final Logger log = LoggerFactory.getLogger(PostFilter.class);

    @Override
    public String filterType() {
        return "post";
    }

    @Override
    public int filterOrder() {
        return 2000;
    }

    @Override
    public boolean shouldFilter() {
        return true;
    }

    @Override
    public Object run() {
        RequestContext ctx = RequestContext.getCurrentContext();
        ctx.getResponseBody(); // null

        // cant't do this, cause input stream is used later in other filters and I got InputStream Closed exception
        // GZIPInputStream gzipInputStream = new GZIPInputStream(stream);
        return …
Run Code Online (Sandbox Code Playgroud)

java proxy netflix-zuul

11
推荐指数
2
解决办法
1万
查看次数

Zuul Proxy无法路由,导致com.netflix.zuul.exception.ZuulException:转发错误

我有简单的服务:

transactions-core-service和transactions-api-service.

transactions-api-service调用transactions-core-service来返回事务列表.使用hystrix命令启用transactions-api-service.

两者都在以下服务ID的Eureka服务器中注册:

TRANSACTIONS-API-SERVICE    n/a (1) (1) UP (1) - 192.168.2.12:transactions-api-service:8083
TRANSACTIONS-CORE-SERVICE   n/a (1) (1) UP (1) - 192.168.2.12:transactions-core-service:8087
Run Code Online (Sandbox Code Playgroud)

以下是Zuul服务器:

@SpringBootApplication

@Controller

@EnableZuulProxy

public class ZuulApplication {

    public static void main(String[] args) {
        new SpringApplicationBuilder(ZuulApplication.class).web(true).run(args);
    }
}
Run Code Online (Sandbox Code Playgroud)

Zuul配置:

===============================================

info:
  component: Zuul Server

server:
  port: 8765

endpoints:
  restart:
    enabled: true
  shutdown:
    enabled: true
  health:
    sensitive: false

zuul:
  ignoredServices: "*"
  routes:
    transactions-api-service: 
    path: transactions/accounts/**
    serviceId: transactions-api-service

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

logging:
  level:
    ROOT: INFO
    org.springframework.web: DEBUG

===============================================
Run Code Online (Sandbox Code Playgroud)

当我尝试使用url(http://localhost:8765/transactions/accounts/123/transactions/786 …

netflix-zuul

11
推荐指数
3
解决办法
4万
查看次数

Spring Cloud Zuul不转发cookie

我正面临着春云Zuul代理的问题.我配置,启动和运行两个微服务.我在我的网络浏览器中有一个cookie,我使用Zuul作为API网关,当我点击Zuul来调用我的后端时,Zuul没有将我的cookie转发到我的后端,似乎Zuul忽略了发送的cookie而我的后端是无法检索这个.

你能帮我解决这个问题吗?我正在使用Spring云Brixton.RELEASE和spring boot 1.3.5

问候.

cookies spring-boot netflix-zuul spring-cloud-netflix

11
推荐指数
2
解决办法
8760
查看次数

如何使Spring Zuul High可用?

我想使用Zuul作为我正在使用的一些REST服务的代理.我的问题是:因为我将它作为Spring Boot应用程序运行,有没有办法为高可用性配置它?

编辑:我是否需要在支持HA的应用服务器中部署我的应用程序?

spring spring-boot spring-cloud netflix-zuul spring-cloud-netflix

11
推荐指数
1
解决办法
2313
查看次数

微服务到微服务呼叫,来自队列消息的授权

背景:我正在创建一个支持SSO的多个应用程序的云平台.我正在使用Keycloak进行身份验证,使用Netflix Zuul通过Keycloak Spring Security Adapter 进行授权(API Gateway).

每个微服务都需要一个Authorization标头,其中包含一个有效的JWT,它将从中获取用户名(sub)来处理请求.每个微服务到微服务调用应首先通过Netflix Zuul,传递Authorization标头以维持无状态验证.该策略允许每个微服务器知道谁是间接调用微服务的用户(子).

问题/问题1:如果从队列消息中调用微服务会发生什么?我的一个想法是在队列中存储与消息+ userInfo相关的信息,并创建一个专用的微服务来处理这种消息,这种特殊的微服务应该从队列中读取userInfo并处理消息.

更新1:根据另一个论坛的电子邮件回复,将JWT存储在队列中并不是一个好主意,因为它可以轻松挖掘.

问题/问题2:但是,如果之前的特殊微服务想要调用另一个期望在头中接收JWT的普通微服务会发生什么?这个特殊的微服务是否应该由他自己创建一个JWT模仿用户并能够调用常规的微服务?

我认为另一种解决方案是将原始JWT存储在队列中,但是,如果队列稍后调用特殊微服务会发生什么?就在JWT不再有效(它已过期)之后,被调用的微服务将拒绝该请求?

可能的解决方案:(根据JoãoAngelo的讨论更新,见下文)

我应该验证来自我的用户(授权代码流)和我的服务(客户端凭证授权)的请求,这两个请求都应该包含有效负载中的用户信息.当请求来自用户时,我需要验证有效负载用户信息是否与JWT声明匹配.当请求来自服务时,我只需要信任该服务(只要它在我的控制之下).

我非常感谢你的帮助.谢谢.

spring-security jwt microservices keycloak netflix-zuul

11
推荐指数
1
解决办法
1792
查看次数

负载均衡器没有可用于客户端的服务器:会议

当我试图meeting通过Zuul网关到达服务时,Zuul无法将请求转发给相应的服务.以下错误是我面临的问题:

  1. nettflix.zuul.exception.ZuulException:转发错误
  2. 引起:com.netflix.client.ClientException:负载均衡器没有可用于客户端的服务器:会议

让我分享服务,eureka和zuul网关的application.yml.

EurekaClient: Application.yml

server:
  port: 8761

eureka:
  instance:
    hostname: localhost
    lease-renewal-interval-in-seconds: 300
  client:
    register-with-eureka: false
    fetch-registry: true
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
Run Code Online (Sandbox Code Playgroud)

ZuulGateWay: application.yml

server:
  port: 8085

spring:
  application:
    name: gatekeeper


zuul:
  routes:
    meeting: /meeting/**
    serviceId: meeting

ribbon:
  eureka:
    enabled: false

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/
Run Code Online (Sandbox Code Playgroud)

ZuulGateWay: SpringBootApplication

package com.sagarp.gatekeeper;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;

@SpringBootApplication
@EnableEurekaClient
@EnableZuulProxy
public class MeetingApplication {

    public static void main(String[] args) {
        SpringApplication.run(MeetingApplication.class, args);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的服务类(会议): Application.yml …

java spring-boot microservices netflix-eureka netflix-zuul

11
推荐指数
1
解决办法
6086
查看次数

Spring Boot + Cloud | Zuul代理| 集成测试

使用Spring Boot构建微服务时,很容易编写广泛且易读的集成测试并模拟远程服务请求MockRestServiceServer.

有没有办法使用类似的方法来执行额外的集成测试ZuulProxy?我想要实现的是能够模拟远程服务器,ZuulProxy这些服务器将转发并验证我ZuulFitler的所有操作符合预期.但是,ZuulProxy是否正在使用RestClientNetflix(它似乎被弃用?),它自然不会使用RestTemplate哪些可以重新配置MockRestServiceServer,我目前无法找到一种很好的方法来模拟远程服务对代理请求的响应.

我有一个微服务,负责处理API会话密钥创建,然后将采取类似于API网关的行为.使用Zuul Proxy对底层公开的服务进行转发,Zuul Filters将检测Session密钥是否有效.因此,集成测试将创建有效会话,然后转发到虚假端点,例如"集成/测试".

通过设置配置属性@WebIntegrationTest,可以指定"集成/测试"是新端点,我可以成功模拟通过RestTemplate但不是Zuul转发处理的所有服务.

实现模拟远期目标服务的最佳方法是什么?

java integration-testing spring-boot spring-cloud netflix-zuul

10
推荐指数
1
解决办法
2576
查看次数

在Zuul代理后面的Spring重定向url问题

在过去的两天里,我一直试图找到一个奇怪的重定向问题,但没有成功.

基于spring-cloud示例项目,我已经配置了Eureka,Zuul以及在Zuul后面运行的基本服务.

我有以下方法;

@RequestMapping(method = RequestMethod.POST, value = "/register")
public String registerDevice(Principal principal, String response) {
  // ...
  return "redirect:/account";
}
Run Code Online (Sandbox Code Playgroud)

表单设置为发布到代理URL,如下所示;

POST https://localhost:8443/service/register
Run Code Online (Sandbox Code Playgroud)

(Zuul在localhost上运行:8443).

本地服务的URL(非代理)将是; HTTP://本地主机:9001 /寄存器

POST调用正确代理到上述方法,但是发送到浏览器的重定向位置是服务的非代理URL; HTTP://本地主机:9001 /帐户

Zuul代理肯定会发送正确的x-forwarded-*头文件,所以我希望Spring中的视图解析器能够根据x-forwarded值构建正确的重定向.

为了证明标头被正确发送,我重新配置了如下方法;

@RequestMapping(method = RequestMethod.POST, value = "/register")
public void registerDevice(Principal, String response, HttpServletResponse response) {
  // ...
  String rUrl = ServletUriComponentsBuilder.fromCurrentContextPath().path("/account").build().toUriString();
  servletResponse.sendRedirect(rUrl);
}
Run Code Online (Sandbox Code Playgroud)

这正确地将浏览器重定向到代理位置; https://开头本地主机:8443 /服务/帐户

这是一个错误,还是预期的行为?我认为使用"redirect:"是为了纪念从代理传递的前向头.

spring-mvc spring-boot spring-cloud netflix-eureka netflix-zuul

10
推荐指数
1
解决办法
5622
查看次数

如何在Kubernetes中选择API网关?

我们在微服务场景中使用 Zuul 作为 API 网关已经有一段时间了,最​​近我们决定迁移到 Kubernetes 并选择一种更加云原生的方式。

经过一番调查和阅读 Istio 文档,我们对 Kubernetes 中的 API 网关选择有一些疑问:

  • 在Kubernetes中选择API网关应该考虑哪些方面?
  • 如果我们使用 Istio,我们还需要 Zuul 吗?

kubernetes netflix-zuul istio api-gateway

10
推荐指数
1
解决办法
9878
查看次数