首先需要在服务消费端编写和服务提供端提供的服务相同的接口,有点类似于 Dubbo
/**
* @author 云梦归遥
* @date 2022/6/22 10:13
* @description
*/
@RestController
@RequestMapping("/products")
public class ProductsController {
@Autowired
private ProductDao productDao;
@RequestMapping("/all")
public List<Products> findAll() {
List<Products> productsList = productDao.selectList(null);
return productsList;
}
@RequestMapping("/{id}")
public Products findById(@PathVariable("id") Integer id) {
Products products = productDao.selectById(id);
return products;
}
// 注入配置文件中的 IP 和 Port
@Value("${server.port}")
private String port;
@Value("${spring.cloud.client.ip-address}")
private String address;
// 通过 Ribbon 负载均衡来验证是否实现负载均衡
@RequestMapping("/info")
public String getServerInfo(){
try {
Thread.sleep(5000);
} catch (Exception e){
System.out.println("/info 方法出现异常");
}
return address + ":" + port;
}
}
public interface PageFeign {
@RequestMapping("/products/all")
public List<Products> findAll();
@RequestMapping("/products/{id}")
public Products findById(@PathVariable("id") Integer id);
@RequestMapping("/products/info")
public String getServerInfo();
}
@FeignClient(name = "ProductDemo")
package com.lagou.controller;
import com.lagou.entity.Products;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* @author 云梦归遥
* @date 2022/6/25 10:05
* @description
*/
@Component // 交给 Spring 进行管理
public class PageFallback implements PageFeign {
@Override
public List<Products> findAll() {
return null;
}
@Override
public Products findById(Integer id) {
return null;
}
@Override
public String getServerInfo() {
return "/page/info 接口Feign远程调用响应超时,自动开启回退";
}
}
package com.lagou.controller;
import com.lagou.entity.Products;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Repository;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.List;
/**
* @author 云梦归遥
* @date 2022/6/25 9:56
* @description
*/
@Repository
@FeignClient(name = "ProductDemo", fallback = PageFallback.class)
public interface PageFeign {
@RequestMapping("/products/all")
public List<Products> findAll();
@RequestMapping("/products/{id}")
public Products findById(@PathVariable("id") Integer id);
@RequestMapping("/products/info")
public String getServerInfo();
}
# 配置 Feign 远程调用
feign:
hystrix:
# 为 Feign 开启 Hystrix熔断机制,就可以使用回调
enabled: true
