URIパターンが一致するときのMicroServiceモジュールへの呼び出しをルーティングするためのAPI Gatewayを設定したSignal Getメソッドを持つSpring Bootアプリがあります。
レジストリサービスとダッシュボードに登録されているゲートウェイとMicroServiceの両方が登録されています
API-GATEAY YAML設定
server:
port: '8010'
spring:
application:
name: MY-GATEWAY
cloud:
compatibility-verifier:
enabled: false
gateway:
routes:
- id: MICRO-SERVICE1
uri: lb://MICRO-SERVICE1
predicates:
- Path=/ms1/**
eureka:
client:
register-with-eureka: true
fetch-registry: true
service-uri: http://localhost:8761/eureka/
intance:
hostname: localhost
_
マイクロサービス1 YAML設定
server:
port: '8030'
spring:
application:
name: MICRO-SERVICE1
eureka:
client:
register-with-eureka: true
fetch-registry: true
service-uri: http://localhost:8761/eureka/
intance:
hostname: localhost
_
コントローラのGETメソッド
@RestController
@RequestMapping("/ms1")
public class UATController {
@GetMapping(value = "/sayHello")
public @ResponseBody ResponseEntity<String> sayHello() {
String message = "Hello World";
return new ResponseEntity<String>(message, HttpStatus.OK);
}
}
_
ゲートウェイを介してアクセスするときは、次のようなエラーが発生していますが、私のマイクロサービスに直接アクセスしたとき、それは私がここで間違っているアイデアでも機能しますか?
- http:// localhost:8010/MS1/Sayhello < - ゲートウェイ経由で機能しない
- http:// localhost:8030/MS1/Sayhello < - ワーキング直接アクセス
Wed Dec 07 23:32:31 EST 2021
[83b324d4-2] There was an unexpected error (type=Internal Server Error, status=500).
Connection timed out: no further information: DESKTOP-1.verizon.net/192.168.1.160:8030
io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection timed out: no further information: DESKTOP-1.verizon.net/192.168.1.160:8030
Suppressed: The stacktrace has been enhanced by Reactor, refer to additional information below:
Error has been observed at the following site(s):
*__checkpoint ⇢ org.springframework.cloud.gateway.filter.WeightCalculatorWebFilter [DefaultWebFilterChain]
*__checkpoint ⇢ org.springframework.boot.actuate.metrics.web.reactive.server.MetricsWebFilter [DefaultWebFilterChain]
*__checkpoint ⇢ HTTP GET "/ms1/sayHello" [ExceptionHandlingWebHandler]
Original Stack Trace:
Caused by: Java.net.ConnectException: Connection timed out: no further information
at Java.base/Sun.nio.ch.Net.pollConnect(Native Method)
at Java.base/Sun.nio.ch.Net.pollConnectNow(Net.Java:672)
at Java.base/Sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.Java:946)
at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.Java:330)
at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.Java:334)
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.Java:707)
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.Java:655)
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.Java:581)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.Java:493)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.Java:986)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.Java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.Java:30)
at Java.base/Java.lang.Thread.run(Thread.Java:833)
_
私は今日も同じ問題に直面しています。
マイクロサービスのapplication.propertiesにeureka.instance.preferIpAddress=true
を追加することによってそれを解決することができました。そのプロパティは、サービスがホスト名の代わりにIPアドレスをアドバタイズすることを示します。詳細は2.6ポイント2.6 : https://cloud.spring.io/spring-cloud-netflix/multi/multi_spring-cloud-eureka-server.html 。 LOCALHOSTを使用しているため、リクエストをマイクロソフトに転送するという問題があるということです。
編集:私の設定は私の設定に特別なものは何もありません。これらは私のapplication.propertiesで使っている値です.MicroServiceは次のものを使用しています。
spring.cloud.discovery.enabled=true
spring.application.name=[The name of my app]
eureka.client.register.with-eureka=true
eureka.client.service-url.defaultZone=http://localhost:8999/eureka
eureka.instance.prefer-ip-address=true
ゲートウェイのプロパティはサービス1と似ています。負荷分散部は次のようになります。
spring.cloud.gateway.routes[0].id=[Same name as my app]
spring.cloud.gateway.routes[0].uri=lb://[name of my app]
spring.cloud.gateway.routes[0].predicates=Path=/test/**
Test/**が私のアプリケーションのREST URLの一部です
HostsファイルにDesktop-1.verizon.netを追加して、C:\ Windows\System32\Drivers\etc\hostsファイルに追加したエントリは次のとおりです。残念ながらEureka.instance.prefer-ip-address = trueは私のために働かなかった
127.0.0.1 DESKTOP-1.verizon.net
_