gpt4 book ai didi

spring-cloud - Spring Cloud Zuul、Spectator 和 Atlas 配置

转载 作者:行者123 更新时间:2023-12-04 04:53:25 25 4
gpt4 key购买 nike

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

下面介绍一下Spectator和Atlas。我似乎无法正确配置它。如果我在 Zuul 服务上启用 Atlas,Atlas 客户端的 RestTemplate 会失败,因为 Ribbon 试图包装它,而 Ribbon 不知道“atlas”。如果我为 Atlas 添加功能区客户端配置,那么我的 API 网关调用就会中断。有没有办法从功能区包装中排除 map 集路线?我错过了什么?见下文:

我定义了一个指向本地主机的主机名“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 网关应用属性--

hystrix.command.default.execution.isolation.strategy: SEMAPHORE
netflix.atlas.uri=http://atlas:7101/api/v1/publish
server.port: ${PORT:8080}

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 定义一个 Ribbon 客户端。

@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));
}
}

现在 Atlas 客户端很高兴。我看到了 Atlas 服务器的 POST。
但是现在我通过 Zuul 向我的 Spring Data 服务发出的 GET 请求,曾经可以正常工作,现在失败了:

“不允许使用 HTTP 方法,支持的方法:POST”

感谢您的帮助!

最佳答案

我偶然发现了解决方案。

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

我需要明确命名我的 RibbonClient 配置。 IE@RibbonClient(name = "atlas", configuration = AtlasClientConfiguration.class)

@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));
}
}

关于spring-cloud - Spring Cloud Zuul、Spectator 和 Atlas 配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35848053/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com