框架:springboot consul
feign调用服务
本地运行好好的,通过docker部署到虚拟机中就报错 java.net.UnknownHostException: a39446462fe9

2022-08-18T17:10:28.900026400Z 2022-08-18 17:10:28.898 ERROR 1 --- [p-nio-80-exec-3] 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: a39446462fe9 executing GET http://consul-es/hello] with root cause
2022-08-18T17:10:28.900068555Z
2022-08-18T17:10:28.900073645Z java.net.UnknownHostException: a39446462fe9
2022-08-18T17:10:28.900076681Z  at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:184) ~[na:1.8.0_131]
2022-08-18T17:10:28.900080321Z  at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_131]
2022-08-18T17:10:28.900083073Z  at java.net.Socket.connect(Socket.java:589) ~[na:1.8.0_131]
2022-08-18T17:10:28.900086077Z  at sun.net.NetworkClient.doConnect(NetworkClient.java:175) ~[na:1.8.0_131]
2022-08-18T17:10:28.900088745Z  at sun.net.www.http.HttpClient.openServer(HttpClient.java:463) ~[na:1.8.0_131]
2022-08-18T17:10:28.900099541Z  at sun.net.www.http.HttpClient.openServer(HttpClient.java:558) ~[na:1.8.0_131]
2022-08-18T17:10:28.900102998Z  at sun.net.www.http.HttpClient.<init>(HttpClient.java:242) ~[na:1.8.0_131]
2022-08-18T17:10:28.900106054Z  at sun.net.www.http.HttpClient.New(HttpClient.java:339) ~[na:1.8.0_131]
2022-08-18T17:10:28.900108640Z  at sun.net.www.http.HttpClient.New(HttpClient.java:357) ~[na:1.8.0_131]
2022-08-18T17:10:28.900111404Z  at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1202) ~[na:1.8.0_131]
2022-08-18T17:10:28.900114144Z  at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1138) ~[na:1.8.0_131]
2022-08-18T17:10:28.900116864Z  at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1032) ~[na:1.8.0_131]
2022-08-18T17:10:28.900119598Z  at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:966) ~[na:1.8.0_131]
2022-08-18T17:10:28.900122377Z  at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1546) ~[na:1.8.0_131]
2022-08-18T17:10:28.900125088Z  at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1474) ~[na:1.8.0_131]
2022-08-18T17:10:28.900127823Z  at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:480) ~[na:1.8.0_131]
2022-08-18T17:10:28.900130491Z  at feign.Client$Default.convertResponse(Client.java:108) ~[feign-core-10.10.1.jar!/:na]
2022-08-18T17:10:28.900133115Z  at feign.Client$Default.execute(Client.java:104) ~[feign-core-10.10.1.jar!/:na]
2022-08-18T17:10:28.900137250Z  at org.springframework.cloud.openfeign.ribbon.FeignLoadBalancer.execute(FeignLoadBalancer.java:93) ~[spring-cloud-openfeign-core-2.2.5.RELEASE.jar!/:2.2.5.RELEASE]
2022-08-18T17:10:28.900140307Z  at org.springframework.cloud.openfeign.ribbon.FeignLoadBalancer.execute(FeignLoadBalancer.java:56) ~[spring-cloud-openfeign-core-2.2.5.RELEASE.jar!/:2.2.5.RELEASE]
2022-08-18T17:10:28.900143125Z  at com.netflix.client.AbstractLoadBalancerAwareClient$1.call(AbstractLoadBalancerAwareClient.java:104) ~[ribbon-loadbalancer-2.3.0.jar!/:2.3.0]
2022-08-18T17:10:28.900145981Z  at com.netflix.loadbalancer.reactive.LoadBalancerCommand$3$1.call(LoadBalancerCommand.java:303) ~[ribbon-loadbalancer-2.3.0.jar!/:2.3.0]
2022-08-18T17:10:28.900148800Z  at com.netflix.loadbalancer.reactive.LoadBalancerCommand$3$1.call(LoadBalancerCommand.java:287) ~[ribbon-loadbalancer-2.3.0.jar!/:2.3.0]
2022-08-18T17:10:28.900151625Z  at rx.internal.util.ScalarSynchronousObservable$3.call(ScalarSynchronousObservable.java:231) ~[rxjava-1.3.8.jar!/:1.3.8]
2022-08-18T17:10:28.900154355Z  at rx.internal.util.ScalarSynchronousObservable$3.call(ScalarSynchronousObservable.java:228) ~[rxjava-1.3.8.jar!/:1.3.8]
2022-08-18T17:10:28.900157087Z  at rx.Observable.unsafeSubscribe(Observable.java:10327) ~[rxjava-1.3.8.jar!/:1.3.8]
2022-08-18T17:10:28.900159800Z  at rx.internal.operators.OnSubscribeConcatMap$ConcatMapSubscriber.drain(OnSubscribeConcatMap.java:286) ~[rxjava-1.3.8.jar!/:1.3.8]
2022-08-18T17:10:28.900162601Z  at rx.internal.operators.OnSubscribeConcatMap$ConcatMapSubscriber.onNext(OnSubscribeConcatMap.java:144) ~[rxjava-1.3.8.jar!/:1.3.8]
2022-08-18T17:10:28.900167925Z  at com.netflix.loadbalancer.reactive.LoadBalancerCommand$1.call(LoadBalancerCommand.java:185) ~[ribbon-loadbalancer-2.3.0.jar!/:2.3.0]
2022-08-18T17:10:28.900171093Z  at com.netflix.loadbalancer.reactive.LoadBalancerCommand$1.call(LoadBalancerCommand.java:180) ~[ribbon-loadbalancer-2.3.0.jar!/:2.3.0]
2022-08-18T17:10:28.900173952Z  at rx.Observable.unsafeSubscribe(Observable.java:10327) ~[rxjava-1.3.8.jar!/:1.3.8]
2022-08-18T17:10:28.900176578Z  at rx.internal.operators.OnSubscribeConcatMap.call(OnSubscribeConcatMap.java:94) ~[rxjava-1.3.8.jar!/:1.3.8]
2022-08-18T17:10:28.900179372Z  at rx.internal.operators.OnSubscribeConcatMap.call(OnSubscribeConcatMap.java:42) ~[rxjava-1.3.8.jar!/:1.3.8]
2022-08-18T17:10:28.900182091Z  at rx.Observable.unsafeSubscribe(Observable.java:10327) ~[rxjava-1.3.8.jar!/:1.3.8]
2022-08-18T17:10:28.900185088Z  at rx.internal.operators.OperatorRetryWithPredicate$SourceSubscriber$1.call(OperatorRetryWithPredicate.java:127) ~[rxjava-1.3.8.jar!/:1.3.8]
2022-08-18T17:10:28.900187962Z  at rx.internal.schedulers.TrampolineScheduler$InnerCurrentThreadScheduler.enqueue(TrampolineScheduler.java:73) ~[rxjava-1.3.8.jar!/:1.3.8]
2022-08-18T17:10:28.900190701Z  at rx.internal.schedulers.TrampolineScheduler$InnerCurrentThreadScheduler.schedule(TrampolineScheduler.java:52) ~[rxjava-1.3.8.jar!/:1.3.8]
2022-08-18T17:10:28.900193534Z  at rx.internal.operators.OperatorRetryWithPredicate$SourceSubscriber.onNext(OperatorRetryWithPredicate.java:79) ~[rxjava-1.3.8.jar!/:1.3.8]
2022-08-18T17:10:28.900196425Z  at rx.internal.operators.OperatorRetryWithPredicate$SourceSubscriber.onNext(OperatorRetryWithPredicate.java:45) ~[rxjava-1.3.8.jar!/:1.3.8]
2022-08-18T17:10:28.900199189Z  at rx.internal.util.ScalarSynchronousObservable$WeakSingleProducer.request(ScalarSynchronousObservable.java:276) ~[rxjava-1.3.8.jar!/:1.3.8]
2022-08-18T17:10:28.900201931Z  at rx.Subscriber.setProducer(Subscriber.java:209) ~[rxjava-1.3.8.jar!/:1.3.8]
2022-08-18T17:10:28.900204543Z  at rx.internal.util.ScalarSynchronousObservable$JustOnSubscribe.call(ScalarSynchronousObservable.java:138) ~[rxjava-1.3.8.jar!/:1.3.8]
2022-08-18T17:10:28.900207374Z  at rx.internal.util.ScalarSynchronousObservable$JustOnSubscribe.call(ScalarSynchronousObservable.java:129) ~[rxjava-1.3.8.jar!/:1.3.8]
2022-08-18T17:10:28.900210180Z  at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48) ~[rxjava-1.3.8.jar!/:1.3.8]
2022-08-18T17:10:28.900212893Z  at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30) ~[rxjava-1.3.8.jar!/:1.3.8]
2022-08-18T17:10:28.900215668Z  at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48) ~[rxjava-1.3.8.jar!/:1.3.8]
2022-08-18T17:10:28.900218352Z  at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30) ~[rxjava-1.3.8.jar!/:1.3.8]
2022-08-18T17:10:28.900222188Z  at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:48) ~[rxjava-1.3.8.jar!/:1.3.8]
2022-08-18T17:10:28.900225126Z  at rx.internal.operators.OnSubscribeLift.call(OnSubscribeLift.java:30) ~[rxjava-1.3.8.jar!/:1.3.8]

