是否可以将代理设置到主服务器/服务器/服务,但如果没有,则将请求重定向到辅助服务器/服务器/服务?
辅助服务不是主服务的同一类型的实例。它们的API是兼容的,但并不相同。当主资源不可用时,次要资源是性能较差的最后一个资源。
我们不使用尤里卡,只有固定的IP。
zuul:
routes:
whatever:
path: /whatever/**
sensitiveHeaders: Cookie,Set-Cookie
url: http://server1:8080/whatever我看了一下ZuulFallbackProvider,但是这个接口是在错误情况下提供一个固定的响应。我希望,当http://server1:8080/whatever没有响应时,重定向到http://server2:8080/whateverApi2。
谢谢。
发布于 2017-08-16 09:25:08
如果有人试图做类似的事情,那么实际工作的是Hystrix,而不是Zuul组件。
在Gateway API中,我们创建了一个facade控制器,该控制器响应我们希望设置回退解决方案的服务:
@HystrixCommand(fallbackMethod = "fallbackWhatever")
@PostMapping
ResponseEntity<Object> whatever(final RequestEntity<?> request) {
return defaultClient.searchSubmissions(request.getHeaders(), request.getBody());
}
ResponseEntity<Object> fallbackWhatever(final RequestEntity<?> request) {
return fallbackClient.searchSubmissions(request.getHeaders(), request.getBody());
}defaultClient和fallbackClient是两个不同的FeignClient接口,每个接口指向每个服务端点。
就这样!如果关闭主服务,Gateway API将开始调用回退服务,而不会返回一个不可用的服务,更改只需几毫秒。
另外,如果你把它打开,它就会在准备好几毫秒后返回响应。
发布于 2017-06-20 02:33:05
您可以使用ZuulFallbackProvider来实现这一点,但是您需要首先配置下面的内容。
首先,在Zuul中直接在zuul.routes.<service>.url中指定url的url路由在HystrixCommand中没有执行.要实现这一点,您需要像下面这样更改您的配置。
zuul:
routes:
whatever:
path: /whatever/**
sensitiveHeaders: Cookie,Set-Cookie
serviceId: whatever
stripPrefix: false
ribbon:
eureka:
enabled: false
whatever:
ribbon:
listOfServers: http://server1:8080/上面的配置使用的是没有eureka的丝带。你可以找到detais 这里
现在,您的请求将通过丝带在HystrixCommand中执行。这样您就可以提供自己的ZuulFallbackProvider。
在ZuulFallbackProvider中,您可以在fallbackResponse方法中向http://server2:8080/whateverApi2.发出回退请求,如下所示。下面是一个非常天真的例子。-为了自己的目的,你需要完成以下例子。
@Component
public class TestZuulFallbackProvider implements ZuulFallbackProvider{
@Override
public String getRoute() {
return "test";
}
@Override
public ClientHttpResponse fallbackResponse() {
ResponseEntity<String> response = new RestTemplate().exchange("http://server2:8080/whateverApi2", HttpMethod.GET, null, String.class);
return new ClientHttpResponse() {
@Override
public HttpStatus getStatusCode() throws IOException {
return response.getStatusCode();
}
@Override
public int getRawStatusCode() throws IOException {
return response.getStatusCodeValue();
}
@Override
public String getStatusText() throws IOException {
return response.getStatusCode().getReasonPhrase();
}
@Override
public void close() {
}
@Override
public InputStream getBody() throws IOException {
return new ByteArrayInputStream(response.getBody().getBytes("UTF-8"));
}
@Override
public HttpHeaders getHeaders() {
return response.getHeaders();
}
};
}
}发布于 2020-08-26 12:01:51
需要添加可还原
zuul:
routes:
whatever:
path: /whatever/**
sensitiveHeaders: Cookie,Set-Cookie
url: http://server1:8080/whatever
retryable=true相似情况
https://stackoverflow.com/questions/44632767
复制相似问题