【Spring Cloud Alibaba】OpenFeign的使用

news2024/11/17 8:22:19

Feign is a Java to HTTP client binder inspired by Retrofit, JAXRS-2.0, and WebSocket. Feign’s first goal was reducing the complexity of binding Denominator uniformly to HTTP APIs regardless of ReSTfulness.
Feign是一个Java到HTTP的客户端绑定器,灵感来自于Retrofit、JAXRS-2.0和WebSocket。fake的第一个目标是降低将分母统一绑定到HTTP api的复杂性,而不管ReSTfulness如何。

文章目录

    • 🌍第一步,添加jar包依赖
    • 🌍第二步,启动类上添加`@EnableFeignClients`注解
    • 🌍第三步,创建生产者
    • 🌍第四步,创建openFeign的client
    • 🌍第五步,添加openFeign的controller接口
    • 🌍第六步,编写启动类
    • 🌍第七步,编写配置文件
    • 🌍第八步,启动生产者和消费者(feign)

在微服务架构中,服务之间的调用是非常常见的场景。Spring Cloud Alibaba提供了一套优秀的解决方案,其中之一就是OpenFeign。OpenFeign是一个基于Java编程语言的声明式HTTP客户端,它简化了服务之间的远程调用过程,并提供了一种优雅的编程方式。本文将介绍如何在Spring Cloud Alibaba项目中使用OpenFeign。

在使用上面openFeign和Feign几乎没有任何的区别

  • openFeign我们一般配合nacos使用
  • Feign我们配合Eureka使用

🌍第一步,添加jar包依赖

  <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- 添加 nacos 框架依赖 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>0.2.2.RELEASE</version>
        </dependency>
        <!-- 添加 openfeign 框架依赖 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>2.2.6.RELEASE</version>
        </dependency>

    </dependencies>

🌍第二步,启动类上添加@EnableFeignClients注解

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;

@SpringBootApplication
@EnableFeignClients
public class OpenFeignApplication {
    public static void main(String[] args) {
        SpringApplication.run(OpenFeignApplication.class, args);
    }
}

🌍第三步,创建生产者

生产者类代码地址:
https://gitee.com/WangFuGui-Ma/spring-cloud-alibaba/tree/master/nacos/discovery/provider

在这里插入图片描述

🌍第四步,创建openFeign的client

即openFeign调用生产者的接口,注意这里是一个接口

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

@FeignClient("service-provider")
public interface ConsumeClient {

    @RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
    String echo(@PathVariable String str);
}

@FeignClient 填写生产者的服务名称
@RequestMapping填写生产者的rest路径

🌍第五步,添加openFeign的controller接口

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@RestController
public class ConsumerController {

    @Autowired
    ConsumeClient client;

    @RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
    public String echo(@PathVariable String str) {
        return client.echo(str);
    }
}

🌍第六步,编写启动类

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.openfeign.EnableFeignClients;

@SpringBootApplication
@EnableFeignClients
public class OpenFeignApplication {
    public static void main(String[] args) {
        SpringApplication.run(OpenFeignApplication.class, args);
    }
}

注意添加@EnableFeignClients注解开启feign

🌍第七步,编写配置文件

application.yml

spring:
  application:
    name: openfeign-consumer
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

server:
  port: 8099

🌍第八步,启动生产者和消费者(feign)

这个时候nacos已经注册进来了

在这里插入图片描述
调用我们的feign业务层获取生产者数据

流程图(引用)

在这里插入图片描述
类似 RestTemplate,本质上是 OpenFeign 的底层会用到 JDK 的HttpURLConnection 发出 HTTP 请求。

注册中心的作用只是告诉消费者服务端的地址。

通过本文的介绍,我们了解了Spring Cloud Alibaba中OpenFeign的使用。我们首先学习了如何配置和启用OpenFeign客户端,并使用注解实现接口的声明性远程调用。

