SpringBoot微服务开发调试方法
SpringBoot微服务开发调试方法
在微服务开发和调试过程中,我们需要确保服务能够在本地和远程环境中正常运行和调试。以下总结了两种有效的调试方法,供大家参考,并对关键代码进行了详细分析。
方法一:本地调试
步骤1:配置 application.yml
在 application.yml
文件中添加以下配置:
eureka:
client:
serviceUrl:
defaultZone: http://${spring.boot.admin.client.username}:${spring.boot.admin.client.password}@<EUREKA_SERVER_URL>/eureka/
register-with-eureka: false
instance:
prefer-ip-address: true
ip-address: <LOCAL_IP_ADDRESS>
代码分析:
eureka.client.serviceUrl.defaultZone
:指定 Eureka 服务器的 URL,其中包含了用户名和密码。此配置确保客户端可以正确连接到 Eureka 服务器进行服务发现。eureka.client.register-with-eureka
:设置为false
,表示当前服务不会注册到 Eureka 中。这在本地调试时很有用,因为已部署的服务无法发现你的本地服务,已部署的业务就不会流转到你的本地服务,从而不会影响已部署的环境。eureka.instance.prefer-ip-address
:设置为true
,表示服务实例更倾向于使用 IP 地址而不是主机名。eureka.instance.ip-address
:指定服务实例的 IP 地址。- <EUREKA_SERVER_URL>修改为你的Eureka 服务器的 URL
- <LOCAL_IP_ADDRESS>修改为你本地IP
步骤2:跨服务调用修改
本地服务A在涉及跨服务B调用时,如果微服务B也需要进行debug(微服务B不需要debug的话,无需配置)
,那么需要修改本地服务A指向本地服务B的url,比如我的项目使用的是 FeignClient
配置,将 FeignClient
指向本地微服务B:
@FeignClient(url = "http://<LOCAL_IP_ADDRESS>:<LOCAL_SERVICE_PORT>")
代码分析:
@FeignClient(url = "http://<LOCAL_IP_ADDRESS>:<LOCAL_SERVICE_PORT>")
:将 FeignClient 的 URL 指向本地服务B实例。这允许在本地调试本地服务A时依然可以直接调试本地服务B。请启动对应的本地服务B,url修改为你的本地服务B的IP。
步骤3:启动服务
启动需要调试的相关服务,确保服务注册到 Eureka 中。
步骤4:调用本机 IP 接口进行调试
在本地调用服务接口进行调试,无需调用已部署服务的IP接口,以确保服务的正常运行。
方法二:远程调试
步骤1:配置远程服务
进入远程服务器,修改对应服务的 run.sh
脚本,添加调试端口配置:
-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:9084
代码分析:
-agentlib:jdwp
:启用 Java Debug Wire Protocol (JDWP) 代理,用于远程调试。transport=dt_socket
:指定调试传输方式为套接字。server=y
:表示 JVM 作为调试服务器运行。suspend=n
:表示 JVM 启动时不挂起,直接运行。address=*:9084
:指定调试服务器监听的地址和端口。在这里,*
表示绑定到所有网络接口,端口为9084
,端口根据需要修改。
步骤2:配置 IntelliJ IDEA
- 打开 IntelliJ IDEA,进入
Edit Configurations
。
- 添加新的配置,选择
Remote JVM Debug
。
- 填写名称与远程主机的 IP 地址和调试端口(如
9084
),然后保存配置。
步骤3:启动远程调试
1.选中已创建的配置,并点击Debug
调试。
2.控制台显示Connected
代表远程连接成功,即可开始断调试。
注意:远程与本地代码需要保持一致!
通过以上两种方法,可以有效地进行本地和远程的微服务调试工作,确保服务的正常运行和稳定性。
转载自:https://juejin.cn/post/7382152932827545600