Nacos 使用Fegin 远程调用、并负载均衡
2021-08-24 本文已影响0人
CodeYang
一、修改服务提供者层代码。
- 在启动类同级目录新建 controller文件夹,创建 ProviderController 。
@RestController
public class ProviderController {
@Value("${server.port}")
private String port;
@RequestMapping("/provider/hello/{name}")
public String hello(@PathVariable("name") String name){
return name+" Welcome To ProviderController "+port;
}
}
- 为了测试负载均衡,我们又不想再创建一个服务提供者模块者时,就可以通过以下方法解决。
修改当前这个服务提供者的 application.yml,把端口改为动态端口。
server:
port: ${prot:8001} #未设置时,默认为8001
- 修改启动参数
-Dprot=8001
- 我们就可以创建多个启动APP,进行启动
二、修改消费者模块
- 使用 openfegin进行远程调用,pom 中新增 openfegin 依赖
<!-- 远程调用 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
- 创建 service 服务,在启动类同级目录新建 service 文件夹,创建 ConsumerService 服务。
FeignClient 注解中的值为远程服务名,
接口中方法需要跟远程服务方法名相同。
@FeignClient("cloud-provider")
public interface ConsumerService {
@RequestMapping("/provider/hello/{name}")
public String hello(@PathVariable("name") String name);
}
- 创建 controller 控制层代码,在启动类同级目录新建 controller文件夹,创建 ConsumerController 。
这时就可以跟本地方法一样调用 service
@RestController
public class ConsumerController {
//动态代理对象,内部远程调用服务生产者
@Resource
ConsumerService service;
@GetMapping("/consumer/hello/{name}")
public String hello(@PathVariable("name")String name){
return service.hello(name)+" | ConsumerController";
}
}