# 从浅入深 学习 SpringCloud 微服务架构(六)Feign(2)

news2024/12/20 12:47:46

从浅入深 学习 SpringCloud 微服务架构(六)Feign(2)

一、feign 的配置:

1、从 Spring Cloud Edgware 开始,Feign 支持使用属性自定义 Feign。

对于一个指定名称的 FeignClient(例如该 Feign Client 的名称为 feignName)。

2、Feign 支持如下配置项:

feign:
  client:
    config:
		feignName: ## 定义 Feginclient 的名称
			connecttimeout: 5000 # 相当于Request.Options
			readTimeout: 5000	# 相当于 Request.options			
			1oggerLevel: ful1  # 配置Feign的日志级别,相当于代码配置方式中的 Logger			
			errorDecoder: com.example.simpleErrorDecoder  # Feign 的错误解码器,相当于代码配置方式中的 Errordecoder			
			retryer: com.example.simpleRetryer  # 配置重试,相当于代码配置方式中的 Retryer			
			requestInterceptors:  # 配置拦截器,相当于代码配置方式中的 RequestInterceptor
				-com.example.FooRequestInterceptor
				- com.example.BarRequestInterceptor
			decode404: false

3、feign 配置项 参数说明:

feignName : FeginClient 的名称。
connectTimeout : 建立链接的超时时长。
readTimeout : 读取超时时长。
loggerLevel : Fegin的日志级别。
errorDecoder : Feign的错误解码器。
retryer : 配置重试。
requestInterceptors : 添加请求拦截器。
decode404 : 配置熔断不处理404异常。

二、 Feign 和 Ribbon 的联系与区别:

1、Ribbon 是一个基于 HTTP 和 TCP 客户端的负载均衡的工具。

它可以在客户端配置 RibbonServerList (服务端列表),
使用 HttpClient 或 RestTemplate 模拟 http 请求,步骤相当繁琐。

2、Feign 是在 Ribbon 的基础上进行了一次改进,是一个使用起来更加方便的 HTTP 客户端。

feign 采用接口的方式,只需要创建一个接口,然后在上面添加注解即可,
将需要调用的其他服务的方法定义成抽象方法即可,不需要自己构建 http 请求。
然后就像是调用自身工程的方法调用,而感觉不到是调用远程方法,使得编写客户端变得非常容易。

3、负载均衡

Feign 中本身已经集成了 Ribbon 依赖和自动配置,
因此我们不需要额外引入依赖,也不需要再注册 RestTemplate对象。

另外,我们可以通过 ribbon.xx 来进行全局配置。
也可以通过服务名 .ribbon.xx 来对指定服务配置。

三、feign 负载均衡测试

1、运行(eureka_service, order_service)两个启动类 和两个 product_service,进行测试

浏览器地址栏输入:http://127.0.0.1:9000/

会发现 product_service 有两个端口 9001 和 9011。

在这里插入图片描述

浏览器地址栏输入:http://127.0.0.1:9001/product/1

正常输出 mysql 数据库的第一条记录:

在这里插入图片描述

浏览器地址栏输入:http://127.0.0.1:9002/order/buy/1

正常输出 mysql 数据库的第一条记录:

在这里插入图片描述

2、启动了两个 shop_service_product,重新测试

可以发现使用 Ribbon 的轮询策略进行负载均衡。

# IDEA2019 如何打开 Run Dashboard 运行仪表面板

浏览器地址栏输入:http://127.0.0.1:9002/order/buy/1

多刷新几次,会发现,输出界面采用轮询的方式。

在这里插入图片描述

四、feign 请示压缩 和 打印 fegin 日志

1、Spring Cloud Feign 支持对请求和响应进行 GZIP 压缩,

以减少通信过程中的性能损耗。通过配置参数即可开启请求与响应的压缩功能。
也可以对请求的数据类型,以及触发压缩的大小下限进行设置。

feign:
	compression:
		request:
			enabled: true  # 开启请求压缩
			mime-types: text/html,application/xml,application/json  # 设置压缩的数据类型,默认此几个类型。
			min-request-size: 2048  # 设置触发压缩的大小下限,默认 2048。
		response:
			enabled: true  # 开启响应压缩

2、fegin 日志配置:

# 配置 feign 日志的输出:
# 日志配置:
	# NONE:不输出日志,
	# BASIC:适用于生产环境追踪问题,
	# HEADERS:在BASIC基础上记录请求和响应头信息,
	# FULL:记录所有。

