脚手架2 以nacos为注册中心,基于Gateway构架网关

news2024/11/18 6:25:49

在前一步上已经说明,组件脚手架的第一步就是构建注册中心,由于采用nacos,这些将直接放在配置文件中实现,不再单独搭建eureka。

spring nacos jdk各组件依赖版本推荐

Spring Boot,Spring Cloud,Spring Cloud Alibaba 版本选择说明以及整理归纳_乐之终曲的博客-CSDN博客

版本说明 · alibaba/spring-cloud-alibaba Wiki · GitHub

第一步 创建gateway父类项目parent——maven project,需要注意的,父类项目打包都是pom,而子模块打包都是jar,这一点在springcloud教程中已经说明。

加入springboot基础包,这是所有项目的基础依赖

还可以加入springboot 测试依赖

最重要的是springcloud依赖,一定要选择对版本号,这里选择Hoxton.SR9,对应jdk8

第二步 在父项目中,添加Alibaba系注册中心nacos,引入nacos依赖,该部分依赖全部在网关的parent父类项目上,作为公共依赖来使用。

有关nacos的官方文档参考Spring Cloud Alibaba

在dependencyManagement中引入Alibaba版本依赖

<!-- SpringCloudAlibaba -->
<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-alibaba-dependencies</artifactId>
  <version>${spring.cloud.alibaba.dependencies.version}</version>
  <type>pom</type>
  <scope>import</scope>
</dependency>

在dependencies中引入nacos服务治理发现jar包

<!-- nacos注册发现 注册中心-->
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

完整的pom文件如下:

