作者:Vee-健健健 | 来源:互联网 | 2023-07-25 13:21
前言在微服务开发中,经常会在开发环境进行服务调试。我们将本地服务注册到Eureke上,同时开发服务器上部署的服务也注册到Eureka中,这时候我们调用服务,有的请求将会
前言
在微服务开发中,经常会在开发环境进行服务调试。我们将本地服务注册到Eureke上,同时开发服务器上部署的服务也注册到Eureka中,这时候我们调用服务,有的请求将会被路由到开发环境服务器上。而我们想要请求路由到本地的服务中,明明在本地服务中打了断点,但是请求却被路由到服务器上,导致本地调试很不方便。对于这种情况,我们只需要把服务器中注册到Eureke中的服务下线,这样,我们就可以在本地进行断点调试了。
服务下线三种方式
1.直接kill服务
直接kill服务这种粗暴的方式,我们是不推荐的。由于Eureka客户端和服务端是通过心跳进行续约的。这种心跳续约就会导致服务下线不及时,比如说,客户端的心跳检测刚刚结束,我们手动kill了服务。在下次心跳检测开始之前,这个被kill的服务会一直存在服务列表中。这时候如果请求被路由到这个服务,就是导致服务调用失败。
2.在Eureka客户端中调用下线请求
在微服务开发中,我们通常都是采用springboot快速构建服务,我们可以在服务中开放一个接口,专门用来下线服务。
-
- @RestController
- public class HelloController {
-
- @RequestMapping(value = "/offline", method = RequestMethod.GET)
- public void offLine(){
- DiscoveryManager.getInstance().shutdownComponent();
- }
- }
通过调用上面的接口,就可以手动实现服务下线。但是在实际开发中,我们没有必要为了服务下线,特意在服务中开放一个下线接口。
3.直接向注册中心发送下线请求
上面说的两种方式都有点不实用,或者有其他问题。这里介绍一种我们在开发中用的比较多的方式。为了让注册中心马上知道服务要下线, 我们可以向eureka 注册中心发送delete 请求。具体请求的格式如下
http://你的注册中心zone/apps/你的实例名称/你的实例地址加端口
比如我们要下线下面的PTC,只需要执行 http://xxx.xxx.xxx.xxx:8761/eureka/apps/PTC/iZ2rderl3j12llZ:ptc:2703请求就行了。需要注意的一点是,上面的请求只是暂时的下线了PTC。如果PTC服务本身没有下线,那么待会客户端续约的时候就会重新续约。所以我们在发送请求之前需要先把服务停掉,避免服务的重新续约。
通常Eureka是设置了密码的,那么我们直接请求是不行的,需要带上认证信息。postman中可以带上账号密码信息的,当然我们也可以直接在请求URL中直接带上认证信息。比如下面的请求http://username:password@xxx.xxx.xxx.xxx:8761/eureka/apps/PTC/iZ2rderl3j12llZ:ptc:2703