SpringCloud 之Eureka和Feign的使用

416 阅读1分钟

Feign和Ribbon 都是做负载均衡的

image.png

在API(pojo)项目创建Service,和服务提供者中的service一样

  • 接口名称可以不一样,就和Dubbo和Zookeeper类似
  • 接口的内容要一致,且在api中的service的接收请求要和服务提供者中的controller要一样

步骤

  1. 导入依赖
  2. 在实体类项目编写service
  3. 在服务消费者的controller中使用实体类项目中的service
  • 导入依赖 在服务提供者导入依赖
    <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-openfeign</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
    </dependencies>
  • 在实体类项目编写service
@Service
@FeignClient(name= "SPRINGCLOUD-PROVIDER-DEPT")//value=服务id
public interface FeignDeptService {
    @RequestMapping(value = "/add")
    boolean addDept(@RequestBody Dept dept);
    @GetMapping("/byId/{id}")
    Dept getById(@PathVariable(value = "id") int id);
    @GetMapping("/getAll")
    List<Dept> getAll();
}
  • 在服务提供者中使用实体类项目中的service

@RestController
public class FeignDeptConsumerController {
    //消费者,不应该有service层
    //RestTemplate提供多种便捷访问远程http服务的方法,简单的restful服务模板
    @Autowired
    private FeignDeptService feignDeptService;
    @GetMapping("/consumer/add/")
    public boolean add(Dept dept){
        return feignDeptService.addDept(dept);
    }
    @GetMapping("/consumer/byId/{id}")
    public Dept getDeptById(@PathVariable(value = "id") int id){
        return feignDeptService.getById(id);
    }
    @GetMapping("/consumer/getAll")
    public List getAll(){
        return feignDeptService.getAll();
    }
}

小结

image.png

用到的注解

    • @FeignClient(name= "SPRINGCLOUD-PROVIDER-DEPT")//value=服务id

在Api接口上

    • @EnableFeignClients//(basePackages = {"com.cloud.service"})

在服务消费者的启动类上,意为扫描声明它们是FeignClient客户端的接口(通过FeignClient @FeignClient )。 配置组件扫描指令,以与org.springframework.context.annotation.Configuration @Configuration一起使用

Ribbon使用RestTemplate进行服务调用,Feign使用接口进行服务调用