<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>gateway-parent</groupId>
  <artifactId>gateway-parent</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>pom</packaging>
  <name>gateway-parent</name>
  <description>gateway-parent 网关项目父类项目,总理网关管理</description>
  <modules>
    <module>gateway-manage</module>
  </modules>
  <!--springboot基础包,继承父,可不必,如果确实要用,必须跟下文的spring版本一致,否则报错 -->
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.3.RELEASE</version>
    <relativePath />
  </parent>
  <!-- 在 properties下声明相应的版本信息,然后在 dependency 下引用的时候用 ${} 就可以引入该版本 jar 包了 -->
  <properties>
    <!-- 编码 -->
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <!-- jdk -->
    <java.version>1.8</java.version>
    <!-- SpringBoot、SpringCloud、SpringCloudAlibaba三者的版本最好匹配 -->
    <!-- SpringBoot -->
    <spring.boot.dependencies.version> 2.3.2.RELEASE </spring.boot.dependencies.version>
    <!-- SpringCloud -->
    <spring.cloud.dependencies.version>Hoxton.SR9</spring.cloud.dependencies.version>
    <!-- SpringCloudAlibaba -->
    <spring.cloud.alibaba.dependencies.version> 2.2.6.RELEASE </spring.cloud.alibaba.dependencies.version>
  </properties>
  <!-- 依赖 jar 包版本管理的管理器 -->
  <!-- 如果 dependencies 里的 dependency 自己没有声明 version 元素,那么 maven 就此处来找版本声明。 -->
  <!-- 如果有,就会继承它;如果没有就会报错,告诉你没有版本信息 -->
  <!-- 优先级:如果 dependencies 里的 dependency 已经声明了版本信息,就不会生效此处的版本信息了 -->
  <dependencyManagement>
    <dependencies>
      <!-- spring cloud版本号 -->
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>${spring.cloud.dependencies.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <!--支持Spring Boot 2.1.X,匹配版本2.0.x -->
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>${spring.boot.dependencies.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <!-- SpringCloudAlibaba -->
      <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-alibaba-dependencies</artifactId>
        <version>${spring.cloud.alibaba.dependencies.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>
  <!-- 独立依赖,不依托下方的jar包版本管理的管理器,同步版本管理器中的版本 -->
  <dependencies>
    <!-- springboot 测试依赖 -->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
    <!-- 引入nacos注册中心 -->
    <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
  </dependencies>
  <!-- 构建插件 -->
  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>
</project>

第三步 创建网关子模块,取名gateway,负责所有网关的转发、过滤、限流等业务

核心依赖有两个,Gateway的jar包和springcloud消费者启动包,注明:由于注册中心已经被nacos取代,所以用不到springcloud的注册中心服务包,其余所有的springcloud子模块用到的都是消费者包

依赖如下:

<!-- 添加Gateway作为网关 -->
<dependencies>
  <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
  </dependency>
</dependencies>

在启动配置文件bootstrap.yml中加入nacos注册中心的地址

# bootstrap.yml 先于 application.yml 加载,用来在程序引导时执行
server:
  port: ${SERVER_PORT:8888}
spring:
  application:
    name: gateway
  cloud:
    nacos:
      discovery:
        # 注册中心地址
        server-addr: localhost:8848
        # 用户名,未修改时可省略该项
        username: nacos
        # 密码,未修改时可省略该项
        password: nacos
      config:
        # 配置中心地址
        server-addr: localhost:8848
        # 文件扩展名
        file-extension: yml

 

在启动类上加入注解@EnableDiscoveryClient即可将该服务注册到nacos。

注意:此处没有用Eureka作为注册中心,所以不可以使用注解@EnableEurekaClient,该注解不适用于其他注册中心。共同点是都是能够让注册中心能够发现,扫描到该服务。

第四步 启动项目,关于启动类用springboot方式启动即可,即注解@SpringBootApplication和@EnableDiscoveryClient

@SpringBootApplication(scanBasePackages = { "person.henry.ou.bookkeeping.user", "person.henry.ou.bookkeeping.common" })

scanBasePackages 注解生效范围,表明spring托管的范围

打开nacos管理网站,

http://localhost:8848/nacos/index.html

输入用户名、密码,(默认均为nacos)可在nacos中发现服务:

点击详情可见:

按照图中IP:端口键入浏览器访问:

页面抛出404异常,说明项目正常了。

个人网站:ouhenry.top

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

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

相关文章

HTC Cosmos手柄的坑

HTC Cosmos手柄的坑Unreal蓝图通过手柄射线操作UI用浏览器插件进行游戏界面设计Cosmos手柄遇到的问题Unreal蓝图通过手柄射线操作UI Unreal蓝图通过手柄射线操作UI很简单&#xff0c;虚幻提供一个WidgetInteraction的组件&#xff0c;可以模拟键盘和鼠标操作。 Enable Hit Te…

【最优潮流】二阶锥松弛在配电网最优潮流计算中的应用(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

组件化 – 额外知识补充

1、组件的生命周期 1.1、认识生命周期 什么是生命周期呢&#xff1f; 生物学上&#xff0c;生物生命周期指得是一个生物体在生命开始到结束周而复始所历经的一系列变化过程&#xff1b;每个组件都可能会经历从创建、挂载、更新、卸载等一系列的过程&#xff1b;在这个过程中…

升级 Node 版本教程

【node】升级 Node 版本教程 文章目录 Window 系统Mac 或 Linux系统 Window 系统 window系统升级node只能到node官网下载window安装包来覆盖之前的node。node 安装教程附下载地址&#xff1a;https://blog.csdn.net/qq_45677671/article/details/114535955因为 n 模块是不支…

transformers学习笔记3

创建model的方法automodel创建预训练模型使用automodel直接创建&#xff0c;使用的是hug face官网上的预训练好的模型参数&#xff0c;完成创建后再使用自己本地的数据集进行迁移训练automodel api 去官网上下载用户指定类型模型的config file 和model file&#xff0c;config说…

【Rvnc】基于noVnc集成的远程终端管理平台

新年好&#xff01;祝各位小伙伴们新年快乐&#xff01;工资翻倍&#xff01; 项目介绍 项目地址&#xff1a;https://github.com/LogestCai/Rvnc 基于noVNC、C#和easyAdmin快速开发的远程管理平台。 可快速部署企业内部远程管理平台&#xff0c;方便企业运维管理。 安装教程…

I.MX6ULL裸机开发笔记6:GPIO控制原理

目录 一、了解GPIO 二、时钟 三、引脚复用 四、引脚属性 五、控制GPIO总结 六、硬件原理图 一、了解GPIO 数量 5组GPIO&#xff08;GPIO1~GPIO5&#xff09;,每组最多32个&#xff0c;共124个 GPIO1_IO0——GPIO1_IO31GPIO2_IO0——GPIO2_IO21GPIO3_IO0——GPIO3_IO2…

#C. wll 的糖果分配

说明过年啦&#xff01;wll 带着好多好多的糖果回到家里&#xff0c;打算分给弟弟妹妹们她一共带回了 66 种不同的糖果&#xff0c;第 ii 种糖果的美味度为 ii&#xff0c;共有 a_iai 颗但是弟弟们和妹妹们不想在一起玩&#xff0c;他们想分别拿走糖果&#xff0c;各自玩耍那么…

物联网到底是什么,生活中能用得上吗?

物联网在近些年以来一直都是热点&#xff0c;人人都在提物联网。但物联网到底是什么&#xff1f;究竟能做什么&#xff1f;说起物联网&#xff0c;你是不是感到既熟悉又陌生&#xff1f;没错&#xff0c;从随处可见的射频技术&#xff0c;智能穿戴&#xff0c;智能电器&#xf…

Android 系统 Framework 中定制实现开关机动画实践

文章目录写在前面需求背景主要问题接口测试权限问题对比测试最后实现方案其他问题总结写在前面 本文主要记录了在Android 10 系统 定制开关机动画时遇到的权限&#xff08;读写&#xff09;问题以用开关机动画资源的流程、文件要求等问题。 涉及知识点&#xff1a; Linux中文件…

【iOS】—— 工厂设计模式

工厂设计模式 文章目录工厂设计模式设计模式概念设计模式七大准则开闭原则单⼀职责原则里氏替换原则依赖倒转原则接口隔离原则迪米特法则合成复用原则类族模式简单工厂模式优点缺点主要作用示例文件分类实现效果&#xff1a;工厂方法模式优点缺点主要作用&#xff1a;示例&…

Ceres 目标函数(pose_graph_3d使用之)构建学习笔记

问题说明 ceres-solver库是google的非线性优化库&#xff0c;可以对slam问题&#xff0c;机器人位姿进行优化&#xff0c;使其建图的效果得到改善。pose_graph_3d是官方给出的二维平面上机器人位姿优化问题&#xff0c;需要读取一个g2o文件&#xff0c;运行程序后返回一个pose…

Android 课设之个人音乐播放器

第一章 绪论1.1选题背景由于时代快速发展&#xff0c;各种各样的音乐播放器层出不穷&#xff0c;此时需要一个可以根据个人爱好来播放的音乐播放器就尤为重要&#xff0c;因此我特意制作了一个根据自己喜好的音乐播放器&#xff0c;只需要把音乐文件放进制定的目录下即可。1.2开…

C++语法小笔记:内联函数,auto关键字,nullptr

目录 一.内联函数 1.回顾c语言中的“宏函数” 2.内联函数 3.内联函数的特性 二.C auto 关键字 1.auto的基本概念 2.auto使用的注意事项 3.auto不能使用的地方 三. C11中的 nullptr 一.内联函数 1.回顾c语言中的“宏函数” 先给出一段简单的代码&#xff1a; int Add(in…

plt设置柱状图标注

1、plt.text方法 在matplotlib 3.4.0之前的版本中&#xff0c;一般使用plt.text方法绘制数据标签。顾名思义&#xff0c;plt.text可以在图像的任何地方绘制指定的文本。基于此&#xff0c;我们只需要在相应数据点的坐标位置绘制相应的值&#xff0c;即可显示数据标签。 2、plt.…

react初始高阶组件

首先 我们要了解什么是高阶组件 第一 高阶组件必须是一个函数 第二 高阶组件接收一个参数&#xff0c;这个参数也必须是一个组件 第三 他的返回值 也是一个组件 至于高阶组件的作用 我们后续会讲解 本文只是带大家认识一下高阶组件 并手把手带大家创建一个 下面我们来创建一个…

微服务调用组件Feign学习笔记

目录 JAVA 项目中如何实现接口调用&#xff1f; 1. 什么是Feign 2. Spring Cloud Alibaba快速整合OpenFeign 3. Spring Cloud Feign的自定义配置及使用 4.自定义拦截器 5.超时时间配置 JAVA 项目中如何实现接口调用&#xff1f; 1&#xff09;Httpclient HttpClient 是 …

数据结构(模式匹配及相关算法)

目录 模式匹配 BF算法 算法实现 算法分析 KMP算法 问题的引入&#xff08;一&#xff09; 问题的引入&#xff08;二&#xff09; 问题的引入&#xff08;三&#xff09; 相关概念 计算失配函数的算法 算法思路 算法优点 模式匹配 函数int find(const sstring &am…

机器学习(三):人工智能主要分支

文章目录 人工智能主要分支 一、计算机视觉 二、语音识别 三、文本挖掘/分类 四、机器翻译 五、机器人 人工智能主要分支 通讯、感知与行动是现代人工智能的三个关键能力&#xff0c;在这里我们将根据这些能力/应用对这三个技术领域进行介绍&#xff1a; 计算机视觉(CV…

WiFi monitor模式的配置和运行检查(Ubuntu系统)

WiFi monitor模式的配置和运行检查1. WiFi monitor模式介绍2. WiFi monitor模式查看Step1&#xff1a;确保计算机上有安装硬件WiFi无线网卡Step2&#xff1a;安装必要的工具Step 3&#xff1a;iw list查看无线网卡是否支持monitor模式Step 4&#xff1a;配置WiFi monitor模式St…