使用openFeign替代RestTemplate
1、添加依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>lemon-alibaba</artifactId>
<groupId>com.lemon.alibaba</groupId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>lemon-openFeign</artifactId>
<properties>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- 由于Spring Cloud Feign在Hoxton.M2 RELEASED版本之后不再使用Ribbon而是使用spring-cloud-loadbalancer,所以不引入spring-cloud-loadbalancer会报错.
加入spring-cloud-loadbalancer依赖 并且在nacos中排除ribbon依赖,不然loadbalancer无效-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
<!-- openfeign的依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies>
</project>
2、启动类添加注解:
@SpringBootApplication
@EnableFeignClients
public class OpenApplocation {
public static void main(String[] args) {
SpringApplication.run(OpenApplocation.class,args);
}
}
3、feign接口配置类:
package com.lemon.open.feign;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.GetMapping;
//name 表示需要调用的服务的名称
// path 表示调用服务所在的controller类主机的接口地址,如果没有可以不写
@FeignClient(name = "stock-service",path = "/stock")
public interface StockFeignService {
// 声明需要调用的方法
// 此方法和服务提供者的接口保持一致
@GetMapping("/index")
String index();
}
4、调用,和普通的service一样调用即可
@RestController
@RequestMapping("/feign")
public class IndexController {
@Autowired
private StockFeignService stockFeignService;
@GetMapping("/index")
public String index(){
String ss = stockFeignService.index();
return "ok-=-==" + ss;
}
}