SpringCloud:Feign(工程構建)
阿新 • • 發佈:2021-01-03
1、概念
(1)概述
Feign是一個宣告式的Web服務客戶端,使得編寫Web服務客戶端變得非常容易,只需要建立一個介面,然後在上面添加註解即可。
2、Feign工程構建
(1)模仿消費者(80)新建一個Feign模組,並新增Feign的依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId> </dependency>
(2)修改公共模組
- 新增Feign的依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId> </dependency>
- 建立介面
註解的引數中帶有微服務的名稱,通過該名稱獲取服務
@FeignClient(value = "PROVIDER") 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); }
(3)建立消費者模組
@RestController public class DeptConsumerController { @Autowired private DeptClientService service = null; @RequestMapping(value = "/consumer/dept/get/{id}") public Dept get(@PathVariable("id") Long id) { return this.service.get(id); } @RequestMapping(value = "/consumer/dept/list") public List<Dept> list() { return this.service.list(); } @RequestMapping(value = "/consumer/dept/add") public Object add(Dept dept) { return this.service.add(dept); } }
- 啟動類
@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class,HibernateJpaAutoConfiguration.class}) @EnableEurekaClient @EnableFeignClients(basePackages= {"com.zhb"}) @ComponentScan("com.zhb") public class DeptConsumer80_Feign_App { public static void main(String[] args) { SpringApplication.run(DeptConsumer80_Feign_App.class,args); } }
(4)RestTemplate 方式
消費者模組程式碼:
與Feign相比,RestTemplate 方式不需要在公共類裡面新增介面,Feign是在接口裡面的註解新增微服務的名稱即可。
@RestController public class DeptConsumerController { private static final String REST_URL_PREFIX = "http://PROVIDER"; @Autowired private RestTemplate restTemplate; @RequestMapping(value = "/consumer/dept/add") public boolean add(Dept dept) { return restTemplate.postForObject(REST_URL_PREFIX + "/dept/add", dept, Boolean.class); } @RequestMapping(value = "/consumer/dept/get/{id}") public Dept get(@PathVariable("id") Long id) { return restTemplate.getForObject(REST_URL_PREFIX + "/dept/get/" + id, Dept.class); } @SuppressWarnings("unchecked") @RequestMapping(value = "/consumer/dept/list") public List<Dept> list() { return restTemplate.getForObject(REST_URL_PREFIX + "/dept/list", List.class); } }
配置類:
@Bean @LoadBalanced public RestTemplate template(){ return new RestTemplate(); }