当初我学习时候就是参考这位大佬的博客: Nacos集成Spring Cloud Gateway 基础使用

现在学习到spring cloud alibaba 使用nacos做服务中心,dubbo做通信,大体流程就是:

  • ​ 先制定要的接口打包上传到云。提供者和消费者都依赖这个接口包

  • ​ 而后新建提供者模块来实现接口,再将服务注册到nacos上面

  • ​ 新建消费者模块来使用接口,消费者去nacos上面寻找提供者根据服务名

  • ​ 消费者到nacos和nacos到提供者都是使用dubbo通信实现。

本篇博客只介绍网关到消费者。首先先创建消费者如下:

1. 新建maven模块nacos-consumer1添加pom依赖

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency> <!--nacos注册发现依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency> <!--如果使用本地nacos,此依赖可以省略,因为云端nacos启动时候会检测云端配置-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

2. 在resources下新建文件bootstrap.yml文件

注:nacos是区分yaml和yml格式的,虽然本地加载时候是会区分的,但是使用云端配置时候就得严格使用yml文件类型,而且本地yaml文件是没有代码提醒的。至于application.yml、application.properties和bootstrap.yml的区别可以百度了解。

server:
port: 8011 #consumer2的端口是8012 spring:
application:
name: nacos-consumer
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
namespace: 5467517c-4121-4275-b459-b92a7a12f508
# nacos上面新建命名空间的id
config: # 本地一般不需要配置中心,如果使用云nacos会报找不到配置的错误,
#这时候需要配置上,或者config.enable: false关闭即可
server-addr: 127.0.0.1:8848
namespace: 5467517c-4121-4275-b459-b92a7a12f508

consumer2上面只是端口不一样,服务名nacos-consumer是一样的,为了测试负载均衡。

3. 创建controller类com.example.controller.HelloController.java

@RestController
@RequestMapping("/testhello")
public class HelloController { @GetMapping("/hello")
public String HelloController(){
// consumer2则修改返回值为consumer2
return "This is nacos-consumer1";
}
}

4. 创建启动类com.example.NacosConsumerOneApplication

@SpringBootApplication
public class NacosConsumerOneApplication {
// consumer创建Two,有区分即可
public static void main(String[] args) {
SpringApplication.run(NacosConsumerOneApplication.class, args);
}
}

5. 接下来创建网关模块nocas-gateway,引入pom依赖

<!--nacos注册发现依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency> <!--如果使用本地nacos,此依赖可以省略,因为云端nacos启动时候会检测云端配置-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

6. 然后在resources下面创建bootstrap.yml文件

server:
port: 8001 spring:
application:
name: nacos-consumer
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
namespace: 5467517c-4121-4275-b459-b92a7a12f508
# nacos上面新建命名空间的id
config: # 本地一般不需要配置中心,如果使用云nacos会报找不到配置的错误,
#这时候需要配置上,或者config.enable: false关闭即可
server-addr: 127.0.0.1:8848
namespace: 5467517c-4121-4275-b459-b92a7a12f508 gateway:
discovery:
locator:
enabled: true #默认false,开启后可以通过ip:port/服务名称/接口地址进行服务转发
# 即: localhost:8001/nacos-consumer/testhello/hello
lower-case-service-id: true #把服务名转换为小写,Eureka 中默认都是大写
#但是nacos不会自动全部转换为大写,除非手动写成大写,所以也可以不写。
routes: # 路由转发:最重要的地方
- id: nacos-gateway-provider #路由的ID,没有固定规则但要求唯一,建议配合服务名
uri: lb://nacos-consumer #匹配后提供服务的路由地址,lb代表负载均衡
predicates:
- Path=/testhello/hello #断言,路径相匹配的进行路由转发

比起消费者来说,网关这里就多了gateway部分,那么将其中可以省略的地方省去就是添加:

