Gateway 从 nacos 中获取服务信息|学习笔记

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介: 快速学习 Gateway 从 nacos 中获取服务信息

开发者学堂课程【全面讲解 Spring Cloud Alibaba 技术栈(知识精讲+项目实战)第三阶段Gateway 从 nacos 中获取服务信息】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/685/detail/11888


Gateway 从 nacos 中获取服务信息

内容介绍

一、引言

二、具体步骤


一、引言

在入门案例中,通过客户端向 api 网关发送一个请求,通过 api 网关将请求转发到商品微服务并获取信息的效果,但是,我们也留下了疑问,微服务中具体的地址是写死的,但如果地址端网号变了,那是否要更改具体地址的配置呢?

要更改的话会很不方便,另外一个问题就是目前只有一个 product,我们之前做的product2,在这种情况下我们希望它可以负载均衡,当这种配置也是实现不了负载均衡。

下面入门案例做一点增强。实现地址不再写死,而是从 NACOS 中获取,要实现这种方式,那我们就要将网关作为一种微服务,注册到 NACOS 上,然后向订单微服务一样,做服务发现从这里面拉起的所有微服务的地址和端口号,然后就可以进行转发。

步骤如下,

第一,在网关中加入 NACOS 依赖,

第二,在主类上添加注解,

第三,修改配置文件,修改部分分为三部分,首先是 NACOS 相关的,要把我们的服务注册到 NACOS 上,所以要写一下 NACOS 的地址。

第二部分是开启 API 网关对 gateway 的支持,相当于能让网关从 NACOS 中拉取服务,最后我们要配置,直接写 NACOS 的服务名称,前边的 lb 指的就是负载均衡的意思,那是内部是预置了这样的一种东西,只要这样一写就自带负载均衡,是比较方便的,最后一步测试。


二、具体步骤

1、加入 NACOS 的依赖

<?xm1 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/mave

<parent>

<artifactId>springcloud-alibaba</

artifactid><groupId>com.itheima</groupid><version>1.0-SNAPSHOT</version></parent>

<modelVersion>4.0.0</modelVersion>

<artifactid>api-gateway</artifactid>

<dependencies>

<!--gateway注意此模块不能引入

starter-web--><dependency>

<groupId>org.springframework.cloud</groupid>

<artifactid>spring-cloud-starter-gateway</artifactid></

dependency>

<!--nacos 服务发现-->

<dependency>

<groupId>com.alibaba.cloud</groupid>

<artifactid>spring-cloud-starter-alibaba-nacos-discovery</artifactid></dependency>

</dependencies>

</project>

2、找到我们的组类添加注解

package com.itheima;

import org.springframework.boot.SpringApplication;

import

org.springframework.boot.autoconfigure.SpringBootApplication;import

org.springframework.cloud.client.discovery.EnableDiscoveryclient;

@SpringBootApplication

@EnableDiscoveryClient

