微服务_入门2

文章目录

  • 一、Feign远程调用
  • 二、Gateway服务网关
    • 2.1、为什么需要网关
    • 2.2、gateway快速入门
    • 2.3、断言工厂
    • 2.4、过滤器

一、Feign远程调用

 
来看我们以前利用RestTemplate发起远程调用的代码:
 
在这里插入图片描述
存在下面的问题:

  • 代码可读性差,编程体验不统一(url需要自己在代码中拼写出来)
  • 参数复杂URL难以维护(有时候访问一个页面所携带的参数是非常多的)

Feign是一个声明式的http客户端。其作用就是帮助我们优雅的实现http请求的发送,解决上面提到的问题。
 
通过导包和添加注解后,可以写出一个通用http请求用接口:

@FeignClient("userservice")
public interface UserClient {@GetMapping("/user/{id}")User findById(@PathVariable("id") Long id);
}

这个客户端主要是基于SpringMVC的注解来声明远程调用的信息,比如:

  • 服务名称:userservice
  • 请求方式:GET
  • 请求路径:/user/{id}
  • 请求参数:Long id
  • 返回值类型:User

  这样,Feign就可以帮助我们发送http请求,无需自己使用RestTemplate来发送了。基于UserClient接口可以完成http请求,就像是调用另外一个方法一样,是不是看起来优雅多了:
在这里插入图片描述

二、Gateway服务网关

  Spring Cloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等响应式编程和事件流技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。

2.1、为什么需要网关

  Gateway网关是我们服务的守门神,所有微服务的统一入口。

在这里插入图片描述

  • 身份认证和权限校验:网关作为微服务入口,需要校验用户是是否有请求资格,如果没有则进行拦截。
  • 服务路由、负载均衡:一切请求都必须先经过gateway,但网关不处理业务,而是根据某种规则,把请求转发到某个微服务,这个过程叫做路由。当然路由的目标服务有多个时,还需要做负载均衡。
  • 限流:当请求流量过高时,在网关中按照下游的微服务能够接受的速度来放行请求,避免服务压力过大。

在SpringCloud中网关的实现包括两种:gatewayzuul

  Zuul是基于Servlet的实现,属于阻塞式编程。而SpringCloudGateway则是基于Spring5中提供的WebFlux,属于响应式编程的实现,具备更好的性能。

2.2、gateway快速入门

在application.yml文件中,配置如下(演示路由的功能实现):

server:port: 10010 # 网关端口
spring:application:name: gateway # 服务名称cloud:nacos:server-addr: localhost:8848 # nacos地址gateway:routes: # 网关路由配置- id: user-service # 路由id,自定义,只要唯一即可# uri: http://127.0.0.1:8081 # 路由的目标地址 http就是固定地址uri: lb://userservice # 路由的目标地址 lb就是负载均衡,后面跟服务名称predicates: # 路由断言,也就是判断请求是否符合路由规则的条件- Path=/user/** # 这个是按照路径匹配,只要以/user/开头就符合要求

我们将符合Path 规则的一切请求,都代理到 uri参数指定的地址。

