Feign的使用

Posted linlf03

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Feign的使用相关的知识,希望对你有一定的参考价值。

一、Feign实现应用间的通信

声明式REST客户端(伪RPC),采用基于接口的注解。本质上是Http客户端,Http远程调用。

1、 在Order工程中的pom文件增加

		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-openfeign</artifactId>
		</dependency>

  

2、增加注解@EnableFeignClients

 技术分享图片

 

3、声明要调用的接口

package com.example.demo.client;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;

/**
 * 需要在Product服务中要调的接口
 */
@FeignClient(name = "product") //product代表访问product应用下的msg接口
public interface ProductClient {

    @GetMapping("/msg") //
    String productMsg();
}

  

4、在Order应用调用

技术分享图片

 

二、Product工程

1、增加  List<ProductInfo> findByProductIdIn(List<String> productIdList);方法

package com.example.product.repository;

import com.example.product.dataobject.ProductInfo;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;


public interface ProductInfoRepository extends JpaRepository<ProductInfo, String> {
    //查询所有在架的商品
    List<ProductInfo> findByProductStatus(Integer productStatus);

    List<ProductInfo> findByProductIdIn(List<String> productIdList);
}

  

2、Server层

@Service
public class ProductServiceImpl  implements ProductService{

    @Autowired
    private ProductInfoRepository productInfoRepository;


    /**
     * 查询商品列表
     *
     * @param productIdList
     */
    @Override
    public List<ProductInfo> findList(List<String> productIdList) {
        return productInfoRepository.findByProductIdIn(productIdList);
    }
}

 

接口

public interface ProductService {


    /**
     * 查询商品列表
     * @param productIdList
     */
    List<ProductInfo> findList(List<String> productIdList);
}

  

3、Controller层

@RestController
@RequestMapping("/product")
public class ProductController {

    @Autowired
    private ProductService productService;


    /**
     * 获取商品列表(给订单服务用)
     * @param productIdList
     * @return
     */
    @GetMapping("/listForOrder")
    public List<ProductInfo> listForOrder(List<String> productIdList){
        return  productService.findList(productIdList);
    }
}

  

以上是关于Feign的使用的主要内容,如果未能解决你的问题,请参考以下文章

SpringCloud系列六:Feign接口转换调用服务(Feign 基本使用Feign 相关配置)

Feign自定义配置详解

spring cloud中如何通过feign调整负载均衡规则

Feign实现自定义错误处理

使用Swagger生成Spring Boot REST客户端(支持Feign)(待实践)

Feign远程调用