【Spring Cloud Alibaba】5.创建服务消费者(Feign)
创始人
2025-06-01 14:11:56
0

文章目录

  • 简介
    • 什么是 Feign
  • 开始搭建
    • 创建项目
    • 修改POM文件
    • 添加启动类
    • 创建 Feign 接口
    • 添加Controller
    • 添加配置文件
  • 启动项目测试
    • 访问Nacos
    • 访问接口
    • 测试负载均衡
      • 通过终端启动多个服务提供者实例

简介

接下里我们创建一个服务消费者,通过Feign来进行与服务提供者交互,本操作先要完成之前的步骤,详情请参照【Spring Cloud Alibaba】Spring Cloud Alibaba 搭建教程

什么是 Feign

Feign是一个声明式的 Web Service 客户端。它的出现使开发 Web Service 客户端变得很简单。使用 Feign 只需要创建一个接口加上对应的注解,比如:@FeignClient 注解。 Feign 有可插拔的注解,包括 Feign 注解和 AX-RS 注解。Feign 也支持编码器和解码器,Spring Cloud Open FeignFeign 进行增强支持 Spring Mvc 注解,可以像 Spring Web 一样使用 HttpMessageConverters 等。

Feign 是一种声明式、模板化的 HTTP 客户端。在 Spring Cloud 中使用 Feign,可以做到使用 HTTP 请求访问远程服务,就像调用本地方法一样的,开发者完全感知不到这是在调用远程方法,更感知不到在访问 HTTP 请求。接下来介绍一下 Feign 的特性,具体如下:

可插拔的注解支持,包括 Feign 注解和AX-RS注解。

  • 支持可插拔的 HTTP 编码器和解码器。
  • 支持 Hystrix 和它的 Fallback
  • 支持 Ribbon 的负载均衡。
  • 支持 HTTP 请求和响应的压缩。

Feign整合了 RibbonHystrix,从而不需要开发者针对 Feign 对其进行整合。Feign 还提供了 HTTP 请求的模板,通过编写简单的接口和注解,就可以定义好 HTTP 请求的参数、格式、地址等信息。Feign 会完全代理 HTTP 的请求,在使用过程中我们只需要依赖注入 Bean,然后调用对应的方法传递参数即可。

总的来说,通过Feign让微服务之间的调用变得更简单,就像controller调用service

开始搭建

我们首先启动之前安装好的nacos,安装参照2.服务注册与发现(Nacos安装),创建方法与4.创建服务消费者大同小异,区别在于引入了Feign的依赖和服务提供者调用的代码调整。

创建项目

在我们之前搭建好的父项目中右击新建->新模块
在这里插入图片描述
为我们的子模块取名字、组ID和工件ID
在这里插入图片描述
创建后目录结构如下
在这里插入图片描述

修改POM文件


spring-cloud-alibabacom.moonce1.0-SNAPSHOT4.0.0moonce-consumer-feignjar1.8org.springframework.bootspring-boot-starter-weborg.springframework.bootspring-boot-starter-actuatororg.springframework.bootspring-boot-starter-testtestcom.alibaba.cloudspring-cloud-starter-alibaba-nacos-discoveryorg.springframework.cloudspring-cloud-starter-openfeigncom.alibaba.cloudspring-cloud-starter-alibaba-sentinelorg.springframework.bootspring-boot-maven-plugincom.moonce.consumer.feign.ConsumerFeignApplication

添加启动类

创建com.moonce.consumer.feign包和ConsumerFeignApplication.java启动类
在这里插入图片描述
ConsumerFeignApplication.java
添加@EnableFeignClients注解,启用Feign功能

package com.moonce.consumer.feign;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class ConsumerFeignApplication {public static void main(String[] args) {SpringApplication.run(ConsumerFeignApplication.class, args);}
}

创建 Feign 接口

创建com.moonce.consumer.feign.service包和FeignService.java
在这里插入图片描述

通过 @FeignClient("服务名") 注解来指定调用哪个服务。代码如下:
FeignService.java

package com.moonce.consumer.feign.service;import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;@FeignClient(value = "moonce-provider")
public interface FeignService {@GetMapping(value = "/test/{message}")String test(@PathVariable("message") String message);
}

添加Controller

新建软件包com.moonce.consumer.feign.controllerConsumerFeignController.java类,目录结构如下
在这里插入图片描述

ConsumerFeignController.java

