广州wap网站建设,多少钱能注册500万公司,30岁学编程还能找到工作吗,沈阳seo哪家公司Openfeign配置与使用 前言介绍openfeign使用openfeign导入依赖启动类正式使用测试结果 前言
在springcloud中消费者项目需要调用提供者项目的接口#xff0c;一开始用的是RestTemplate中的方法。但是RestTemplate进行远程调用时#xff0c;直接调用controller层的接口#… Openfeign配置与使用 前言介绍openfeign使用openfeign导入依赖启动类正式使用测试结果 前言
在springcloud中消费者项目需要调用提供者项目的接口一开始用的是RestTemplate中的方法。但是RestTemplate进行远程调用时直接调用controller层的接口不符合分层的习惯一般习惯在controller从调用service的接口。
介绍openfeign
Openfeign是springcloud提供的一个声明式http客户端它使得调用远程服务就想调用本地服务一样只需要创建一个接口并添加一个注解即可。 feign的负责均衡默认集成了ribbon所以在nacos下使用feign默认实现了负载均衡。
使用openfeign
测试时我们在消费者项目中调用提供者项目的端口。依赖和启动类中的注解在两个子项目中都需要。
导入依赖
我用的springcloud alibaba的版本是2.2.6.RELEASE dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactIdversion2.2.0.RELEASE/version/dependency启动类
在启动类中增加注解EnableFeignClients
SpringBootApplication
EnableDiscoveryClient
EnableFeignClients
public class StartNacosProvider {public static void main(String[] args) throws Exception {SpringApplication.run(StartNacosProvider.class, args);}
}SpringBootApplication
EnableDiscoveryClient
EnableFeignClients
public class StartNacosConsumer {public static void main(String[] args) throws Exception {SpringApplication.run(StartNacosConsumer.class, args);}
}正式使用
在消费者项目中调用提供者的controller接口所以我们在消费者项目中写feign相关的接口。新建一个feign文件夹在里面新增一个interface类。
FeignClient(value nacos-provider)
public interface ConsumerFeign {RequestMapping(value /nacos/provider/get/{id},method RequestMethod.GET)public String getNacosProvider(PathVariable Integer id);
}下面来解释一下 1
FeignClient(value nacos-provider)nacos-provider 为提供者项目在nacos注册中心中注册的项目名称 2
RequestMapping(value /nacos/provider/get/{id},method RequestMethod.GET)public String getNacosProvider(PathVariable Integer id);为需要调用的提供者项目中的controller层接口。在提供者项目中该接口在controller层是这么写的 RequestMapping(value /nacos/provider/get/{id},method RequestMethod.GET)public String getNacosProvider(PathVariable Integer id){return 使用provider中的方法端口号port传来参数id;}在消费者项目的controller就可以实现上面所写的接口。springcloud会为ConsumerFeign接口类生成一个代理实现类不需要人为创建。
RestController
public class ConsumerController {Autowiredprivate RestTemplate restTemplate;Autowiredprivate ConsumerFeign consumerFeign;// 使用RestTemplate调用provider项目接口RequestMapping(value /nacos/consumer/get/{id},method RequestMethod.GET)public String getNacosConsumer(PathVariable Integer id){return restTemplate.getForObject(http://nacos-provider/nacos/provider/get/id,String.class);}// 使用feign调用provider项目接口RequestMapping(value /nacos/consumer/feign/get/{id},method RequestMethod.GET)public String getNacosConsumerFeign(PathVariable Integer id){return consumerFeign.getNacosProvider(id);}
}provider项目中被调用的controller层接口 RequestMapping(value /nacos/provider/get/{id},method RequestMethod.GET)public String getNacosProvider(PathVariable Integer id){return 使用provider中的方法端口号port传来参数id;}测试结果 可以看到我调用的是consumer项目中的接口而实际输出结果显示调用provider项目接口调用成功。