feign:
  client:
	config:
		service-product:  # 需要调用的服务名称
		  loggerLevel: FULL
logging:
  level:
    djh.it.order.feign.ProductFeignClient: debug
			

3、在消费都子工程(子模块) order_service 中,application.yml 配置文件中,

配置 fegin 日志,进行测试。


##  spring_cloud_demo\order_service\src\main\resources\application.yml

server:
  port: 9002 #端口
#  port: ${port:9002}  # 启动端口设置为动态传参,如果未传参数,默认端口为 9002

spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
#    url: jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai
    url: jdbc:mysql://localhost:3306/shop?useUnicode=true&characterEncoding=utf8
    username: 'root'
    password: '012311'
  application:
    name: service-order #服务名称
  jpa:
    database: MySQL
    show-sql: true
    open-in-view: true

eureka:  # 配置 Eureka
  client:
    service-url:
      defaultZone: http://localhost:9000/eureka/
  instance:
    prefer-ip-address: true  # 使用 ip 地址注册
    instance-id: ${spring.cloud.client.ip-address}:${server.port}

# 配置 feign 日志的输出:
# 日志配置:NONE:不输出日志,BASIC:适用于生产环境追踪问题,HEADERS:在BASIC基础上记录请求和响应头信息,FULL:记录所有。
feign:
  client:
    config:
      service-product:  # 需要调用的服务名称
        loggerLevel: FULL
logging:
  level:
    djh.it.order.feign.ProductFeignClient: debug


4、 浏览器地址栏输入:http://127.0.0.1:9002/order/buy/1

在 idea 控制台 Console 中查看日志信息。

在这里插入图片描述
上一节关联链接:
# 从浅入深 学习 SpringCloud 微服务架构(六)Feign(1)

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

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

相关文章

迅雷不限速破解方法

背景:现在迅雷和百度云的下载速度真的太恶心了,所以总有大佬可以采用厉害的方法进行破解,在网上看了一圈,很多都是骗人或者是无效的,找了一个靠谱的方法,亲测速度能达到10M以上,非常给力。 以下…

linux部署nacos

1.预备环境准备 Nacos 依赖 Java 环境来运行。如果您是从代码开始构建并运行Nacos,还需要为此配置 Maven环境,请确保是在以下版本环境中安装使用: 64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac。64 bit JDK …

私有化部署 Llama3 大模型, 支持 API 访问

私有化部署 Llama3 大模型, 支持 API 访问 视频 https://www.bilibili.com/video/BV1wD421n75p/ 前言 原文 https://ducafecat.com/blog/llama3-model-api-local 通过 ollama 本地运行 Llama3 大模型其实对我们开发来说很有意义,你可以私有化放服务上了。 然后通…

五、yolov8 tensorRT c++部署及接口封装(保姆级教程附源码)

采用 CTensorRT来部署深度学习模型有以下几个优点: 高性能推理:TensorRT是一个高性能的深度学习推理(Inference)优化器,专门为NVIDIA GPU硬件平台设计,能够提供低延迟、高吞吐量的模型推理性能。这意味着在…

12 c++版本的坦克大战

前言 呵呵 这大概是 大学里面的 c 贪吃蛇了吧 有一些 面向对象的理解, 但是不多 这里 具体的实现 就不赘述, 仅仅是 发一下代码 以及 具体的使用 坦克大战 #include<iostream> #include<windows.h> #include<conio.h> #include<ctime> #include…

深度学习基础之《TensorFlow框架(13)—二进制数据》

一、CIFAR-10二进制数据集介绍 1、CIFAR-10数据集 CIFAR-10数据集由10个类别的60000个32x32彩色图像组成&#xff0c;每个类别有6000个图像。有50000个训练图像和10000个测试图像 2、数据集分为五个训练批次和一个测试批次&#xff0c;每个批次有10000个图像 3、data_batch_…

强化SSH服务安全的最佳实践

SSH&#xff08;Secure Shell&#xff09;作为一种广泛应用于Linux和其他类Unix系统中的强大工具&#xff0c;为管理员提供了安全的远程登录和命令执行功能。在现今高度互联的网络环境中&#xff0c;确保SSH服务的安全性显得尤为重要。本文将详细阐述一系列SSH服务的最佳实践&a…

探索文本向量化的新高峰:合合信息acge_text_embedding 模型

前言 文本向量化是将文本数据转换为数值向量的过程。由于计算机只能处理数值数据&#xff0c;文本数据需要被转换成数值形式才能被算法和模型处理。这种向量化的过程使得文本数据能够被机器学习、深度学习等算法有效地处理。文本向量化的方法有多种&#xff0c;其中常见的有以…

