一,新建Feign工程microservicecloud-consumer-dept-feign,拷贝microservicecloud-consumer-dept-80这个工程的配置和程序
二,修改配置文件pom.xml 引入Feign依赖
<!--Feign的依赖引入-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
三,修改我们的启动类为 DeptConsumer80_Feign_App
package atguigu.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient
public class DeptConsumer80_Feign_App {
public static void main(String[] args) {
SpringApplication.run(DeptConsumer80_Feign_App.class, args);
}
}
四,yml配置文件不用修改
五,修改api(microservicecloud-api)添加新的接口DeptClientService
新增新的注解@FeignClient
package com.atguigu.springcloud.service;
import java.util.List;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.atguigu.springcloud.entities.Dept;
/**
*
* @Description: 修改microservicecloud-api工程,根据已经有的DeptClientService接口
* @author zzyy
* @date 2019年10月20日
*/
@FeignClient(value = "MICROSERVICECLOUD-DEPT")
public interface DeptClientService
{
@RequestMapping(value = "/dept/get/{id}", method = RequestMethod.GET)
public Dept get(@PathVariable("id") long id);
@RequestMapping(value = "/dept/list", method = RequestMethod.GET)
public List<Dept> list();
@RequestMapping(value = "/dept/add", method = RequestMethod.POST)
public boolean add(Dept dept);
}
这样就已经编码完成但是api是我们所有工程的公共部分
注意:因为是公共部分,我们要重新编译,Build Module 'microservicecloud-api'
六,我们编写到这来我们回到microservicecloud-consumer-dept-feign工程修改Controller,
package atguigu.springcloud.controller;
import com.atguigu.springcloud.entities.Dept;
import com.atguigu.springcloud.service.DeptClientService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
import java.util.List;
@RestController
@RequestMapping("/consumer")
public class DeptController_Consumer {
//@Autowired
@Resource
private DeptClientService service;
@RequestMapping(value = "/dept/get/{id}")
public Dept get(@PathVariable("id") Long id)
{
return this.service.get(id);
}
@RequestMapping(value = "/dept/list")
public List<Dept> list()
{
return this.service.list();
}
@RequestMapping(value = "/dept/add")
public Object add(Dept dept)
{
return this.service.add(dept);
}
}
七,我们前面在api定义了新的接口,加了@FeignClient注解使用Feign,那我们的主启动类就要开启,修改主启动类
添加新的注解@EnableFeignClients(basePackages= {"com.atguigu.springcloud"}) 表示开启新的feign调用方式
package atguigu.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.feign.EnableFeignClients;
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients(basePackages= {"com.atguigu.springcloud"})
@ComponentScan("com.atguigu.springcloud")
public class DeptConsumer80_Feign_App {
public static void main(String[] args) {
SpringApplication.run(DeptConsumer80_Feign_App.class, args);
}
}
到这来我们基本就已经完成了基本的编码,那我们来测试下
关于启动:Eureka集群搭建和启动参考:https://blog.csdn.net/ywl470812087/article/details/102594937
启动3个微服务提供者,如果不懂微服务提供者实现请参考https://blog.csdn.net/ywl470812087/article/details/102535582
启动Feign工程:
访问:http://localhost/consumer/dept/get/1
上图测试结果看:默认使用了轮询的负载均衡
总结: