currency-conversion と currency-exchange の 2 つのサービスがあります。 Eureka サーバーは 1 つです。
ローカル マシンでは、サービスは正常に動作しています。通常は eureka サーバーを使用して他のサービス メソッドを使用しますが、docker では、ホワイト ラベル エラー 500 が表示されます。
Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback
There was an unexpected error (type=Internal Server Error status=500)
eurekaサーバーでdocker-composeを使用しています.2つのサービスはOKを示しています(それぞれの単純なエンドポイントでも接続されています)。それらを接続するエンドポイントを使用しようとするとエラーが表示されます。
これが私のdocker-composeです:
version: '3.7'
services:
currency-exchange:
image: thiagoandradeit/microservicosin28minutes-currency-exchange-service:0.0.1-SNAPSHOT
mem_limit: 700m
ports:
- "8000:8000"
networks:
- currency-exchange
depends_on:
- naming-server
environment:
EUREKA.CLIENT.SERVICE-URL.DEFAULTZONE: http://naming-server:8761/eureka
currency-conversion:
image: thiagoandradeit/microservicosin28minutes-currency-conversion-service:0.0.1-SNAPSHOT
mem_limit: 700m
ports:
- "8100:8100"
networks:
- currency-exchange
depends_on:
- naming-server
environment:
EUREKA.CLIENT.SERVICE-URL.DEFAULTZONE: http://naming-server:8761/eureka
naming-server:
image: thiagoandradeit/microservicosin28minutes-naming-server:0.0.1-SNAPSHOT
mem_limit: 700m
ports:
- "8761:8761"
networks:
- currency-exchange
networks:
currency-exchange:
私のopenfeign動的クラス:
@FeignClient(name="currency-exchange")
public interface CurrencyExchangeProxy {
@GetMapping("/currency-exchange/from/{from}/to/{to}")
public CurrencyConversion retrieveExchangeValue(@PathVariable String from,@PathVariable String to);
}
通貨交換サービスによる通貨換算を使用しようとしたときに表示されるログの一部を次に示します。
currency-conversion_1 | 2021-03-15 18:59:33.696 WARN [currency-conversion,838d12e2c7e9960f,838d12e2c7e9960f] 1 --- [nio-8100-exec-6] .c.RetryAwareServiceInstanceListSupplier : No instances found after removing previously used service instance from the search ([EurekaServiceInstance@46ba90bd instance = InstanceInfo [instanceId = cc938ed0474f:currency-exchange:8000, appName = CURRENCY-EXCHANGE, hostName = localhost, status = UP, ipAddr = 172.19.0.6, port = 8000, securePort = 443, dataCenterInfo = com.netflix.appinfo.MyDataCenterInfo@46b93bf4]). Returning all found instances.
currency-conversion_1 | 2021-03-15 18:59:33.700 ERROR [currency-conversion,,] 1 --- [nio-8100-exec-6] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is feign.RetryableException: Connection refused (Connection refused) executing GET http://currency-exchange/currency-exchange/from/USD/to/INR] with root cause
currency-conversion_1 |
currency-conversion_1 | java.net.ConnectException: Connection refused (Connection refused)
currency-conversion_1 | at java.base/java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:na]
currency-conversion_1 | at java.base/java.net.AbstractPlainSocketImpl.doConnect(Unknown Source) ~[na:na]
currency-conversion_1 | at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source) ~[na:na]
currency-conversion_1 | at java.base/java.net.AbstractPlainSocketImpl.connect(Unknown Source) ~[na:na]
currency-conversion_1 | at java.base/java.net.Socket.connect(Unknown Source) ~[na:na]
currency-conversion_1 | at java.base/sun.net.NetworkClient.doConnect(Unknown Source) ~[na:na]
currency-conversion_1 | at java.base/sun.net.www.http.HttpClient.openServer(Unknown Source) ~[na:na]
currency-conversion_1 | at java.base/sun.net.www.http.HttpClient.openServer(Unknown Source) ~[na:na]
currency-conversion_1 | at java.base/sun.net.www.http.HttpClient.(Unknown Source) ~[na:na]
currency-conversion_1 | at java.base/sun.net.www.http.HttpClient.New(Unknown Source) ~[na:na]
currency-conversion_1 | at java.base/sun.net.www.http.HttpClient.New(Unknown Source) ~[na:na]
currency-conversion_1 | at java.base/sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source) ~[na:na]
currency-conversion_1 | at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect0(Unknown Source) ~[na:na]
currency-conversion_1 | at java.base/sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source) ~[na:na]
currency-conversion_1 | at java.base/sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source) ~[na:na]
currency-conversion_1 | at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(Unknown Source) ~[na:na]
currency-conversion_1 | at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source) ~[na:na]
currency-conversion_1 | at java.base/java.net.HttpURLConnection.getResponseCode(Unknown Source) ~[na:na]
currency-conversion_1 | at feign.Client$Default.convertResponse(Client.java:108) ~[feign-core-10.10.1.jar:na]
currency-conversion_1 | at feign.Client$Default.execute(Client.java:104) ~[feign-core-10.10.1.jar:na]
currency-conversion_1 | at org.springframework.cloud.sleuth.instrument.web.client.feign.TracingFeignClient.execute(TracingFeignClient.java:79) ~[spring-cloud-sleuth-instrumentation-3.0.1.jar:3.0.1]
currency-conversion_1 | at org.springframework.cloud.sleuth.instrument.web.client.feign.LazyTracingFeignClient.execute(LazyTracingFeignClient.java:62) ~[spring-cloud-sleuth-instrumentation-3.0.1.jar:3.0.1]
currency-conversion_1 | at org.springframework.cloud.openfeign.loadbalancer.LoadBalancerUtils.executeWithLoadBalancerLifecycleProcessing(LoadBalancerUtils.java:56) ~[spring-cloud-openfeign-core-3.0.1.jar:3.0.1]
currency-conversion_1 | at org.springframework.cloud.openfeign.loadbalancer.RetryableFeignBlockingLoadBalancerClient.lambda$execute$2(RetryableFeignBlockingLoadBalancerClient.java:156) ~[spring-cloud-openfeign-core-3.0.1.jar:3.0.1]
Docker で使用している URL をいくつか示します (ローカル マシンでは、すべて正常に動作します)。
http://localhost:8000/currency-exchange/from/USD/to/INR (currency exchange only -
works fine with docker and eureka server)
http://localhost:8100/test (currency conversion only - works fine with docker and eureka server)
http://localhost:8100/currency-conversion-feign/from/USD/to/INR/quantity/10 (currency exchange consume currency conversion with openfeign - NOT WORKING with docker and eureka server, but works fine without docker)
私の通貨両替 application.properties
私の通貨両替 application.properties
spring.application.name=通貨交換 server.port=8000 spring.jpa.show-sql=true spring.datasource.url=jdbc:h2:mem:testdb spring.h2.console.enabled=true # このプロパティは docker-compose によって上書きされます eureka.client.service-url.defaultZone=http://localhost:8761/eureka #多分これは上書きじゃない? eureka.instance.hostname=localhost
私の通貨換算 application.properties
spring.application.name=通貨換算 server.port=8100 #外貨両替と同じ eureka.client.service-url.defaultZone=http://localhost:8761/eureka eureka.instance.hostname=localhost
私のエウレカサーバー
spring.application.name=ネーミングサーバー server.port=8761 eureka.client.register-with-eureka=false eureka.client.fetch-registry=false
私は docker と spring-cloud が初めてです。彼らはお互いの名前を見つけていないと思います。しかし、docker-compose にも eureka の URL を設定しました。何ができるかわかりません。