I play with a simple Spring Boot application which registers itself in Eureka and uses spring cloud configuration to read some properties.
Here it goes:
@SpringBootApplication
@EnableEurekaClient
public class Application {
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
}
Run Code Online (Sandbox Code Playgroud)
In bootstrap.yml I have:
eureka:
client:
serviceUrl:
defaultZone: http://registry-service:5051/eureka/
spring:
application:
name: product-service
cloud:
config:
discovery:
serviceId: config-service
enabled: true
fail-fast: true
retry:
initial-interval: 2000
Run Code Online (Sandbox Code Playgroud)
I have a rest controller for which I want to write a …
spring-test spring-boot spring-cloud-netflix spring-cloud-config
java spring spring-cloud netflix-eureka spring-cloud-netflix
我正面临着春云Zuul代理的问题.我配置,启动和运行两个微服务.我在我的网络浏览器中有一个cookie,我使用Zuul作为API网关,当我点击Zuul来调用我的后端时,Zuul没有将我的cookie转发到我的后端,似乎Zuul忽略了发送的cookie而我的后端是无法检索这个.
你能帮我解决这个问题吗?我正在使用Spring云Brixton.RELEASE和spring boot 1.3.5
问候.
我想使用Zuul作为我正在使用的一些REST服务的代理.我的问题是:因为我将它作为Spring Boot应用程序运行,有没有办法为高可用性配置它?
编辑:我是否需要在支持HA的应用服务器中部署我的应用程序?
spring spring-boot spring-cloud netflix-zuul spring-cloud-netflix
感谢您的时间.为简单起见,我创建了一个示例服务,如下所示:
@RestController
@RequestMapping("/")
public class ComputeController {
@GetMapping("/add")
public int add(@RequestParam("left") int left, @RequestParam("right") int right) {
return left + right;
}
}
Run Code Online (Sandbox Code Playgroud)
为了保护这个URL,我像这样配置spring-security:
management.security.enabled=true
security.user.name=admin
security.user.password=admin
Run Code Online (Sandbox Code Playgroud)
当我启动此服务并访问如下:
GET /add?left=100&right=11 HTTP/1.1
Authorization: ***** Hidden credentials *****
Host: localhost:7777
Connection: close
Run Code Online (Sandbox Code Playgroud)
这一切都很顺利.
在其他节点中,我通过netflix feign创建了一个"service-comsumer".这是一个Java接口.
@FeignClient(name = "API-GATEWAY", path = "/compute-service", fallback = ComputeServiceCircuitBreaker.class)
public interface ComputeServiceClient {
@RequestMapping(path = "/add", method = RequestMethod.GET)
public Integer add(@RequestParam("left") Integer left, @RequestParam("right") Integer right);
}
Run Code Online (Sandbox Code Playgroud)
但我不知道如何配置请求标题"授权".
任何的想法?再次感谢.
当我访问应用程序的/ env端点时,Spring Cloud Config Server接受多个配置文件并返回所有配置文件的属性.响应列出了特定于每个配置文件的属性.如果2个不同的属性文件中存在相同的属性,则最后定义的属性优先.有没有办法获得应用程序将使用的属性键和值的最终列表?
我正在尝试一个与图像中详细描述的设置非常相似的设置:https://raw.githubusercontent.com/Oreste-Luci/netflix-oss-example/master/netflix-oss-example.png
在我的设置中,我使用的是客户端应用程序(https://www.joedog.org/siege-home/),代理(Zuul),发现服务(Eureka)和简单的微服务.一切都部署在PWS上.
我想从我的简单微服务的一个版本迁移到下一个版本,没有任何停机时间.最初我开始使用这里描述的技术:https://docs.cloudfoundry.org/devguide/deploy-apps/blue-green.html
在我看来,这种方法与Eureka等发现服务并不"兼容".实际上,我的服务的新版本在Eureka中注册并且甚至在我可以重新映射所有路由(CF路由器)之前接收流量.
这引出了另一种方法,我依赖于Spring Cloud/Netflix中的故障转移机制:
据我所知,Zuul在引擎盖下使用了Ribbon(负载均衡),所以在旧实例仍然在Eureka但实际上关闭的那一瞬间,我期望在新实例上重试而不会对客户端产生任何影响.
但是,我的假设是错误的.我的客户端出现了几个502错误:
Lifting the server siege... done.
Transactions: 5305 hits
Availability: 99.96 %
Elapsed time: 59.61 secs
Data transferred: 26.06 MB
Response time: 0.17 secs
Transaction rate: 89.00 trans/sec
Throughput: 0.44 MB/sec
Concurrency: 14.96
Successful transactions: 5305
Failed transactions: 2
Longest transaction: 3.17
Shortest transaction: 0.14
Run Code Online (Sandbox Code Playgroud)
我的application.yml的一部分
server:
port: ${PORT:8765}
info:
component: proxy
ribbon:
MaxAutoRetries: 2 # Max number of retries …Run Code Online (Sandbox Code Playgroud) blue-green-deployment spring-cloud pivotal-cloud-foundry spring-cloud-netflix
看来Hystrix 的生命周期已接近尾声,而 Netflix 堆栈现在已经有点过时了。
我们正在为一个全新的项目构建一个堆栈,我们需要一个断路器,我们的默认选择是 Hystrix,因为它是众所周知的并且受到团队的赞赏。
如今Hystrix已完全集成到Spring Cloud中,是否有计划很快将其删除?
我正在使用Spring云Brixton.RC2,与Zuul和Eureka一起使用.
我有一个网关服务@EnableZuulProxy和book-service一个status方法.通过配置,我可以status通过休眠一段规定的时间来模拟方法的工作.
Zuul路线很简单
zuul.routes.foos.path=/foos/**
zuul.routes.foos.serviceId=reservation-service
Run Code Online (Sandbox Code Playgroud)
我运行了两个实例book-service.当我将休眠时间设置为低于Hystrix超时阈值(1000毫秒)时,我可以看到请求同时发送到图书服务的两个实例.这很好用.
据我所知,如果Hystrix命令失败,Ribbon应该可以在另一台服务器上重试该命令.这应该使故障对客户端透明.
我阅读了Ribbon配置并在Zuul中添加了以下配置:
zuul.routes.reservation-service.retryable=true //not sure which one to try
zuul.routes.foos.retryable=true //not sure which one to try
ribbon.MaxAutoRetries=0 // I don't want to retry on the same host, I also tried with 1 it doesn't work either
ribbon.MaxAutoRetriesNextServer=2
ribbon.OkToRetryOnAllOperations=true
Run Code Online (Sandbox Code Playgroud)
现在我更新配置,以便只有一个服务睡眠时间超过1秒,这意味着我有一个健康服务,一个健康服务.
当我调用网关时,调用会发送到两个实例,一半调用返回500.在网关中,我看到Hystrix超时:
com.netflix.zuul.exception.ZuulException: Forwarding error
[...]
Caused by: com.netflix.hystrix.exception.HystrixRuntimeException: reservation-service timed-out and no fallback available.
[...]
Caused by: java.util.concurrent.TimeoutException: null
Run Code Online (Sandbox Code Playgroud)
为什么Ribbon不会在另一个实例上重试调用?
我在这里想念什么吗?
hystrix spring-cloud netflix-zuul netflix-ribbon spring-cloud-netflix
我试过WebClient用LoadBalancerExchangeFilterFunction:
WebClient 配置:
@Bean
public WebClient myWebClient(final LoadBalancerExchangeFilterFunction lbFunction) {
return WebClient.builder()
.filter(lbFunction)
.defaultHeader(ACCEPT, APPLICATION_JSON_VALUE)
.defaultHeader(CONTENT_ENCODING, APPLICATION_JSON_VALUE)
.build();
}
Run Code Online (Sandbox Code Playgroud)
然后我注意到对底层服务的调用没有正确地进行负载平衡 - 每个实例上的RPS存在恒定的差异.
然后我试着回去RestTemplate.它工作正常.
配置RestTemplate:
private static final int CONNECT_TIMEOUT_MILLIS = 18 * DateTimeConstants.MILLIS_PER_SECOND;
private static final int READ_TIMEOUT_MILLIS = 18 * DateTimeConstants.MILLIS_PER_SECOND;
@LoadBalanced
@Bean
public RestTemplate restTemplateSearch(final RestTemplateBuilder restTemplateBuilder) {
return restTemplateBuilder
.errorHandler(errorHandlerSearch())
.requestFactory(this::bufferedClientHttpRequestFactory)
.build();
}
private ClientHttpRequestFactory bufferedClientHttpRequestFactory() {
final SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
requestFactory.setConnectTimeout(CONNECT_TIMEOUT_MILLIS);
requestFactory.setReadTimeout(READ_TIMEOUT_MILLIS);
return new BufferingClientHttpRequestFactory(requestFactory);
} …Run Code Online (Sandbox Code Playgroud) load-balancing resttemplate spring-cloud spring-cloud-netflix spring-webflux
spring-cloud ×6
spring-boot ×5
netflix-zuul ×3
spring ×3
hystrix ×2
cookies ×1
java ×1
resttemplate ×1
spring-test ×1