【Spring Cloud Alibaba】5.创建服务消费者(Feign)

文章目录

  • 简介
    • 什么是 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文件

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>spring-cloud-alibaba</artifactId>
        <groupId>com.moonce</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>moonce-consumer-feign</artifactId>
    <packaging>jar</packaging>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <!-- Spring Boot Begin -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- Spring Boot End -->

        <!-- Spring Cloud Begin -->
        <!-- Nacos 注册与发现 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!-- feign  -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <!-- sentinel 熔断 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>
        <!-- Nacos 分布式配置中心 -->
        <!--        <dependency>-->
        <!--            <groupId>com.alibaba.cloud</groupId>-->
        <!--            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>-->
        <!--        </dependency>-->
        <!-- Spring Cloud End-->
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <mainClass>com.moonce.consumer.feign.ConsumerFeignApplication</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

添加启动类

创建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 {

    @Autowired
    private FeignService FeignService;

    @GetMapping(value = "/test/hi")
    public String test() {
        return FeignService.test("Hi Feign");
    }
}

添加配置文件

application.yml

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

server:
  port: 9092

management:
  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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

KDZD程控超低频高压发生器

一、产品概述 本产品接合了现代数字变频技术&#xff0c;采用微机控制&#xff0c;升压、降压、测量、保护自动化。由于电子化&#xff0c;所以体积小重量轻、大屏幕液晶显示&#xff0c;清晰直观、且能显示输出波形、打印试验报告。 设计指标符合《电力设备专用测试仪器通用…

SSM—【笔记】1.1Spring

Spring好处 简化开发&#xff0c;降低企业级开发的复杂性框架整合&#xff0c;高效整合其他技术&#xff0c;提高企业级应用开发与运行效率 简化开发&#xff1a;1、IoC、2、AOP[2.1衍生出事务处理 ] 框架整合&#xff1a;MyBatis、Mybatis-plus、Struts、Struts2、Hibernat…

Android开发-Android常用组件-ToggleButton开关按钮 Switch开关

4.7 开关按钮ToggleButton和开关Switch 1.开关按钮ToggleButton 属性名 说明 android:disabledAlpha 设置按钮在禁用时的透明度 android:textOff 按钮没有被选中时显示的文字 android:textOn 按钮被选中时显示的文字 另外&#xff0c;除了这个我们还可以自己写个 selec…

Spring Cloud之一:注册与发现-Eureka工程的创建

系列目录&#xff08;持续更新。。。&#xff09; Spring Cloud&#xff1a;什么是微服务 Spring Cloud之一&#xff1a;注册与发现-Eureka工程的创建 Spring Cloud之二&#xff1a;服务提供者注册到Eureka Server Spring Cloud之三&#xff1a;Eureka Server添加认证 Spr…

SpringBoot(3)整合Mybatis

文章目录一、导入依赖二、编写配置文件三、在启动类上添加注解&#xff0c;表示mapper接口所在位置四、定义mapper接口五、定义mapper.xml映射文件六、service层七、controller层八、修改idea检查代码的严格程度一、导入依赖 <dependency><groupId>org.mybatis.spr…

华为OD机试题,用 Java 解【新员工座位安排系统】问题 | 含解题说明

华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典本篇题目:新员工座位安排系统 题目 工位…

Ganache 安装

一. 下载Ganache Ganache下载链接 根据系统选择对应安装文件 或者brew安装 brew install --cask ganache 二.打开app 点击quickstart 点击save按钮&#xff0c;保存workspace&#xff0c;此时已启动对应端口为7545 三.打开truffle项目&#xff0c;设置配置文件 我已初始化…

华为OD机试题,用 Java 解【卡片组成的最大数字】问题 | 含解题说明

华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典本篇题目:卡片组成的最大数字 题目 小组…

大数据分析工具Power BI(七):DAX使用场景及常用函数

DAX使用场景及常用函数 Power BI中DAX函数非常多,功能非常强大,下面结合一些实际场景来讲解DAX一些常用的函数,这些场景包含求和、计数、相除、排序、累计、环比、同比,为了更方便后续的可视化展示数据,我们新创建可视化展示的页面,创建一个新表存储后续展示的度量值,具…