server:
port: 8001 spring:
application:
name: nacos-consumer
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
namespace: 5467517c-4121-4275-b459-b92a7a12f508
# nacos上面新建命名空间的id
config: # 本地一般不需要配置中心,如果使用云nacos会报找不到配置的错误,
#这时候需要配置上,或者config.enable: false关闭即可
server-addr: 127.0.0.1:8848
namespace: 5467517c-4121-4275-b459-b92a7a12f508 gateway:
routes: # 路由转发:最重要的地方
- id: nacos-gateway-provider #路由的ID,没有固定规则但要求唯一,建议配合服务名
uri: lb://nacos-consumer #匹配后提供服务的路由地址,lb代表负载均衡
predicates:
- Path=/testhello/hello #断言,路径相匹配的进行路由

7. 接下来创建com.example.NacosGatewayApplication.java

@SpringBootApplication
public class NacosGatewayApplication { public static void main(String[] args) {
SpringApplication.run(NacosGatewayApplication.class, args);
}
}

8. 启动两个消费者,一个网关测试端口

  • 本地nacos登录 http://127.0.0.1:8848/nacos/index.html ,账号密码都是nacos就可以看到配置和服务.

  • 可以通过 http://localhost:8011 和 8012/testhello/hello 测试消费者,就是两个正常的controller

  • 网关启动后通过网关 localhost:8001.testhello/hello 能转发到上面其中一个

  • 测试 http://localhost:8001/testhello/hello 并且不断刷新显示内容会在两个消费者之间相互切换。这就是负载均衡,当然是默认的负载均衡算法,我们也可以自定义。

9. 在标题6中若开启了gateway.discovery.locator.enabled=true

那么网关可以将 http://localhost:8001/nacos-consumer/testhello/hello 识别转发,若关闭则404.

这就是gateway+nacos最基础的配置方法,之后会大概写谓词predicates中的内容和过滤器filter的笔记。


学无止境,代码与生活,谁也不能亏待了。 2021-05-12 22:48:40 星期三

Spring Cloud Gateway + Nacos(1)简单配置的更多相关文章

  1. Spring Cloud 整合 nacos 实现动态配置中心

    上一篇文章讲解了Spring Cloud 整合 nacos 实现服务注册与发现,nacos除了有服务注册与发现的功能,还有提供动态配置服务的功能.本文主要讲解Spring Cloud 整合nacos实 ...

  2. Spring Cloud Gateway+Nacos,yml+properties两种配置文件方式搭建网关服务

    写在前面 网关的作用不在此赘述,举个最常用的例子,我们搭建了微服务,前端调用各服务接口时,由于各服务接口不一样,如果让前端同事分别调用,前端同事会疯的.而网关就可以解决这个问题,网关屏蔽了各业务服务的 ...

  3. Spring Cloud Gateway 跨域 CORS 配置方式实现

    网上找了一堆文章全是说这样写无效 globalcors: cors-configurations: '[/**]': allowCredentials: true allowedOriginPatte ...

  4. springcloud3(五) spring cloud gateway动态路由的四类实现方式

    写这篇博客主要是为了汇总下动态路由的多种实现方式,没有好坏之分,任何的方案都是依赖业务场景需求的,现在网上实现方式主要有: 基于Nacos, 基于数据库(PosgreSQL/Redis), 基于Mem ...

  5. Spring Cloud Gateway 没有链路信息,我 TM 人傻了(上)

    本系列是 我TM人傻了 系列第五期[捂脸],往期精彩回顾: 升级到Spring 5.3.x之后,GC次数急剧增加,我TM人傻了 这个大表走索引字段查询的 SQL 怎么就成全扫描了,我TM人傻了 获取异 ...

  6. Spring Cloud Gateway的动态路由怎样做?集成Nacos实现很简单

    一.说明 网关的核心概念就是路由配置和路由规则,而作为所有请求流量的入口,在实际生产环境中为了保证高可靠和高可用,是尽量要避免重启的,所以实现动态路由是非常有必要的:本文主要介绍 Spring Clo ...

  7. Spring Cloud gateway 六 Sentinel nacos存储动态刷新

    微服务当前这么火爆的程度,如果不能学会一种微服务框架技术.怎么能升职加薪,增加简历的筹码?spring cloud 和 Dubbo 需要单独学习.说没有时间?没有精力?要学俩个框架?而Spring C ...

  8. 搭建一套ASP.NET Core+Nacos+Spring Cloud Gateway项目

    前言     伴随着随着微服务概念的不断盛行,与之对应的各种解决方案也层出不穷.这毕竟是一个信息大爆发的时代,各种编程语言大行其道,各有各的优势.但是有一点未曾改变,那就是他们服务的方式,工作的时候各 ...

  9. 通过Nacos动态刷新Spring Cloud Gateway的路由

    通过Nacos动态刷新Spring Cloud Gateway的路由 一.背景 二.解决方案 三.实现功能 四.实现步骤 1.网关服务的实现 1.pom文件 2.bootstrap.yml配置文件 3 ...