OpenFeign作为Spring Cloud Alibaba的核心组件之一,为微服务架构中的服务间通信提供了便捷和灵活的解决方案。希望本文能够对您理解和使用OpenFeign提供一些帮助,并在实际项目中发挥其价值。如果您对Spring Cloud Alibaba和OpenFeign有更多兴趣,建议深入学习相关文档和示例,以便更好地应用于实际开发中。

代码地址
https://gitee.com/WangFuGui-Ma/spring-cloud-alibaba

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/712692.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

点云模型概述

点云与三维图像 三维图像是一种特殊的信息表达形式&#xff0c;其特征是表达的空间中三个维度的数据。和二维图像相比&#xff0c; 三维图像借助第三个维度的信息&#xff0c;可以实现天然的物体和背景解耦。 对于视觉测量来说&#xff0c;物体的二维信息往往随射影方式而变化…

2023年,从初级岗进阶到中级测试工程师岗,突破内卷...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 初级测试如何成长…

vue3----解决字体包太大响应慢以及打包文件大的问题 解决font-spider 报错问题

vue3----解决字体包太大响应慢以及打包文件大的问题 && 解决font-spider 报错问题 前言&#xff1a;使用font-spider压缩字体&#xff08;亲测可用&#xff09; 参考链接&#xff1a;https://blog.csdn.net/nanchen_J/article/details/126973856 一、解决字体包太大响应…

【报错】ros1中使用opencv4.8时,报错Segmentation fault

现象&#xff1a; ubuntu18.04下&#xff0c;使用ros1进行opencv4.8&#xff0c;操作opencv2库的时候报错了 原因&#xff1a; cmakelists.txt中不要加 ${catkin_LIBRARIES} 否则ros在执行时会导入默认的3.2.0版本&#xff0c;与4.8.0冲突。

Mybatis-Plus不能更新对象字段为空值问题解决

问题描述&#xff1a; 在使用Mybatis-Plus调用updateById方法进行数据更新默认情况下是不能更新空值字段的&#xff0c;而在实际开发过程中&#xff0c;往往会遇到需要将字段值更新为空值的情况&#xff0c;该如何解决呢&#xff1f; 原因分析&#xff1a; Mybatis-Plus中字…

esp8266学习记录

前言 本文主要介绍了esp8266固件的烧写和基本AT指令&#xff0c;然后结合stm32开发板实现三个实验。分别是手机远程控制开发板LED&#xff1b;开发板温度传感器数据和光强上传到云平台实时监控&#xff1b;从云平台获取数据来控制开发板板载资源。每个实验我都保留了工程源和效…

[AJAX]原生AJAX——自定义请求头

客户端 <script>// 1、创建对象const xhr new XMLHttpRequest();// 2、初始化&#xff1a;设置请求类型和urlxhr.open(POST, http://127.0.0.1:8000/server);// 设置请求头// Content-Type&#xff1a;设置请求体内容类型// application/x-www-form-urlencoded&#xf…

分布式服务一篇概览

分布式服务开发复杂于服务间交互&#xff0c;协调&#xff0c;治理等。服务的复杂性由应用本身转移到了网络交互层。 一、关于12-factor问题 在开发分布式服务时&#xff0c;我们通常会考虑如12-factor 问题&#xff0c;如配置中心、无状态化、日志等。 一个代码库&#xff…

数通王国历险记之地址分析协议(ARP)

系列文章目录 数通王国历险记&#xff08;4&#xff09; 目录 前言 一&#xff0c;什么是地址解析协议&#xff08;ARP&#xff09; 二&#xff0c;封装和解封装 三&#xff0c;为什么需要地址解析协议&#xff08;ARP&#xff09; 四&#xff0c;ARP的验证实验 4.1&#x…

线程池ThreadPoolExecutor详解以及多种线程池的实现

1、线程池状态含义 ThreadPoolExecutor 使用 int 的高 3 位来表示线程池状态&#xff0c;低 29 位表示线程数量&#xff0c;之所以将信息存储在一个变量中&#xff0c;是为了保证原子性。 具体的高三位与线程池状态如下&#xff0c;引用自网课的图片&#xff1a; 2、构…

【数据库编程】最新版MySQL的JDBC编程(图文演示)