package com.moonce.consumer.feign.controller;import com.moonce.consumer.feign.service.FeignService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class ConsumerFeignController {@Autowiredprivate FeignService FeignService;@GetMapping(value = "/test/hi")public String test() {return FeignService.test("Hi Feign");}
}

添加配置文件

application.yml

spring:application:name: moonce-consumer-feigncloud:nacos:discovery:server-addr: 127.0.0.1:8848server:port: 9092management:endpoints:web:exposure:include: "*"

目录结构如下
在这里插入图片描述

启动项目测试

依次启动ProviderApplicationConsumerFeignApplication
在这里插入图片描述

访问Nacos

启动完成后,浏览器访问地址http://localhost:8848/nacos,我们会看到两个服务都被注册到Nacos
在这里插入图片描述

访问接口

这时打开 http://localhost:9092/test/hi ,你会在浏览器上看到:
在这里插入图片描述

测试负载均衡

右击服务中的ProviderApplication,复制配置
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
添加端口设置覆盖原来的8081
在这里插入图片描述
然后我们来启动这个复制的启动配置
在这里插入图片描述
成功启动,端口为8082
在这里插入图片描述
查看Nacos,服务提供商变为两个实例
在这里插入图片描述
在浏览器上多次访问 http://localhost:9092/test/hi,浏览器交替显示:
在这里插入图片描述
在这里插入图片描述

通过终端启动多个服务提供者实例

上面是基于idea工具快速设置端口的方法,小伙伴也可以通过maven命令来打包运行多个实例
打开终端
在这里插入图片描述

打包

cd moonce-consumer-feign
mvn '-Dmaven.test.skip=true' clean package

运行

java -jar .\target\moonce-consumer-feign-1.0-SNAPSHOT.jar --server.port=8081

在这里插入图片描述

再新建一个终端
在这里插入图片描述
运行

java -jar .\moonce-consumer-feign\target\moonce-consumer-feign-1.0-SNAPSHOT.jar --server.port=8082

在这里插入图片描述

相关内容

热门资讯

linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
C++ 机房预约系统(六):学... 8、 学生模块 8.1 学生子菜单、登录和注销 实现步骤: 在Student.cpp的...
JAVA多线程知识整理 Java多线程基础 线程的创建和启动 继承Thread类来创建并启动 自定义Thread类的子类&#...
【洛谷 P1090】[NOIP... [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G ...
国民技术LPUART介绍 低功耗通用异步接收器(LPUART) 简介 低功耗通用异步收发器...
城乡供水一体化平台-助力乡村振... 城乡供水一体化管理系统建设方案 城乡供水一体化管理系统是运用云计算、大数据等信息化手段࿰...
程序的循环结构和random库...   第三个参数就是步长     引入文件时记得指明字符格式,否则读入不了 ...
中国版ChatGPT在哪些方面... 目录 一、中国巨大的市场需求 二、中国企业加速创新 三、中国的人工智能发展 四、企业愿景的推进 五、...
报名开启 | 共赴一场 Flu... 2023 年 1 月 25 日,Flutter Forward 大会在肯尼亚首都内罗毕...
汇编00-MASM 和 Vis... Qt源码解析 索引 汇编逆向--- MASM 和 Visual Studio入门 前提知识ÿ...
【简陋Web应用3】实现人脸比... 文章目录🍉 前情提要🌷 效果演示🥝 实现过程1. u...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
windows安装JDK步骤 一、 下载JDK安装包 下载地址:https://www.oracle.com/jav...
分治法实现合并排序(归并排序)... 🎊【数据结构与算法】专题正在持续更新中,各种数据结构的创建原理与运用✨...
在linux上安装配置node... 目录前言1,关于nodejs2,配置环境变量3,总结 前言...
Linux学习之端口、网络协议... 端口:设备与外界通讯交流的出口 网络协议:   网络协议是指计算机通信网...
Linux内核进程管理并发同步... 并发同步并发 是指在某一时间段内能够处理多个任务的能力,而 并行 是指同一时间能够处理...
opencv学习-HOG LO... 目录1. HOG(Histogram of Oriented Gradients,方向梯度直方图)1...
EEG微状态的功能意义 导读大脑的瞬时全局功能状态反映在其电场结构上。聚类分析方法一致地提取了四种头表面脑电场结构ÿ...
【Unity 手写PBR】Bu... 写在前面 前期积累: GAMES101作业7提高-实现微表面模型你需要了解的知识 【技...