springCloud 调用本地暴露的方法 会调注册中心还是只执行本地?

springCloud | 2019-11-06 10:01:47

如题,springCloud 调用本地暴露的方法 会调注册中心还是只执行本地?

意思就是:一个springCloud项目,有一个注册中心,且只有一个业务项目A,项目A上的service方法暴露给注册中心,然后A项目controller调用这个service,现在把项目A部署两个实例,A1,和A2,在A1上调用service,是只执行A1上的service,还是都会执行?

先说结论:只要是暴露给了注册中心,那么调用这个方法,都会以微服务的方式分发到不同的实例中,也就是说始终走注册中心,而不是本地只能调本地。

 

实验:

搭建一个eureka-server,和项目A

项目A中暴露服务接口

@FeignClient(name= "ecg-manager")
public interface Manage {
    @RequestMapping("/generate")
    boolean generate(@RequestBody Collection collection);
}

实现方法

@RestController
public class ManageImpl implements Manage {
    @Override
    public boolean generate(Collection collection) {
        System.out.println("im interface");
        return true;
    }
}

在项目A中调用这个方法

@Autowired
private Manage manage;

@RequestMapping("/testInterface")
public void testInterface(){
	manage.generate(new Collection());
	System.out.println("call interface");
}

 

启动注册中心后,再用不同的端口启动项目A,起两个实例。

 

然后不断的刷新调用http://localhost:8001/testInterface,

发现每个实例控制台都有输出,说明是通过注册中心负载调用的

被调用testInterface的控制台

另一个实列的控制台

 

登录后即可回复 登录 | 注册
    
关注编程学问公众号