输入influx但是无法进入influxdb

问题描述&#xff1a; 博主想通过DockerJmeterInfluxDBGrafana搭建性能测试可视化平台&#xff0c;但是按照别的教程输入influx却无法进入inluxdb&#xff0c;输入输出如下&#xff1a; NAME:influx - Influx ClientUSAGE:influx [command]HINT: If you are looking for the I…

多种方法论的融合,可以把FMEA做得更好——FMEA软件

免费试用FMEA软件-免费版-SunFMEA FMEA&#xff0c;即故障模式与影响分析&#xff0c;是一种预防性质量工具&#xff0c;用于识别产品或过程中潜在的故障模式&#xff0c;评估其对系统的影响&#xff0c;并优先处理那些可能导致严重后果的故障。在实际应用中&#xff0c;单一的…

HashMap常用的API

HashMap好用的API isEmpty()和clear() 例子 package com.example.springbootdemo;import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest;import java.util.HashMap;/*** Author yimeng* Date 2024/4/26 9:27* PackageName:com.…

2024年Q1季度平板电视行业线上市场销售数据分析

Q1季度平板电视线上市场表现不如预期。 根据鲸参谋数据显示&#xff0c;2024年1月至3月线上电商平台&#xff08;京东天猫淘宝&#xff09;平板电视累计销量约360万件&#xff0c;环比下降12%&#xff0c;同比下降30%&#xff1b;累计销售额约99亿元&#xff0c;环比下降28%&a…

Mockaroo - 在线生成测试用例利器

简介&#xff1a;Mockaroo 是一个无需安装的在线工具&#xff0c;用于生成大量的自定义测试数据。它支持多种数据格式&#xff0c;如JSON、CSV、SQL和Excel&#xff0c;并能模拟复杂的数据结构。 历史攻略&#xff1a; 测试用例&#xff1a;多条件下编写&#xff0c;懒人妙用…

《苍穹外卖》Day08部分知识点记录

一、useGeneratedKeys和keyProperty useGeneratedKeys和keyProperty是<insert>标签中的两个属性&#xff0c;用于处理自动生成的主键值。 1. useGeneratedKeys userGeneratedKeys"true"表示启用自动生成主键功能&#xff1b;当useGeneratedKeys设置为true时…

Yolov5 export.py实现onnx模型的导出

查了很多资料&#xff0c;很多用python代码写的&#xff0c;只需要这个库那个库的&#xff0c;最后都没成功。 不如直接使用Yolov5里面的 export.py实现模型的转换。 一&#xff1a;安装依赖 因为yolov5里面的requirments.txt是将这些转换模型的都注释掉了 所以需要解除注释…

Redis网络相关的结构体 和 reactor模式

目录 1. epoll的封装 结构体aeApiStae 创建epoll fd的封装 epoll_ctl的封装 epoll_wait的封装 2. 结构体aeFileEvent、aeFiredEvent、aeTimeEvent 结构体aeFileEvent 结构体aeFiredEvent 结构体aeTimeEvent 3. struct aeEventLoop aeEventLoop相关的函数 1. 创建eve…

pycharm编辑器------快捷键

pycharm编辑器基础快捷键 上下文操作 01PyCharm 有数百个上下文相关操作&#xff0c;可以帮助您转换、改进和修正代码。按 AIt Enter 以调用“显示上下文操作"。 02我们来应用第一个快速修复:移除形参。 03您几乎可以在任何上下文中调用"显示上下文操作"。我们…

前端补充---15

一、新增表单 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head&g…

C++11 数据结构7 队列的链式存储,实现,测试

前期考虑 队列是两边都有开口&#xff0c;那么在链式情况下&#xff0c;线性表的链式那一边作为对头好呢&#xff1f; 从线性表的核心的插入和删除算法来看&#xff0c;如果在线性表链表的头部插入&#xff0c;每次循环都不会走&#xff0c;但是删除的时候&#xff0c;要删除线…

IDEA中配置使用maven和配置maven的中央仓库

1 以汉化后的IDEA为例配置maven 打开idea选择文件 选择 设置 点击>构建.执行.部署 点击>构建工具 点击>Maven 其中Maven主路径 就是我们maven下载解压后的路径 可以通过边上的三个点选择你解压后的绝对路径&#xff0c;也可以直接把解压后的绝对路劲复制过来 以下…