我在我的本地機器上玩着所有這些夢幻般的Spring Cloud東西。我有一個基於Zuul的API-Gateway發現並調用Spring Data Rest服務。很棒。Spring Cloud Zuul,Spectator和Atlas配置
現在我想介紹一下Spectator和Atlas。我似乎無法正確配置此配置。如果我在Zuul服務上啓用Atlas,Atlas客戶端的RestTemplate將失敗,因爲Ribbon試圖包裝它並且Ribbon不知道「地圖集」。如果我爲Atlas添加Ribbon Client配置,那麼我的API網關調用會中斷。有沒有一種方法可以排除織帶包裝中的地圖集路線?我錯過了什麼?見下:
我已經定義了一個主機名「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網關應用properties--
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 /尤里卡/色帶/ 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);
}
}
阿特拉斯客戶端是通過絲帶包裹和色帶不知道阿特拉斯
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)
好吧,讓我們定義一個功能區客戶端地圖集。
@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客戶端很開心。我看到POST到Atlas服務器。
但現在通過Zuul我的GET請求我的春節,數據服務,是用來工作,現正與失敗:
「HTTP方法不允許的,支持的方法:POST」
感謝您的幫助!
不錯的工作,這是最終我會說。雖然地圖集使用啓用Ribbon的RestTemplate很奇怪。 – spencergibb
我爲此添加了一個問題,您不需要執行您所做的操作。 https://github.com/spring-cloud/spring-cloud-netflix/issues/881 – spencergibb
@spencergibb感謝您在此打開一個問題......並感謝您在Spring Cloud/Netflix上的所有工作。這真是太棒了。 – MarkOfHall