分布式之远程调用服务open-feign

一、 OpenFeign简介

  1.    Feign是一个声明式的Web Service客户端它的出现使开发Web Service客户端变得很简单。使用Feign只需要创建一个接口加上对应的注解,比如:FeignClient注解。Feign有可插拔的注解,包括Feign注解和JAX-RS注解。
Feign也支持编码器和解码器,Spring Cloud Open Feign对Feign进行增强支持Spring MVC注解,可以像Spring Web一样使用HttpMessageConverters等。
Feign是一种声明式、模板化的HTTP客户端。在Spring Cloud中使用Feign,可以做到使用HTTP请求访问远程服务,就像调用本地方法一样的,开发者完全感知不到这是在调用远程方法,更感知不到在访问HTTP请求。

1.引入依赖

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

2.开启远程调用功能


@EnableFeignClients  //激活启用
@EnableDiscoveryClient
@SpringBootApplication
public class GulimallUserApplication {

    public static void main(String[] args) {
        SpringApplication.run(GulimallUserApplication.class, args);
    }

}

3.配置文件:设置超时时间

server:
  port: 80

spring:
  application:
    name: cloud-order-service

eureka:
  client:
    register-with-eureka: false  # 表示不向注册中心注册自己
    fetch-registry: true  #是否从EurekaServer抓取已有的注册信息,默认为true。单节点无所谓,但是集群必须设置为true才能配合ribbon使用负载
    service-url:
      # 设置eureka地址
      defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka

# 设置feign客户端超时时间(openFeign默认支持ribbon)
ribbon:
  # 建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间
  ReadTimeout: 5000
  # 建立连接后从服务器读取到可用资源所用的时间
  ConnectTimeout: 5000

4.声明远程调用接口

调用端的Service接口:

@FeignClient(value = "gulimall-order")    //参数为调用的远程微服务的注册中心显示的名字
public interface OrderFeignService {

    //完整的访问路径
    @RequestMapping("order/order/list")
    public R list(@RequestParam Map<String, Object> params);
}

5.直接注入使用

@RestController
@RequestMapping("user/member")
public class MemberController {
    @Autowired
    private MemberService memberService;

    @Autowired
    private OrderFeignService orderFeignService;

    
    /**
     * 信息
     */
    @RequestMapping("/info/{id}")
   // @RequiresPermissions("user:member:info")
    public R info(@PathVariable("id") Long id){
		MemberEntity member = memberService.getById(id);

		//查询用户订单
        Map<String,Object> params = new HashMap<>();
        params.put("memberId",id);
        R order = orderFeignService.list(params);
        Map<String,Object> map = (Map<String, Object>) order.get("page");
        List<Object> list = (List<Object>) map.get("list");

        return R.ok().put("member", member).put("orders",list);
    }
}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值