微服务与单体应用之间的调用问题

发布于:2024-04-27 ⋅ 阅读:(26) ⋅ 点赞:(0)

前言

     本文转自 www.microblog.store,且已获得授权

一、问题背景

     microblog.store微博客使用了微服务架构,并且docker容器化部署; 另有一个独立的单体应用,功能是: 作为ip地址解析中心; 微服务集群以及该单体应用都部署到同一台服务器上面,有需要的时候微服务集群里面某个微服务会通过端口号调用该单体应用解析ip地址。
     由于两套系统都是部署在同一台服务器上面,因此,通过服务器内网地址调用比通过公网域名调用节省了CDN解析这个流程,性能上更加良好。

二、问题描述

     为了提高调用响应性能,我选择了服务器内网ip调用,但是,不管我使用 localhost:端口号 还是 127.0.0.1:端口号,都没办法调通,一直提示:

java.net.ConnectException: Connection refused (Connection refused)
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
        at java.net.Socket.connect(Socket.java:589)
        at java.net.Socket.connect(Socket.java:538)
        at sun.net.NetworkClient.doConnect(NetworkClient.java:180)
        at sun.net.www.http.HttpClient.openServer(HttpClient.java:463)
        at sun.net.www.http.HttpClient.openServer(HttpClient.java:558)
        at sun.net.www.http.HttpClient.<init>(HttpClient.java:242)
        at sun.net.www.http.HttpClient.New(HttpClient.java:339)
        at sun.net.www.http.HttpClient.New(HttpClient.java:357)
        at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1220)
        at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1156)
        at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:1050)
        at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:984)
        at com.microblog.tools.web.HttpUtils.sendGet(HttpUtils.java:59)
        at com.microblog.tools.web.HttpUtils.sendGet(HttpUtils.java:37)
        at com.microblog.system.task.AutoTask.lambda$logRecord$3(AutoTask.java:85)

     刚开始以为是因为使用了Nacos服务注册与发现导致的问题,可是转念一想,又不太可能,因为我调用方式并不是 服务名:端口号 这种方式; 思来想去,终于定位到了为题的关键: 我使用了Docker容器化部署 ,这样就导致每个微服务都有自己独立的运行环境,那么,通过 localhost:端口号 / 127.0.0.1:端口号 这样的方式调用时,指向的就是当前微服务所在的容器环境,当然找不到了.

三、解决方法

     上文所述,通过 localhost或者127无法调通,是因为docker容器化部署的原因,那么就好解决了:
我么可以通过 ip addr 查看服务器物理机上面的内网ip,获取到服务器内网ip以后,然后通过 内网ip:端口 这样就能掉通了.


网站公告

今日签到

点亮在社区的每一天
去签到