如题,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的控制台
另一个实列的控制台