public class ApiGatewayApplication{

public static void main(string[] args) {

springApplication.run(ApiGatewayApplication.class);

3、修改配置文件

首先,打通和 NACOS 的连接,地址是 localhost:8848,是注册中心的地址,将gateway 注册到 NACOS。第二,要开启从 NACOS 中获取服务,直接拷贝。

最后修改配置,lb 代表负载均衡,直接写 NACOS 的服务地址。

完整内容如下:

server:

port:7000 spring:

application:

name:api-gateway cloud:

nacos:

discovery:

server-addr: localhost:8848 #将 gateway

注册到 nacos gateway:

di scovery:

locator:

enabled:true#让 gateway从nacos 中获取服务信息

routes:#路由数组[路由 就是指当请求满足什么样的条件的时候转发到哪个微服务上]

- id: product route #当前路由发的标识,要求唯一默认是 UUID

uri:http://localhost:8081#请求最终要被转发到的地址

uri:1b://service-product # lb 指的是负载均衡,后面跟的是具体微服务在nacos 中的标识

order:1#路由的优先级,数字越小代表路由的优先级越高

predicates:#断言(条件判断,返回值是 boolean 转发请求要满足的条件)

- Path=/product-serv/**#当请求路径满足 Path 指定的规则时,此路由信息才会正常转发 filters:#过滤器(在请求传递过程中对请求做一些手脚)

-stripPrefix=1#在请求转发之前去掉一层路径

重新启动 gateway 进行访问测试,使用 product2,发现结果没有问题,这样,我们就解决了上节课遗留的问题,现在我们的网关就和 NACOS 打通了,可以从中拉取服务列表。

除我们使用的增强版之外,还有一个简写版,不需要配置路由,以下部分可以注掉,

routes:#路由数组[路由 就是指当请求满足什么样的条件的时候转发到哪个微服务上]

- id: product route #当前路由发的标识,要求唯一默认是 UUID

uri:http://localhost:8081#请求最终要被转发到的地址

uri:1b://service-product # lb 指的是负载均衡,后面跟的是具体微服务在nacos 中的标识

order:1#路由的优先级,数字越小代表路由的优先级越高

predicates:#断言(条件判断,返回值是 boolean 转发请求要满足的条件)

- Path=/product-serv/**#当请求路径满足 Path 指定的规则时,此路由信息才会正常转发 filters:#过滤器(在请求传递过程中对请求做一些手脚)

-stripPrefix=1#在请求转发之前去掉一层路径

这因为它有默认路由,重启刷新我们看一下效果,发现结果是错的,此时将地址改为 service-product,此时发现结果可用,这表示它默认的做了一个路由,只是将地址与之前的进行了调换,这种方法很少应用。

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
1月前
|
负载均衡 Java 应用服务中间件
Gateway服务网关
Gateway服务网关
52 1
Gateway服务网关
|
22天前
|
Dubbo Cloud Native 应用服务中间件
阿里云的 Dubbo 和 Nacos 深度整合,提供了高效的服务注册与发现、配置管理等关键功能,简化了微服务治理,提升了系统的灵活性和可靠性。
在云原生时代,微服务架构成为主流。阿里云的 Dubbo 和 Nacos 深度整合,提供了高效的服务注册与发现、配置管理等关键功能,简化了微服务治理,提升了系统的灵活性和可靠性。示例代码展示了如何在项目中实现两者的整合,通过 Nacos 动态调整服务状态和配置,适应多变的业务需求。
35 2
|
6天前
|
API
Istio 使用ingress和gateway两种方式公开服务
本文档指导您完成Istio网关的部署与配置。首先安装`istiod`(步骤略过)。接着,创建`ingress.yaml`文件,定义Istio入口网关的服务、部署及权限设置,通过`kubectl apply -f ingress.yaml`命令应用。最后,创建Ingress资源,指定主机名、后端服务及TLS配置,实现对外部请求的路由管理。
13 0
|
1月前
|
数据管理 Nacos 开发者
"Nacos架构深度解析:一篇文章带你掌握业务层四大核心功能,服务注册、配置管理、元数据与健康检查一网打尽!"
【10月更文挑战第23天】Nacos 是一个用于服务注册发现和配置管理的平台,支持动态服务发现、配置管理、元数据管理和健康检查。其业务层包括服务注册与发现、配置管理、元数据管理和健康检查四大核心功能。通过示例代码展示了如何在业务层中使用Nacos,帮助开发者构建高可用、动态扩展的微服务生态系统。
103 0
|
1月前
|
SQL 关系型数据库 数据库连接
"Nacos 2.1.0版本数据库配置写入难题破解攻略:一步步教你排查连接、权限和配置问题,重启服务轻松解决!"
【10月更文挑战第23天】在使用Nacos 2.1.0版本时,可能会遇到无法将配置信息写入数据库的问题。本文将引导你逐步解决这一问题,包括检查数据库连接、用户权限、Nacos配置文件,并提供示例代码和详细步骤。通过这些方法,你可以有效解决配置写入失败的问题。
66 0
|
3月前
|
存储 Java Nacos
学成在线笔记+踩坑(4)——【媒资管理模块】上传图片,Nacos+Gateway+MinIO
媒资管理模块简介、MinIO构建分布式文件系统、MinIO数据恢复演示 、【媒资模块】上传图片
学成在线笔记+踩坑(4)——【媒资管理模块】上传图片,Nacos+Gateway+MinIO
|
3月前
|
SpringCloudAlibaba JavaScript 前端开发
谷粒商城笔记+踩坑(2)——分布式组件、前端基础,nacos+feign+gateway+ES6+vue脚手架
分布式组件、nacos注册配置中心、openfegin远程调用、网关gateway、ES6脚本语言规范、vue、elementUI
谷粒商城笔记+踩坑(2)——分布式组件、前端基础,nacos+feign+gateway+ES6+vue脚手架
|
3月前
|
负载均衡 Java Nacos
SpringCloud基础2——Nacos配置、Feign、Gateway
nacos配置管理、Feign远程调用、Gateway服务网关
SpringCloud基础2——Nacos配置、Feign、Gateway
|
4月前
|
Java API 微服务
服务网关Gateway
该博客文章详细介绍了Spring Cloud Gateway的使用方法和概念。文章首先阐述了API网关在微服务架构中的重要性,解释了客户端直接与微服务通信可能带来的问题。接着,文章通过具体的示例代码,展示了如何在Spring Cloud Gateway中添加依赖、编写路由规则,并对路由规则中的基本概念如Route、Predicate和Filter进行了详细解释。最后,文章还提供了路由规则的测试方法。
服务网关Gateway
|
4月前
|
Kubernetes Nacos 微服务
【技术难题破解】Nacos v2.2.3 + K8s 微服务注册:强制删除 Pod 却不消失?!7步排查法+实战代码,手把手教你解决Nacos Pod僵死问题,让服务瞬间满血复活!
【8月更文挑战第15天】Nacos作为微服务注册与配置中心受到欢迎,但有时会遇到“v2.2.3 k8s 微服务注册nacos强制删除 pod不消失”的问题。本文介绍此现象及其解决方法,帮助开发者确保服务稳定运行。首先需检查Pod状态与事件、配置文件及Nacos配置,确认无误后可调整Pod生命周期管理,并检查Kubernetes版本兼容性。若问题持续,考虑使用Finalizers、审查Nacos日志或借助Kubernetes诊断工具。必要时,可尝试手动强制删除Pod。通过系统排查,通常能有效解决此问题。
89 0