搞了一天没搞出来,不知道哪里出了问题,无解了


搞了两天搞出来了,原来是服务生产者application.yml少了个配置

#开启ip地址注册
prefer-ip-address: true
#实例的请求ip
ip-address: ${spring.cloud.client.ip-address}

(服务提供方)完整的application.yml

spring:
  application:
    name: project-es
  elasticsearch:
    rest:
      uris: 192.168.233.137:9200
  cloud:
    consul:
      host: 192.168.233.137
      port: 8500
      discovery:
        instance-id: ${spring.application.name}:${server.port} #这个id作为唯一识别的id必填
        service-name: consul-es
        heartbeat:
          enabled: true  #不打开心跳机制,控制台会显示红叉
        #开启ip地址注册
        prefer-ip-address: true
        #实例的请求ip
        ip-address: ${spring.cloud.client.ip-address}
  kafka:
    bootstrap-servers: 192.168.233.137:9092
    consumer:
      group-id: esGroup   # 指定默认消费者group id --> 由于在kafka中,同一组中的consumer不会读取到同一个消息,依靠groud.id设置组名
      auto-offset-reset: earliest # smallest和largest才有效,如果smallest重新0开始读取,如果是largest从logfile的offset读取。一般情况下我们都是设置smallest
      enable-auto-commit: true # enable.auto.commit:true --> 设置自动提交offset
      auto-commit-interval: 100 #如果'enable.auto.commit'为true,则消费者偏移自动提交给Kafka的频率(以毫秒为单位),默认值为5000。
      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer  # 指定消息key和消息体的编解码方式
      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer # 指定消息key和消息体的编解码方式
server:
  port: 83

请求成功!
在这里插入图片描述
这里要感谢这篇文章,我参考了这里的配置
SpringCloud中的Consul详解

但是!!!!!!!!!!!!!!!!!!!
这样问题只解决了一半!
如果是虚拟机种docker创建的服务之间调用是没问题的,但如果本地启动的项目,调用虚拟机中的服务,还是不通
加了上述配置后,consul控制台显示的是这样的
在这里插入图片描述加配置之前,是这样的
在这里插入图片描述也就是说根据ip地址去调用服务,问题就在于,如果是虚拟机中的服务调用,没有问题,而如果是window本地启动的服务,却无法访问虚拟机中docker创建的容器的,ping不通
注:我虚拟机ip 是 192.168.233.137 ,而docker创建的容器ip是 172.17.0.9

这里可以参考:
外部ping不通Vmware docker容器
Docker | 使用宿主机ping通虚拟机里的docker容器 | 路由转发
windows版docker宿主机ping容器ping不通的坑

这里我就不尝试了
以上

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