本例中,我们将 /user/**开头的请求,代理到lb://userservice,lb是负载均衡,根据服务名拉取服务列表,实现负载均衡。

整个访问的流程如下:
在这里插入图片描述
路由配置包括:

  1. 路由id:路由的唯一标示

  2. 路由目标(uri):路由的目标地址,http代表固定地址,lb代表根据服务名负载均衡

  3. 路由断言(predicates):判断路由的规则

  4. 路由过滤器(filters):对请求或响应做处理

2.3、断言工厂

  我们在配置文件中写的断言规则只是字符串,这些字符串会被Predicate Factory(断言工厂)读取并处理,转变为路由判断的条件。例如Path=/user/是按照路径匹配,这个规则是由:

org.springframework.cloud.gateway.handler.predicate.PathRoutePredicateFactory类来处理的,像这样的断言工厂在SpringCloudGateway还有十几个,我们不需要记忆,随用随查就好。

断言:是一种在程序设计中的一阶逻辑(例如:一个结果为真或假的逻辑判断表达式),目的是为了表示与验证软件开发者预期的结果。

2.4、过滤器

  GatewayFilter是网关中提供的一种过滤器,可以对进入网关的请求和微服务返回的响应做处理:

在这里插入图片描述
  Spring提供了31种不同的路由过滤器工厂,比如:添加请求头、添加请求参数等。也可以通过实现接口,自己写过滤逻辑。

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

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

相关文章

pg入门15—pg中fts configurations是什么

在 PostgreSQL 中,FTS configurations(全文搜索配置)是用于定义文本分析和搜索行为的设置。这些配置决定了如何处理和解析输入文本,以便进行高效的全文搜索。 主要组成部分 词汇表: 确定哪些词会被视为搜索词&#xf…

C语言指针常量和常量指针

C语言指针常量和常量指针 在 C/C 中,const 关键字用于定义常量。在涉及指针时,const 的使用可以带来不同的含义。下面是几种常见的指针与 const 的组合方式及其含义: 常量指针(Pointer to Constant) const int* ptr;含…

周末愉快!——周复盘

加班的晚上有一个美梦! 周末愉快简单复盘结尾 精华: 在这个信息爆炸的时代,我们的大脑每天都被无数的数据和刺激充斥,以至于我们常常感到应接不暇。然而,正如古人所言:“不飞则已,一飞冲天”&am…

scrapy之setting文件详解

一、使用项目配置文件的好处 1. 集中管理配置 配置文件将各种设定集中管理,避免了在代码中散布配置参数。这使得开发人员能够方便地找到并修改全局参数,不必在代码的各个部分寻找。 2. 提升代码可维护性 配置文件将程序逻辑与具体的配置解耦&#xff0…

2025年最新大数据毕业设计选题-基于Spark分析相关

选题思路 回忆学过的知识(Python、Java、Hadoop、Hive、Sqoop、Spark、算法等等。。。) 结合学过的知识确定大的方向 a. 确定技术方向,比如基于Hadoop、基于Hive、基于Spark 等等。。。 b. 确定业务方向,比如民宿分析、电商行为分析、天气分析等等。。。…

人工智能开发实战辅助诊断应用解析

内容导读 项目分析预备知识项目实战 一、项目分析 1、提出问题 随着人们生活水平的提升和健康意识的增强,民众定期进行身体健康体检已成为常态,这种早期的疾病检测和筛查可以及早发现身体里已经出现的异常体征信息,做出正确诊断和有效处理…

css实现居中的方法

水平居中 1. 行内设置text-align 给父元素设置text-align为center,一般用于实现文字水平居中 2. 给当前元素设置margin:0 auto 原理:块级独占一行,表现为在水平方向上占满整个父容器,当水平方向padding,…

JVM 内存管理详解

Java 虚拟机 (JVM) 是 Java 应用程序的基础,而内存管理则是 JVM 最为核心的功能之一。本篇文章将详细介绍 JVM 如何管理和分配内存,以及如何处理垃圾回收等问题。此外,还将通过一些代码示例和实际项目场景来说明内存管理的重要性,…

navicat无法连接远程mysql数据库1130报错的解决方法

出现报错:1130 - Host ipaddress is not allowed to connect to this MySQL serve navicat,当前ip不允许连接到这个MySQL服务 解决当前ip无法连接远程mysql的方法 1. 查看mysql端口,并在服务器安全组中放开相应入方向端口后重启服务器 sud…

音视频入门基础:AAC专题(7)——FFmpeg源码中计算AAC裸流每个packet的size值的实现

音视频入门基础:AAC专题系列文章: 音视频入门基础:AAC专题(1)——AAC官方文档下载 音视频入门基础:AAC专题(2)——使用FFmpeg命令生成AAC裸流文件 音视频入门基础:AAC…

移动应用开发实验室web组js第一次考核

请简述var,let,const的区别 var var存在变量提升、暂时性死区可以重复赋值 let let不存在变量提升、暂时性死区块级作用域可以重复赋值 const const不存在变量提升、暂时性死区声明时必须定义值块级作用域 解释垃圾回收机制,垃圾回收的方式 垃圾回收机制 如…

【Verilog学习日常】—牛客网刷题—Verilog企业真题—VL77

编写乘法器求解算法表达式 描述 编写一个4bit乘法器模块,并例化该乘法器求解c12*a5*b,其中输入信号a,b为4bit无符号数,c为输出。注意请不要直接使用*符号实现乘法功能。 模块的信号接口图如下: 要求使用Verilog HDL语言实现以上…

水下目标检测数据集 urpc2021

项目背景: 水下目标检测在海洋科学研究、水下考古、海洋资源勘探等多个领域具有重要的应用价值。由于水下环境的复杂性和多变性,传统的人工检测方法存在诸多限制,自动化检测技术的需求日益增加。URPC2021数据集旨在为水下目标检测提供高质量…

蔚来是如何算加电网络的「大账」的?

作者 | 张马也 编辑 | 德新 李斌很忙,连中秋假期也没休息,开着ES8在新疆喀什周边的县区考察。 这次考察的目的,是为了推进「加电县县通」计划的落地。蔚来在一个月前的加电日发布会,推出了这个大胆的计划,要实现全国县…

如何在webots中搭建一个履带机器人

前期准备 下载webotswebots基本知识 a. 官方文档:Webots documentation: Track b. B站教程:webots-超详细入门教程(2020)_哔哩哔哩_bilibili搭建流程 搭建履带机器人主要使用到了webots中的track节点,这个节点是专门用来定义履带的相关属性,模拟履带运动的 首先,创建一个…

C一语言—动态内存管理

目录 一、为什么要有动态内存管理 二、malloc和free (2.1)malloc (2.2)free 三、calloc和realloc (3.1)calloc (3.2)realloc 四、常见的动态内存的错误(举例均为错…

深度学习实战93-基于BiLSTM-CRF模型的网络安全知识图谱实体识别应用

大家好,我是微学AI,今天给大家介绍一下深度学习实战93-基于BiLSTM-CRF模型的网络安全知识图谱实体识别应用。本文介绍了基于深度学习 BiLSTM-CRF 模型的网络安全知识图谱实体识别方法。首先阐述项目背景,强调其在网络安全领域的重要性。接着详细介绍 BiLSTM-CRF 模型原理,包…

sqli-lab靶场学习(四)——Less11-14(post方法)

前言 第1-10关都是get方法,本关开始进入post方法。其实post也好get也好,本质都差不多,使用的技巧也基本相同。 Less11 第11关打开是一个输入用户名密码的界面 显然登陆对话框会使用post方式提交,这里我们尝试在Username一栏通过…

软件工程专业未来发展方向

1. 前端开发(Front-end Development) 简介: 前端开发者专注于网站和应用程序的用户界面和用户体验设计。他们使用HTML、CSS、JavaScript等基本技术,以及React、Angular、Vue.js等前端框架,来创建互动性强、响应迅速的…

Scrapy爬虫实战——某瓣250

# 按照我个人的习惯,在一些需要较多的包作为基础支撑的项目里,习惯使用虚拟环境,因为这样能极大程度的减少出现依赖冲突的问题。依赖冲突就比如A、B、C三个库,A和B同时依赖于C,但是A需要的C库版本大于N,而B…