【Spring Cloud Alibaba】5.创建服务消费者(Feign)
创始人
2025-06-01 14:55:07
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

在这里插入图片描述

相关内容

热门资讯

AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWR报告解读 WORKLOAD REPOSITORY PDB report (PDB snapshots) AW...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
群晖外网访问终极解决方法:IP... 写在前面的话 受够了群晖的quickconnet的小水管了,急需一个新的解决方法&#x...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
Azure构建流程(Power... 这可能是由于配置错误导致的问题。请检查构建流程任务中的“发布构建制品”步骤,确保正确配置了“Arti...