web-dev-qa-db-ja.com

Spring API Gateway Java.net.ConnectException:接続がタイムアウトしました:それ以上の情報なし

URIパターンが一致するときのMicroServiceモジュールへの呼び出しをルーティングするためのAPI Gatewayを設定したSignal Getメソッドを持つSpring Bootアプリがあります。

レジストリサービスとダッシュボードに登録されているゲートウェイとMicroServiceの両方が登録されています

enter image description here

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)
 _
1
softechie

私は今日も同じ問題に直面しています。

マイクロサービスの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の一部です

2
DennisK

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
 _
1
softechie