Spring cloud 春云祖尔,观众和阿特拉斯配置

Spring cloud 春云祖尔,观众和阿特拉斯配置,spring-cloud,netflix-zuul,Spring Cloud,Netflix Zuul,我在我的本地机器上玩所有这些神奇的春天云。我有一个基于Zuul的API网关来发现和调用Spring数据Rest服务。效果很好 现在我想介绍《旁观者》和《阿特拉斯》。我似乎无法正确配置这个。如果我在Zuul服务上启用Atlas,Atlas客户端的RestTemplate将失败,因为Ribbon试图包装它,而Ribbon不知道“Atlas”。如果我为Atlas添加一个功能区客户端配置,那么我的API网关将调用break。有没有办法从功能区包装中排除atlas管线?我错过了什么?见下文: 我定义了一个

我在我的本地机器上玩所有这些神奇的春天云。我有一个基于Zuul的API网关来发现和调用Spring数据Rest服务。效果很好

现在我想介绍《旁观者》和《阿特拉斯》。我似乎无法正确配置这个。如果我在Zuul服务上启用Atlas,Atlas客户端的RestTemplate将失败,因为Ribbon试图包装它,而Ribbon不知道“Atlas”。如果我为Atlas添加一个功能区客户端配置,那么我的API网关将调用break。有没有办法从功能区包装中排除atlas管线?我错过了什么?见下文:

我定义了一个指向本地主机的主机名“atlas”。Atlas服务器正在运行

Zuul/Api网关依赖项:

spring-boot-starter-parent: 1.3.2.RELEASE
spring-boot-starter-actuator
spring-cloud-starter-config
spring-cloud-starter-eureka
spring-cloud-starter-hystrix
spring-cloud-starter-zuul
spring-cloud-starter-stream-rabbit
spring-boot-starter-hateoas
spring-boot-starter-test
spring-cloud-starter-spectator
spring-cloud-starter-atlas
Zuul/API网关应用程序属性--

API网关启动属性:

spring.application.name=reservationClient
spring.cloud.config.uri=http://localhost:8888
Zuul/Eureka/Ribbon/Hystrix客户端均按预期工作,但Atlas客户端失败

@SpringBootApplication
@EnableZuulProxy
@EnableHystrix
@EnableEurekaClient
@EnableAtlas
@EnableScheduling
public class APIGateway {

    @Autowired
    Registry registry;

    public static void main(String[] args) {
        SpringApplication.run(APIGateway.class, args);
    }
}
Atlas客户端由Ribbon包装,Ribbon不知道Atlas

2016-03-07 08:57:50.312 ERROR 184 --- [trace=,span=] [ask-scheduler-2] o.s.integration.handler.LoggingHandler   : java.lang.IllegalStateException: No instances available for atlas
    at org.springframework.cloud.netflix.ribbon.RibbonClientHttpRequestFactory.createRequest(RibbonClientHttpRequestFactory.java:58)
    at org.springframework.http.client.support.HttpAccessor.createRequest(HttpAccessor.java:77)
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:592)
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:557)
    at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:475)
    at org.springframework.cloud.netflix.metrics.atlas.AtlasMetricObserver.sendMetricsBatch(AtlasMetricObserver.java:148)
    at org.springframework.cloud.netflix.metrics.atlas.AtlasMetricObserver.update(AtlasMetricObserver.java:126)
    at org.springframework.cloud.netflix.metrics.atlas.AtlasExporter.export(AtlasExporter.java:35)
    at org.springframework.boot.actuate.metrics.export.MetricExporters$ExportRunner.run(MetricExporters.java:112)
    at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
好的,让我们为Atlas定义一个功能区客户端

@SpringBootApplication
@EnableZuulProxy
@EnableHystrix
@EnableEurekaClient
@EnableAtlas
@EnableScheduling
public class APIGateway {

    @Autowired
    Registry registry;

    public static void main(String[] args) {
        SpringApplication.run(APIGateway.class, args);
    }
}

@Component
public class AtlasClientConfiguration {
    @Bean
    public StaticServerList ribbonServerList() {
        return new StaticServerList<Server>(new Server("atlas", 7101));
    }
}
@springboot应用程序
@EnableZuulProxy
@使能体
@启用EUREKACLIENT
@使能
@使能调度
公共类APIGateway{
@自动连线
登记处;
公共静态void main(字符串[]args){
run(APIGateway.class,args);
}
}
@组成部分
公共类AtlasClient配置{
@豆子
公共StaticServerList ribbonServerList(){
返回新的StaticServerList(新服务器(“atlas”,7101));
}
}
现在Atlas的客户很高兴。我看到了到Atlas服务器的帖子。
但现在,我通过Zuul向我的Spring数据服务发出的GET请求(该服务曾经有效)现在失败了:

不允许HTTP方法,支持的方法:POST


谢谢你的帮助

我无意中找到了解决办法

AtlasClient配置不是一个组件,它只是一个提供StaticServerList的Bean。删除@组件

我需要显式命名我的RibbonClient配置。即 @RibbonClient(name=“atlas”,configuration=AtlasClient配置.class)

@springboot应用程序
@EnableZuulProxy
@使能体
@启用EUREKACLIENT
@RibbonClient(name=“atlas”,configuration=AtlasClient配置.class)
@使能
@使能调度
公共类APIGateway{
@自动连线
登记处;
公共静态void main(字符串[]args){
run(APIGateway.class,args);
}
}
公共类AtlasClient配置{
@豆子
公共StaticServerList ribbonServerList(){
返回新的StaticServerList(新服务器(“atlas”,7101));
}
}

干得好,我最终会这么说的。虽然atlas使用的是功能区支持的RestTemplate很奇怪,但我已经为此添加了一个问题,您不需要做您所做的事情@斯宾塞·吉布:谢谢你在这个问题上发表评论。。。感谢您在SpringCloud/Netflix上的所有工作。这是很棒的东西。
@SpringBootApplication
@EnableZuulProxy
@EnableHystrix
@EnableEurekaClient
@EnableAtlas
@EnableScheduling
public class APIGateway {

    @Autowired
    Registry registry;

    public static void main(String[] args) {
        SpringApplication.run(APIGateway.class, args);
    }
}

@Component
public class AtlasClientConfiguration {
    @Bean
    public StaticServerList ribbonServerList() {
        return new StaticServerList<Server>(new Server("atlas", 7101));
    }
}
@SpringBootApplication
@EnableZuulProxy
@EnableHystrix
@EnableEurekaClient
@RibbonClient(name = "atlas", configuration = AtlasClientConfiguration.class)
@EnableAtlas
@EnableScheduling
public class APIGateway {

    @Autowired
    Registry registry;

    public static void main(String[] args) {
        SpringApplication.run(APIGateway.class, args);
    }
}


public class AtlasClientConfiguration {

    @Bean
    public StaticServerList<Server> ribbonServerList() {
        return new StaticServerList<Server>(new Server("atlas", 7101));
    }
}