Feign环境搭配与知识点记录

一、微服务协作流程

1、在微服务启动时,会向服务发现中心上报自身实例信息,包括:IP地址、端口号信息。

2、微服务会定期从(服务发现中心)获取服务实例列表。

3、当“服务A”调用“服务B”时,ribbon组件从本地服务实例列表中查找“服务B“的实例,如获取了多个实例,这时ribbon会通过用户所配置的负载均衡策略从中选择一个实例。

4、最终,Feign组件会通过ribbon选取的实例发送http请求。

二、在"A服务"中通过Feign调用"B服务"步骤:

前提:A服务和B服务都在注册中心注册

1、“B服务”中Controller方法

    @RequestMapping("/member/list")
    public R membercoupons(){
        CouponEntity couponEntity = new CouponEntity();
        couponEntity.setCouponName("满100减10");
        return R.ok().put("coupons",Arrays.asList(couponEntity));
    }

2、在A服务中引入依赖,版本号由父工程声明

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

feign里面有ribbon依赖

3、在A服务中接口上标注@FeignClient("serviceB"),表明此接口中的方法是调用注册中心中名为“serviceB”的服务

package com.syf.gulimall.member.feign;

@FeignClient("serviceB") 
public interface CouponFeignService {
  //请求B服务
    @RequestMapping("coupon/coupon/member/list")
    public R membercoupons();
}

4、在A服务中spring boot 启动类中标注@EnableFeignClients,表明此项目开启Feign客户端

@EnableFeignClients(basePackages = "com.syf.gulimall.member.feign") 
@SpringBootApplication
@EnableDiscoveryClient
public class GulimallMemberApplication {

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

}

5、在A服务中 controller层 请求A服务 "/coupons"路径,A服务会调用B服务

    @Autowired
    CouponFeignService couponFeignService;

    @RequestMapping("/coupons")
    public R test(){
        R membercoupons = couponFeignService.membercoupons();
        System.out.println(membercoupons);
        return null;
    }

Feign的工作步骤

1、在声明Feign客户端之后,Feign会根据@FeignClient注解使用java的动态代理技术生成代理类,在这里我们指定@FeignClient value为serviceB,则说明这个类的远程目标为spring cloud的服务名称为serviceB的微服务。

2、serviceB的具体访问地址,Feign会交由ribbon获取,若该服务有多个实例地址,ribbon会采用指定的负载均衡策略选取实例。

3、Feign兼容spring的web注解(如:@GetMapping),它会分析声明Feign客户端方法中的Spring注解,得出Http请求method、参数信息以及返回信息结构。

4、当业务调用Feign客户端方法时,会调用代理类,根据以上分析结果,由代理类完成实际的参数封装、远程http请求,返回结果封装等操作。

 

posted @ 2021-11-23 10:10  非帆丶  阅读(86)  评论(0编辑  收藏  举报