SpringCloud使用Fegin封装Http接口调用_类RPC

关键词:@FeignClient,@EnableFeignClients

1、Fegin简介

        Fegin是声明式、模块化的Http客户端,即封装http请求,实现快捷、优雅HTTP接口的调用。在SpringCloud中,可方便地创建一个Feign客户端:只需声明一个接口,并接口上加上@FeignClient注解,在边缘服务端就能完成对HTTP接口的调用;让开发者感觉仿佛是在controller中调用service中的方法。

2、服务器端

2.1、服务端controller

普通的controller,无特别之处。

/**
 * 接口
 */
@Api(tags = "**接口", description = "**数据信息",
        consumes = MediaType.APPLICATION_JSON_UTF8_VALUE,
        produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@RestController
@RequestMapping("/product")
public class ProductCtrl {

    private static final Logger log = LoggerFactory.getLogger(ProductCtrl.class);

    @Resource(name = "productService")
    private ProductService productService;

    @Resource
    private CompanyService companyService;

    @ApiOperation(value = "查询分页列表_FOR_PC")
    @PostMapping("/page")
    public Page<ProductVO> page(@RequestBody ProductPageableVO vo) {
        Page<ProductVO> page = productService.page(vo);
        if (CollectionUtils.isEmpty(page.getData())) {
            return page;
        }
        for (ProductVO productVO : page.getData()) {
            Company company = companyService.findComByCode(productVO.getCompanyCode());
            productVO.setCompanyName(null != company ? company.getShortName() : "");
            productVO.setInsureTypeName(InsureTypeEnum.getValueByCode(productVO.getInsureType()));
            productVO.setNeedRecord(1 == productVO.getNeedRecordFlag() ? "需要记录" : "不需记录");

        }
        return page;
    }
}

 2.2、@FeignClient注解

 @FeignClient注解被@Target(ElementType.TYPE)修饰,表示FeignClient注解的作用目标在接口上,Feign包装的http请求。

/**
 * 远程服务
 */
@FeignClient(name = ServiceProvider.INSURE_SERVICE)
public interface RemoteProductService {

    @PostMapping("/product/page")
    Page<ProductVO> page(@RequestBody ProductPageableVO vo);
}

3、边缘服务端

3.1、@EnableFeignClients

启用feign客户端;如果不写包名,那么默认找启动类包下面的feignClient。

import com.myfutech.customer.service.api.remote.RemoteCustomerInfoService;
import com.myfutech.employee.service.api.remote.RemoteEmployeeWaitForEntryService;
import com.myfutech.insure.service.api.remote.RemoteCompanyService;
import com.myfutech.user.service.api.remote.RemoteUserService;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@EnableFeignClients(basePackageClasses = {RemoteProductService.class})
@Configuration
public class FeignConfig {

    @LoadBalanced
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

 3.2、边缘服务controller类

普通的controller,也无什么特别之处

/**
 * 相关接口
 */
@Api(tags = "**管理_相关接口", description = "**管理",
        consumes = MediaType.APPLICATION_JSON_UTF8_VALUE,
        produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@RestController
@RequestMapping("/product")
public class ProductCtrl {

    private static final Logger log = LoggerFactory.getLogger(ProductCtrl.class);

    @Resource
    private RemoteProductService remoteProductService;

    @ApiOperation(value = "分页查询")
    @PostMapping("/page")
    public Responses<Page<ProductVO>> page(@RequestBody ProductPageableVO vo) {
        Page<ProductVO> list = remoteProductService.page(vo);
        return Responses.success(list);
    }
}

 

发布了330 篇原创文章 · 获赞 235 · 访问量 40万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 创作都市 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览