数据库系列文章 1. 零基础带你快速上手SQL语言 2. 玩转表及其数据 3. 上手表设计 4. 索引和事务 5. 最新版MySQL的JDBC编程 文章目录 前言1. 数据库编程的必备条件2. Java的JDBC编程3. JDBC工作原理3.1 数据库驱动包从哪里来 4. JDBC编程4.1 创建 Java 项目4.2 导入数据库驱动包…

使用wkhtmltopdf实现HTML转PDF

wkhtmltopdf注意事项 1.webkit内核的&#xff0c;所以建议使用之前用谷歌浏览器开发好网页 2.目前这个插件不再更新&#xff0c;所以内核老旧&#xff0c;只支持ES5的代码&#xff0c;所以ES6及以上的代码统统不支持&#xff0c;还有字符串拼接的 符号也不能使用&#xff0c…

JMeter录制HTTPS脚本解决办法

目录 前言&#xff1a; 背景 解决方法 前言&#xff1a; 在使用JMeter录制HTTPS脚本时&#xff0c;可能会遇到一些问题&#xff0c;例如SSL证书错误或请求失败等。解决这些问题的一种常见的方法是通过安装并信任服务器的SSL证书来解决。 背景 在对某项目进行脚本录制的时…

银河麒麟服务器v10 sp1 部署 Net6.0 项目

上一篇已经部署了Net6.0环境&#xff0c;本节将实现Net6.0程序部署&#xff0c;打开或新建项目&#xff0c;修改appsettings.json配置&#xff1a; 添加&#xff1a;"urls": "http://*:8061",//linux部署使用&#xff0c;端口可根据需求修改为自己的 在项…

快速幂与64位整数乘法(位运算)

矩阵快速幂和64位整数乘法 矩阵快速幂64位整数乘法 矩阵快速幂 问题链接&#xff1a; AcWing 90. 64位整数乘法 问题描述&#xff1a; 分析 快速幂需要用到位运算的思想&#xff0c;求 a b a^b ab&#xff0c;我们将 b b b转换成二进制的形式&#xff0c;假设 b 7 b7 b7&…

GB50254-2014电气装置安装工程低压电器施工及验收规范

为保证低压电器的安装质量,促进施工安装技术进步&#xff0c;确保设备安装后的安全运行,制定本规范。 本规范适用于交流 50Hz或60Hz额定电压为 1000V 及以下&#xff0c;直流额定电压为 1500V 及以下通用低压电器的安装与验收。不适用于: 1、无需固定安装的家用电器、电工仪器…

数据结构第一章 绪论——走进数据的世界

名人说&#xff1a;唯一可以确定的是&#xff0c;明天会使我们所有人大吃一惊。——阿尔文托夫勒 本篇笔记整理&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; ✔ 课件资料及视频课程学习&#xff1a;王道 数据结构&#xff08…

哪家好用?四款国内外远程桌面软件横测:ToDesk、向日葵、TeamViewer、AnyDesk

一、前言 远程桌面软件对于职场人来说并不陌生&#xff0c;可以说是必备的办公软件之一。在经历过新冠疫情后&#xff0c;大家对于远程办公的认识越来越深入&#xff0c;也就在这段期间&#xff0c;远程桌面软件大范围的应用起来&#xff0c;真正走进大众视野并融入我们的工作和…

探索RabbitMQ的特色功能:释放RabbitMQ尖端特性的潜力

d1、简介 RabbitMQ 是一个功能强大的开源消息中间件&#xff0c;采用 AMQP&#xff08;Advanced Message Queuing Protocol&#xff09;协议来实现可靠的消息传递。它提供了可靠性、灵活性和可扩展性&#xff0c;被广泛应用于分布式系统、微服务架构和异步通信等场景。本文将介…

前台-GoEasy即时通讯

1.先去GoEasy官网下载源码 第一步 App.vue <script setup lang"ts">import { watch, ref, markRaw, reactive, nextTick, provide, InjectionKey } from vueimport headerIndex from /Layout/header/headerIndex.vueimport purchaseHeaderBig from /Layout/hea…