feign调用问题

Blade 未结 1 150
li120697
li120697 剑圣 2024-12-06 11:57

一、该问题的重现步骤是什么?

1. 目前服务:baldex框架基础服务 + 基于biz的三个自建服务

image.png

image.png

目前这些服务部署在服务器上,整体运行也没任何问题。


2. 当我在本地开发环境,启动自建项目,例如上图中 'dyt-sys-ZZR',是基于dyt-sys启动的本地项目,nacos中也有对应的配置文件

image.png

image.png

image.png

运行也没有任何问题。


3.当我本地项目想调用服务器上的feign,例如本地 'dyt-sys-ZZR'项目调用服务器上的'baldex-system'feign接口,会请求不到数据导致接口超时。


目前解决办法在本地启动 `baldex-system` 项目feign会调到本地,可以调通,但是不想给其他同事提供bladex源码,想在服务器上启动一套环境,让开发环境都可以调到,有什么方式解决吗?


二、你期待的结果是什么?实际看到的又是什么?

期待本地开发环境可以调通服务器上部署的feign接口。


三、你正在使用的是什么产品,什么版本?在什么操作系统上?

bladeX

服务器Linux 本地Windows


四、请提供详细的错误堆栈信息,这很重要。


五、若有更多详细信息,请在下面提供。

1条回答
  • 2024-12-06 19:59

    本地启动网关注册到服务器的nacos,然后服务器的服务启动的时候手动指定ip地址和端口注册到nacos。这样本地启动Gateway的时候,去调用服务器的blade-system服务,就是直接访问的外网地址了,就可以调通。


    还有种办法是你给blade-system服务打成jar包,然后让同事本地启动jar包来进行调试。或者你本地启动blade-system,来调用的时候,请求你的ip地址。这些都可以,核心就是保证网络要互通。


    本地启动gateway后,指定优先调用的ip可以参考这里:https://center.javablade.com/blade/BladeX-Doc/src/branch/master/%E7%AC%AC5%E7%AB%A0%20%E5%8A%9F%E8%83%BD%E7%89%B9%E6%80%A7/5.19%20%E5%9B%A2%E9%98%9F%E5%8D%8F%E4%BD%9C%E8%87%AA%E5%AE%9A%E4%B9%89%E8%B4%9F%E8%BD%BD%E9%85%8D%E7%BD%AE.md


    作者追问:2024-12-07 11:32

    jar包的方式在我提问前就试过了,会导致服务器上的环境请求bladex接口没问题,每次请求自建服务的接口就会直接退出登录,退回到登录页面,不知道什么问题导致的。


    本地启动gatway方式:

    1、本地的gatway启动 是不是服务器上的gatway就需要先停止

    2、服务器的服务启动的时候手动指定ip地址和端口注册到nacos,具体是怎么手动指定呢?


    作者追问:2024-12-09 10:10

    目前按照你的方式:

    1、在需要负载的服务添加依赖(我理解的是要调用的服务,例如`bladex-system`或自建的服务)

    image.png

    2、本地gateway启动,加了一个优先调用的ip段,这里配置的是nacos里的,即docker-compose里配置的

    image.png

    3、由本地的gateway访问doc文档,文档中的接口均为正常展示

    image.png


    帮忙看下问题。谢谢


    回答: 2024-12-09 10:15

    服务器的Gateway不用关闭,可以本地启动后访问本地的Gateway来实现自定义负载。到这里打断点看看获取的服务是不是你调用的


    CleanShot20241209101201@2x.png


    另外如果你是用docker部署,注册到nacos的是子网ip,比如172.x.x.x,你其他的机子去访问,是绝对不可能调通的。你需要用vpn才能让网络互联,具体vpn怎么配置需要找负责网络的同事来配置。


    自定义注册到nacos可以参考如下

    // 指定注册IP
    PropsUtil.setProperty(props, "spring.cloud.nacos.discovery.ip", "127.0.0.1");
    // 指定注册端口
    PropsUtil.setProperty(props, "spring.cloud.nacos.discovery.port", "8200");
    // 自定义命名空间
    PropsUtil.setProperty(props, "spring.cloud.nacos.config.namespace", LauncherConstant.NACOS_NAMESPACE);
    PropsUtil.setProperty(props, "spring.cloud.nacos.discovery.namespace", LauncherConstant.NACOS_NAMESPACE);
    // 自定义分组
    PropsUtil.setProperty(props, "spring.cloud.nacos.config.group", NacosConstant.NACOS_CONFIG_GROUP);
    PropsUtil.setProperty(props, "spring.cloud.nacos.discovery.group", NacosConstant.NACOS_CONFIG_GROUP);


    回答: 2024-12-09 10:18

    如果docker内网与开发机的网络调通不了,建议用jar包在服务器启动,这样你只需要保证服务器的端口开放并且ip能被开发机连通就行了。

    作者追问:2024-12-09 14:50

    目前按照你的方式,在服务器上使用jar包的方式启动了blade-system,也成功注册到nacos

    image.png

    同时部署的时候也引入了依赖

    image.png

    本地gateway启动加入优先调用ip段

    image.png

    启动后打开接口文档依然没法正常访问

    image.png

    断点

    image.png

    这里是哪里出现的问题呢?

    现在jar包是在服务器的虚拟机中启动,虚拟机的防火墙已经关闭。

    本地启动的gateway无法访问,但是在服务器部署的gateway是可以正常访问baldex服务的,自建服务全部失效,现在整个流程还是一知半解,能否详细解惑?






    回答: 2024-12-09 15:01

    没什么复杂的东西,就是本地gateway去nacos请求对应服务,获取到ip和端口后在你本地开发机调用这个ip和端口。本地能联通就能调用,网络不通就没法调用。

    这个注册的ip你可以自由控制,先确保只有一个ip,把docker注册的172开头的都下线。然后再测试链接。

    0 讨论(0)
提交回复