标签: spring-cloud-netflix

Zuul/Ribbon/Hystrix没有在不同的实例上重试

背景

我正在使用Spring云Brixton.RC2,与Zuul和Eureka一起使用.

我有一个网关服务@EnableZuulProxybook-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

9
推荐指数
1
解决办法
3278
查看次数

Spring Cloud Netflix 与 Kubernetes

我试图最终在 Spring Cloud Netflix、Kubernetes 和 Swarm 之间进行选择来构建我们的微服务环境。他们都非常酷,做一些选择是非常困难的。我会稍微描述一下我想要解决的问题。我找不到任何使用 Kubernetes 或 Swarm 设计 Api Gateway(不是简单的负载均衡器)的最佳方法,这就是我想使用 Zuul 的原因。但是从另一方面来说,Api 网关必须使用服务发现,在 Kubernetes 或 Swarm 的情况下,它将被嵌入到管弦乐队中。有了 Kubernetes,我可以使用它的 Spring Cloud 集成,但是这样我将在 Kubernetes 内部进行服务器端发现和客户端发现。我认为这是矫枉过正。我想知道是否有人对他们有一些经验以及对此有任何建议。谢谢。

kubernetes microservices docker-swarm netflix-zuul spring-cloud-netflix

9
推荐指数
1
解决办法
8362
查看次数

@EnableFeignClients和@FeignClient在自动装配'FeignContext'时失败NoSuchBeanException

我正在编写的微服务需要与我们平台中的其他微服务进行通信.在那次尝试中,我们的理想解决方案是Spring Cloud Netflix Feign,实现了一个@FeignClient.

但是,当我尝试以下时,我正面临以下例外@Autowired ReviewProvider:

例外(原因)

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.cloud.netflix.feign.FeignContext' available
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:353)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:351)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:340)
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1093)
    at org.springframework.cloud.netflix.feign.FeignClientFactoryBean.getObject(FeignClientFactoryBean.java:155)
    at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:168)
Run Code Online (Sandbox Code Playgroud)

ReviewProvider.java

@FeignClient("http://metadata-reviews")
public interface ReviewProvider {

    @RequestMapping(path = "sessions", method = POST)
    ReviewSessionDTO createSession();

}
Run Code Online (Sandbox Code Playgroud)

ReviewProvider.java

@RunWith(SpringRunner.class)
@ActiveProfiles(INTEGRATION)
@ContextConfiguration(classes = AppEntry.class)
@AutoConfigureTestDatabase(replace = Replace.NONE)
@DataJpaTest
public class ReviewProviderTest {

    @Autowired
    private ReviewProvider provider;
    private Class<? extends ReviewProvider> providerClass;

