feign和ribbon 原理最后都是为了负载均衡
两者不同点如下
1.ribbon:通过应用名实现服务端的调用
2.feign:底层也是用了ribbon的负载均衡机制,但是调用服务端采用了接口的方式,这种方式更符合java的调用
开始干活:
为了区分及保留原来的消费者,新建一个maven项目
新项目结构图如下:
1、修改pom文件:
<dependencies>
<dependency>
<groupId>org.example</groupId>
<artifactId>springcloud-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
</dependencies>
2、修改配置文件
如果在restTemplate上面开启了@LoadBalanced,在配置文件中就得开启负载均衡
加入以下配置
ribbon:
eureka:
enabled: true
3、添加service接口作为调用
DeptFeignService:
//指定我们的服务名
@FeignClient(value = "SPRINGCLOUD-PROVIEDER-DEPT")
//注入到spring容器
@Component
public interface DeptFeignService {
@GetMapping("/dept/all")
public List<Dept> getDeptAll();
//获取单个员工信息
@GetMapping("/dept/get/{id}")
public Dept getDept(@PathVariable("id")Long id);
//添加员工
@RequestMapping("/dept/add")
public String addDept(@RequestBody Dept dept);
}
4 、在主启动类中加入注解开启feign功能
@SpringBootApplication
@EnableEurekaClient
//开启注解
@EnableFeignClients
public class ApplicationConsumerDept_81 {
public static void main(String[] args) {
SpringApplication.run(ApplicationConsumerDept_81.class,args);
}
}
5、测试
开启一个注册中心及一个生产者就行
然后开始我们的feign消费者