SpringCloudAlibaba[OpenFeign]声明式远程调用

1 OpenFeign简介

1.1 Feign与OpenFeign的区别

1.2 OpenFeign的优点

2 整合OpenFeign

2.1 添加依赖

2.2 启用Feign客户端

2.3 配置Nacos

2.4. 创建Feign客户端接口

2.5. 调用远程服务

2.6.启动服务调用接口


1 OpenFeign简介

         1)Feign是Spring Cloud组件中一个轻量级RESTful的HTTP服务客户端,Feign内置了Ribbon,用来做客户端负载均衡,去调用服务注册中心的服务。Feign的使用方式是:使用Feign的注解定义接口,调用接口,就可以调用服务注册中心的服务。
Feign的依赖

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

        2)OpenFeign是Spring Cloud在Feign的基础上支持了SpringMVC的注解@RequestMapping等等。OpenFeign的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类,实现类中.
OpenFeign的依赖

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

说明:

1、springcloud F 及F版本以上 springboot 2.0 以上基本上使用openfeign。
2、openfeign 如果从框架结构上看就是2019年feign停更后出现版本,也可以说大多数新项目都用
   openfeign,2018年以前的项目在使用feign。

1.2 OpenFeign的优点

        声明式调用:通过注解定义 HTTP 请求,代码更简洁。

        集成 Ribbon:支持客户端负载均衡。

        支持服务发现:与 Eureka、Consul 等服务发现组件无缝集成。

        支持熔断:与 Hystrix、Sentinel 等熔断器集成,提升系统稳定性。

        可扩展:支持自定义拦截器、编码器和解码器,便于扩展和定制化。

2 整合OpenFeign

在Spring Cloud Alibaba框架中整合OpenFeign,可以实现服务之间的远程调用,使得服务间的通信更加简单和高效。以下是整合OpenFeign的步骤和一些关键点:

2.1 添加依赖

在项目的pom.xml文件中添加OpenFeign的依赖。

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

   这一步是整合OpenFeign的基础,通过添加依赖,我们可以在项目中使用Feign客户端进行服务间的调用。

2.2 启用Feign客户端

在Spring Boot应用的启动类上添加@EnableFeignClients注解,以启用Feign客户端。

@EnableFeignClients(basePackages = "com.hd.mall.member.feign")
@SpringBootApplication
@MapperScan("com.hd.mall.member.dao")
@EnableDiscoveryClient
public class MallMemberApplication {

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

}

   这个注解告诉Spring Boot应用,需要扫描并创建Feign客户端接口的实现。

2.3 配置Nacos

        由于Spring Cloud Alibaba整合了Nacos作为服务发现和配置管理的工具,需要在application.properties或application.yml文件中配置Nacos的地址。

spring.application.name=mall-member
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

   这里配置了应用的名称以及Nacos服务器的地址。

2.4. 创建Feign客户端接口

@EnableFeignClients(basePackages = "com.hd.mall.member.feign")

 com.hd.mall.member.feign  定义一个接口并使用@FeignClient注解来指定要调用的服务名。

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

@FeignClient("mall-coupon")
public interface CouponFeignService {
    @RequestMapping("/coupon/coupon/memberList")
    public String memberCouponList();
}

 @FeignClient注解指定了要调用的服务名称,而`@GetMapping`注解定义了一个GET请求。

 mall-coupon服务对应的controller 

@RestController
@RequestMapping("coupon/coupon")
public class CouponController {
    @Autowired
    private CouponService couponService;
    /**
     * 列表
     */
    @RequestMapping("/memberList")
    public R memberList(@RequestParam Map<String, Object> params){
        PageUtils page = couponService.queryPage(params);

        return R.ok().put("memberList", "coupon服务");
    }
}

2.5. 调用远程服务

在需要的地方注入Feign客户端接口,并调用其方法,就像调用本地方法一样。

@RestController
@RequestMapping("member/member")
public class MemberController {

    @Autowired
    private CouponFeignService couponFeignService;
    @RequestMapping("/couponlist")
    public R couponlist(@RequestParam Map<String, Object> params){
        String s = couponFeignService.memberCouponList();
        return R.ok().put("page", "Members").put("coupon",s);
    }
}

   通过注入Feign客户端接口,我们可以在控制器中调用远程服务的方法。

2.6.启动服务调用接口

http://192.168.56.1:8000/member/member/couponlist

上一篇:【前端学习】HTML+CSS+JavaScript 入门教程-3. CSS


下一篇:主键 外键 mybatis