2

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

***************************
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的一个新类,它的目的是

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

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

4

2 回答 2

0

我刚刚做完。

关键是排除默认的自动配置, application.yml如下所示:

spring.autoconfigure.exclude: - org.springframework.cloud.client.serviceregistry.ServiceRegistryAutoConfiguration - org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationAutoConfiguration

然后您可以编写自己的实现或忽略这些 bean。

有关详细信息,请参阅:https ://github.com/cloud-ready/spring-cloud-service-discovery/tree/develop/spring-cloud-multi-registration 。

于 2018-06-04T14:41:22.983 回答
0

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

class Example:

    @Autowired
    EurekaRegistry eurekaRegistry; 

    @Autowired
    ConsulRegistry consulRegistry;

    void register(Registration registration){
        eurekaRegistry(registration);
        consulRegistry(registration);
     }
于 2019-01-09T19:25:32.837 回答