iptables-ipset仅允许国内访问---端口白名单

前言&#xff1a;境外肉鸡攻击有点多&#xff0c;并业务无境外访问需求&#xff0c;IDC机房网络防火墙无法实现8K多条的china大陆地址导入&#xff1b;为实现仅china大陆地址访问&#xff0c;在业务端口如这里的80&#xff0c;使用iptables防火墙ipset过滤实现访问控制,对于访问…

HttpMessageConverter

基本介绍 我们进行Web开发&#xff0c;但是前端传入的 JSON 数据到底是如何被解析成 Java 对象作为 API入参的&#xff0c;后端返回的结果又是如何把 Java 对象解析成 返回给前端的&#xff0c;在整个数据流转的过程中&#xff0c;这些工作都是由谁来完成的呢&#xff1f; 从…

【UML建模】类图 类与接口表示方式、关系、基数详解

文章目录1.概述2.类的表示方式2.1.类与接口2.2.属性、方法、访问权限3.类之间的关系3.1.继承与实现3.2.关联、聚合、组合3.2.1.用代码表达关联关系3.2.2.用代码表达组合关系3.2.3.用代码表达聚合关系3.3.依赖3.3.1.依赖关系的代码实现4.基数5.总结1.概述 在我们的日常学习、工…

斐波拉契数列,有人买了一对小兔子,已知小兔子一个月后长成大兔子,大兔子每个月生一对小兔子,问:两年(24个月)之后,他一共有几对兔子。

[01]斐波拉契数列&#xff0c;有人买了一对小兔子&#xff0c;已知小兔子一个月后长成大兔子&#xff0c;大兔子每个月生一对小兔子&#xff0c;问:两年(24个月)之后&#xff0c;他一共有几对兔子。 第i月份大兔子小兔子总兔子1011210131124213532565387851381382192113341034…

Qt 正则表达式匹配失败的一个原因

在Qt中做正则表达式时&#xff0c;遇到一个很坑爹的问题&#xff0c;还是经验不足导致。 在正则表达式中&#xff0c;有很多需要元字符&#xff0c;是需要使用普通字符加转义符号搭配使用的。比如\w&#xff0c;\s。对于这类字符&#xff0c;在Qt中使用时&#xff0c;对\再次进…

Prometheus监控实战系列二十:监控Kubernetes集群(下)

本文承接上篇&#xff0c;在本篇中我们会讲解Prometheus如何应用基于Kubernetes的服务发现功能&#xff0c;检索目标信息并进行监控。 在监控策略上&#xff0c;我们将混合使用白盒监控与黑盒监控两种模式&#xff0c;建立起包括基础设施(Node)、应用容器&#xff08;Docker)、…

【新】(2023Q2模拟题JAVA)华为OD机试 - 时间格式化

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本篇题解:时间格式化 题目 运维工程师…

(一)人工智能应用--深度学习原理与实战--初识深度学习

认识人工智能、机器学习与深度学习的关系 人工智能(Artificial IntelLigence)诞生于20世纪50年代,其简洁定义为:让计算机自动完成通常由人类完成的智力任务。人工智能是一个综合性领域。最早期出现的预定义规则的专家系统(Expert System) -----由程序员精心设计出明确的规则…

Flink从入门到精通之-05 DataStream API

Flink从入门到精通之-05 DataStream API 我们在第 2 章介绍 Flink 快速上手时&#xff0c;曾编写过一个简单的词频统计&#xff08;WordCount&#xff09;程序&#xff0c;相信读者已经对 Flink 的编程方式有了基本的认识。接下来&#xff0c;我们就将开始大量的代码练习&…

基于springboot实现学生成绩管理系统【源码+论文】

16springboot学生成绩管理系统演示录像2022_o8mkp开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Mav…

AirServer手机投屏软件的功能优势特点介绍

AirServer是适用于Mac和PC的先进的屏幕投屏软件&#xff0c;功能是十分强大。它的主要功能在于实时地将移动设备上的图像画面内容投放到电脑设备上&#xff0c;让电脑成为iPad、iPhone等iOS系统设备的大屏显示器。在设备之间建立局域网内的信号发送与接收通道&#xff0c;确保数…