首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >、Spectator和Atlas配置

、Spectator和Atlas配置
EN

Stack Overflow用户
提问于 2016-03-07 15:50:53
回答 1查看 1.8K关注 0票数 3

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

现在我想介绍一下观众和阿特拉斯。我似乎无法正确配置这个。如果我在Zuul服务上启用了阿特拉斯,阿特拉斯客户端的RestTemplate就会失败,因为丝带试图包装它,而丝带不知道“地图集”。如果我为Atlas添加了一个丝带客户端配置,那么我的API网关调用中断。有没有办法将地图集的路线从丝带包装中排除出来?我遗漏了什么?见下文:

我已经定义了一个主机名“地图集”,指向本地主机。Atlas服务器正在运行。

Zuul / Api网关依赖项:

代码语言:javascript
复制
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网关应用程序属性--

代码语言:javascript
复制
hystrix.command.default.execution.isolation.strategy: SEMAPHORE
netflix.atlas.uri=http://atlas:7101/api/v1/publish
server.port: ${PORT:8080}

API网关启动属性:

代码语言:javascript
复制
spring.application.name=reservationClient
spring.cloud.config.uri=http://localhost:8888

Zuul / Eureka / Ribbon / Hystrix客户端都按预期工作,但Atlas客户端失败。

代码语言:javascript
复制
@SpringBootApplication
@EnableZuulProxy
@EnableHystrix
@EnableEurekaClient
@EnableAtlas
@EnableScheduling
public class APIGateway {

    @Autowired
    Registry registry;

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

阿特拉斯客户用丝带包裹,丝带不知道阿特拉斯

代码语言:javascript
复制
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定义一个丝带客户端。

代码语言:javascript
复制
@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));
    }
}

现在阿特拉斯客户很高兴。我看到阿特拉斯服务器上的帖子。

但是现在,我通过Zuul对我的Spring数据服务的GET请求(曾经起作用)现在已经失败了:

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

谢谢你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-07 23:04:52

我无意中找到了解决办法。

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

我需要显式地命名我的RibbonClient配置。ie @RibbonClient(name = "atlas",configuration = AtlasClientConfiguration.class)

代码语言:javascript
复制
@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));
    }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35848053

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档