随机推荐

  1. css整理之-----------技巧、黑魔法

    css 看起来比较简单,但是要想做的好也不是那么容易,我们在平时开发中,主要用css 来美化我们的html结构,所有我觉得css 还是挺重要的,这里记录整理一些关于css 的技巧以及容易忘记的知识点. ...

  2. python类属性

    类属性 类属性分为共有属性和私有属性. 私有属性的定义方法eg:__age(若无次定义则默认为公有属性) 类属性举例: class people: name = "china" _ ...

  3. 使用jQuery实现ajax请求

    <%-- Created by IntelliJ IDEA. User: Administrator Date: 2021/3/13 Time: 14:54 To change this tem ...

  4. 力扣 - 92. 反转链表II

    目录 题目 思路1(迭代) 代码 复杂度分析 思路2(递归) 代码 复杂度分析 题目 92. 反转链表 II 思路1(迭代) 将反转链表分成3个部分:前一段未反转的部分.待反转链表部分.后一段未反转部 ...

  5. Spring Boot MVC 单张图片和多张图片上传 和通用文件下载

    @Autowired private ServerConfig serverConfig; /** * 通用下载请求 * * @param fileName 文件名称 * @param delete ...

  6. 基于Hive进行数仓建设的资源元数据信息统计:Hive篇

    在数据仓库建设中,元数据管理是非常重要的环节之一.根据Kimball的数据仓库理论,可以将元数据分为这三类: 技术元数据,如表的存储结构结构.文件的路径 业务元数据,如血缘关系.业务的归属 过程元数据 ...

  7. 从阿里云迁移分布式redis实例到华为云解决方案(详细)

    如果要换多数是经济因素啦- 一. 准备工作 先在华为云上买一台redis数据库,配置一定要注意多数要保持一致,至于4.0还是5.0倒问题不大亲测兼容 可用区要找现有ECS云主机中的相同的机器.记下:这 ...

  8. [递推]D. 【例题4】传球游戏

    D . [ 例 题 4 ] 传 球 游 戏 D. [例题4]传球游戏 D.[例题4]传球游戏 题目解析 设 t ( i , j ) t(i,j) t(i,j)为过了 j j j轮,轮到 i i i手上 ...

  9. 附034.Kubernetes_v1.21.0高可用部署架构二

    kubeadm介绍 kubeadm概述 Kubeadm 是一个工具,它提供了 kubeadm init 以及 kubeadm join 这两个命令作为快速创建 kubernetes 集群的最佳实践. ...

  10. 05_pytorch的Tensor操作

    05_pytorch的Tensor操作 目录 一.引言 二.tensor的基础操作 2.1 创建tensor 2.2 常用tensor操作 2.2.1 调整tensor的形状 2.2.2 添加或压缩t ...