    @Before
    public void setup() {
        providerClass = …
Run Code Online (Sandbox Code Playgroud)

java spring-boot spring-cloud-feign feign spring-cloud-netflix

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

带有webclient的功能区负载均衡器与其余模板不同(未正确平衡)

我试过WebClientLoadBalancerExchangeFilterFunction:

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

9
推荐指数
1
解决办法
1264
查看次数

如何使用Spring Cloud Netflix Feign设置自定义Jackson ObjectMapper

我遇到了需要为第三方API定义一次性@FeignClient的场景.在这个客户端中,我想使用与我的@Primary不同的自定义Jackson ObjectMapper.我知道可以覆盖spring的feign配置默认值,但是我不清楚如何只是通过这个特定的客户端简单地覆盖ObjectMapper.

spring spring-mvc spring-cloud feign spring-cloud-netflix

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

spring eureka security 批量更新失败,HTTP 状态码为 401

我研究 spring cloud eureka,cloud 并且它们工作得很好。但是在eureka服务中添加了安全性后,却遇到了一些错误。

所有代码和错误细节都在https://github.com/keryhu/eureka-security

eureka 服务 application.yml

security:
  user:
    name: user
    password: password

eureka: 
  client:
    registerWithEureka: false
    fetchRegistry: false
  server:
    wait-time-in-ms-when-sync-empty: 0 
Run Code Online (Sandbox Code Playgroud)

和 config-service application.java

@SpringBootApplication
@EnableConfigServer
@EnableDiscoveryClient
Run Code Online (Sandbox Code Playgroud)

配置服务应用程序.yml

eureka:
  client:
    registry-fetch-interval-seconds: 5
    serviceUrl:
       defaultZone: http://user:password@${domain.name:localhost}:8761/eureka/

spring:  
  cloud:
     config:
       server:
         git:
           uri: https://github.com/spring-cloud-samples/config-repo
           basedir: target/config 
Run Code Online (Sandbox Code Playgroud)

启动config-service后有错误导出:

2016-04-10 11:22:39.402 ERROR 80526 --- [get_localhost-3] c.n.e.cluster.ReplicationTaskProcessor   : Batch update failure with HTTP status code 401; discarding 1 replication tasks
2016-04-10 11:22:39.402  WARN 80526 --- [get_localhost-3] c.n.eureka.util.batcher.TaskExecutors    : Discarding 1 tasks …
Run Code Online (Sandbox Code Playgroud)

spring spring-security spring-cloud netflix-eureka spring-cloud-netflix

8
推荐指数
1
解决办法
4307
查看次数

如何通过Spring Cloud Feign发送POST请求

这是我的Feign界面

@FeignClient(
        name="mpi",
        url="${mpi.url}",
        configuration = FeignSimpleEncoderConfig.class
)
public interface MpiClient {

    @RequestMapping(method = RequestMethod.POST)
    public ResponseEntity<String> getPAReq(@QueryMap Map<String, String> queryMap
    );
}
Run Code Online (Sandbox Code Playgroud)

和我的自定义配置

public class FeignSimpleEncoderConfig {
    public static final int FIVE_SECONDS = 5000;

    @Bean
    public Logger.Level feignLogger() {
        return Logger.Level.FULL;
    }

    @Bean
    public Request.Options options() {
        return new Request.Options(FIVE_SECONDS, FIVE_SECONDS);
    }

    @Bean 
    @Scope("prototype")
    public Feign.Builder feignBuilder() {
        return Feign.builder()
                .encoder(new FormEncoder());
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我发送这样的请求,我会看到我的请求发送Content-Type:application / json; charset = UTF-8。但是如果我设置内容类型

consumes = "application/x-www-form-urlencoded"
Run Code Online (Sandbox Code Playgroud)

我收到此错误消息

feign.codec.EncodeException: Could not write request: …
Run Code Online (Sandbox Code Playgroud)

netflix-feign spring-cloud-feign spring-cloud-netflix

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

Spring Cloud Feign非阻塞I/O或异步调用

我正在使用Spring云平台开发微服务,其中service1调用多个其他微服务,例如service2,service3,service 4等.这些服务可以并行调用,service1将聚合结果.我可以使用Spring cloud feign(http://cloud.spring.io/spring-cloud-static/Dalston.SR1/#spring-cloud-feign)生成rest客户端并异步调用服务,还是应该使用Spring 4 AsyncRestTemplate异步调用服务?

spring spring-cloud-feign spring-cloud-netflix

8
推荐指数
1
解决办法
6571
查看次数

Spring Cloud Config Server无法与Docker一起使用

我有一个spring cloud配置服务器并将其打包为docker镜像,然后我也有spring cloud eureka服务器也打包为docker镜像。

当我使用docker compose运行两者时,出现以下错误。

discovery-service_1 | 2017-06-24 15:36:12.059 INFO 5 --- [ main] c.c.c.ConfigServicePropertySourceLocator : Fetching config from server at: http://config-service:9001 discovery-service_1 | 2017-06-24 15:36:12.997 WARN 5 --- [ main] c.c.c.ConfigServicePropertySourceLocator : Could not locate PropertySource: I/O error on GET request for "http://config-service:9001/cls-discovery-service/default": Connection refused (Connection refused); nested exception is java.net.ConnectException: Connection refused (Connection refused)

尽管配置服务已启动并成功运行,但是由于某种原因,发现服务仍然找不到它。

这里使用的Docker撰写文件是这个 version: '2' services: config-service: image: cloudsea/cls-config-service ports: - 9001:9001 expose: - "9001" discovery-service: image: cloudsea/cls-discovery-service depends_on: - config-service environment: CLOUD_SEA_CONFIG_SERVER_URI: http://config-service:9001 …

spring-boot spring-cloud docker-compose spring-cloud-netflix spring-cloud-config

8
推荐指数
1
解决办法
3261
查看次数

spring boot cloud eurka​​ windows 10 eurkea在最新的docker升级后返回host.docker.internal作为客户端主机名

Spring Boot Cloud Disovery 问题,Windows 10 上 docker 升级后 Eureka 主机名的问题。(注意:docker 不托管 spring 服务,只是 mariadb、rabbitmq 和 zipkin)

概括

  • 我正在 Windows 10 企业版上开发,最新补丁
  • 爪哇 8
  • 4
  • docker 托管 mariadb、rabbitmq 和 zipkin(没有服务运行 docker)
  • 使用基于Eureka的spring boot云发现进行服务发现

一切正常,直到今天的 docker 更新,在 docker 升级之后

Eureka 返回“host.docker.internal”作为我的开发箱的主机名(托管 spring boot 云服务的机器)

这一直工作正常,直到今天 Windows 10 上的 docker 升级。

关于这一点的任何指导?

- - - - - - - - - - - - - - - 细节 - - - - - - - - - - ---------

---------------- spring …

spring docker spring-boot netflix-eureka spring-cloud-netflix

8
推荐指数
2
解决办法
4809
查看次数