本文介绍了如何同时向 Eureka 和 Consul 注册 Spring Cloud 应用程序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在 spring cloud v1.1 中,我可以使用 @EnableDiscoveryClient@EnableEurekaClient 将 spring cloud 应用正确注册到 Eureka 和 Consul,因为我想使用Eureka/Zuul 的断路器和 consul 的键值配置.但是在使用spring cloud v1.2.1时,对于同样的代码,出现如下异常:

In spring cloud v1.1, I can use @EnableDiscoveryClient and @EnableEurekaClient to register a spring cloud app to both Eureka and Consul properly, because I want to use circuit breakers of Eureka/Zuul and key-value configurations of consul. But when using spring cloud v1.2.1, for the same code, I got the following exception:

***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 0 of method serviceRegistryEndpoint in    org.springframework.cloud.client.serviceregistry.ServiceRegistryAutoConfiguration$ServiceRegistryEndpointConfiguration required a single bean, but 2 were found:
    - eurekaServiceRegistry: defined by method 'eurekaServiceRegistry' in class path resource [org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.class]
    - consulServiceRegistry: defined by method 'consulServiceRegistry' in class path resource [org/springframework/cloud/consul/serviceregistry/ConsulServiceRegistryAutoConfiguration.class]


Action:

Consider marking one of the beans as @Primary, updating the consumer to accept multiple beans, or using @Qualifier to identify the bean that should be consumed

我发现org.springframework.cloud.client.serviceregistry.ServiceRegistryAutoConfiguration这个类是spring cloud v1.2.0的一个新类,它的目的是

I found the class of org.springframework.cloud.client.serviceregistry.ServiceRegistryAutoConfiguration is a new class from spring cloud v1.2.0, and its purpose is

服务发现、负载平衡和断路器等模式适用于一个公共抽象层,所有 Spring Cloud 客户端都可以使用该抽象层,独立于实现(例如,通过 Eureka 或 Consul 进行发现).

那么,这是否意味着使用 spring cloud v1.2,我可以只向 consul 注册应用程序,但可以使用键值配置和断路器?

So, does it mean using spring cloud v1.2, I could register the app to only consul but could use key-value configurations and circuit breakers?

推荐答案

是否也不能显式使用每个包中的 ServiceRegistry 接口实现(例如,请参阅 EurekaRegistry) 并显式注册:

Would it also not be possible to explicitly use the ServiceRegistry interface implementations from each package (eg. see EurekaRegistry) and explicitly register:

class Example:

    @Autowired
    EurekaRegistry eurekaRegistry;

    @Autowired
    ConsulRegistry consulRegistry;

    void register(Registration registration){
        eurekaRegistry(registration);
        consulRegistry(registration);
     }

这篇关于如何同时向 Eureka 和 Consul 注册 Spring Cloud 应用程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

06-26 11:51