SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈(nacos)

news2025/1/31 8:12:16

Nacos注册中心

(一)认识和安装Nacos

1、认识Nacos

在这里插入图片描述

2、安装nacos

这里下载1.4.1版本

默认端口是8848

下载解压后,终端进入到nacos/bin下,bash startup.sh -m standalone
然后查看start.out文件得到一个网址就可以查看nacos的服务列表,http://10.10.20.18:8848/nacos/index.html

(二)快速入门

1、服务注册到Nacos

在这里插入图片描述
在父工程中将springcloud-alibaba的管理依赖引入进来,以后它有关的所有版本都不用操心了

在这里插入图片描述
1、首先找到父工程的pom,已经有了springcloud的管理依赖,springcloudalibaba比较特殊,是后来才加入的,所以它没有在springcloud-dependencies中,需要单独去引入。所以直接将这个依赖放到springcloud-dependencies的下一个

<!-- springCloud -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-dependencies</artifactId>
    <version>${spring-cloud.version}</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>
<!--nacos的管理依赖-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>2.2.5.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

2、接下来就可以改造服务了。
将userservice和orderservice的pom中的eureka的dependency注释掉,然后引入nacos客户端依赖包

<!--nacos客户端依赖包-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

3、修改yml文件
userservice和orderservice

将eureka的注释掉
往上找到spring这块,在spring的里面加上nacos的配置

userservice:

server:
  port: 8081
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/cloud_user?useSSL=false
    username: root
    password: root123456
    driver-class-name: com.mysql.jdbc.Driver
  application:
    name: userservice # user服务的服务名称
  cloud:
    nacos:
      server-addr: localhost:8848 # nacos服务端地址
mybatis:
  type-aliases-package: cn.itcast.user.pojo
  configuration:
    map-underscore-to-camel-case: true
logging:
  level:
    cn.itcast: debug
  pattern:
    dateformat: MM-dd HH:mm:ss:SSS
#eureka:
#  client:
#    service-url: # eureka的地址信息
#      defaultZone: http://127.0.0.1:10086/eureka

orderservice

server:
  port: 8080
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/cloud_order?useSSL=false
    username: root
    password: root123456
    driver-class-name: com.mysql.jdbc.Driver
  application:
    name: orderservice # order服务的服务名称
  cloud:
    nacos:
      server-addr: localhost:8848 # nacos服务端地址
mybatis:
  type-aliases-package: cn.itcast.user.pojo
  configuration:
    map-underscore-to-camel-case: true
logging:
  level:
    cn.itcast: debug
  pattern:
    dateformat: MM-dd HH:mm:ss:SSS
#eureka:
#  client:
#    service-url: # eureka的地址信息
#      defaultZone: http://127.0.0.1:10086/eureka
userservice:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则
ribbon:
  eager-load:
    enabled: true # 开启饥饿加载
    clients: # 指定饥饿加载的服务名称
      - userservice

其他都不需要改,包括ribbon

启动两个userservice和一个orderservice:
在这里插入图片描述
点击userservice详情:
在这里插入图片描述
使用order/101、order/102、…测试,发现仍然是userservice轮询,因此负载均衡没有问题

2、总结

在这里插入图片描述

(三)服务多级存储模型

1、Nacos服务多级存储模型

在这里插入图片描述

之前是有两层概念,一层是服务,第二层就是实例。一个服务可以包含多个实例。

我们会将一个服务的多个实例部署到多个机房,就像把鸡蛋分散开了,这样就可以做到容灾
而Nacos服务多级存储模型就是引入了这样一个机房的概念,或者说地域的概念,它把存在一个机房的多个实例称为一个集群

2、服务跨集群调用问题

在这里插入图片描述
打开nacos中orderservice的详情,可以看到它集群名字为“DEFAULT”,也就是说没有集群。那下面我们就去学习如何配置实例的集群属性

3、服务集群属性

在这里插入图片描述
接下来我们要将UserApplication、UserApplication2放在hz集群,UserApplication3设置在sh集群

1、打开userservice的application.yml

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/cloud_user?useSSL=false
    username: root
    password: root123456
    driver-class-name: com.mysql.jdbc.Driver
  application:
    name: userservice # user服务的服务名称
  cloud:
    nacos:
      server-addr: localhost:8848 # nacos服务端地址
      discovery:
        cluster-name: HZ # 配置集群名称,也就是机房位置,例如:HZ,杭州

然后启动UserApplication和UserApplication2
那如果想要UserApplication3是SH集群,就是把userservice的application.yml中刚才那个cluster-name换成SH,然后再启动它。这个时候不要重启UserApplication和UserApplication2

在这里插入图片描述
在这里插入图片描述

4、总结

在这里插入图片描述
Nacos服务多级存储模型其实就是在原有分级上多做了一层,原来是两级,现在又把实例按照地域划分成了集群

(四)NacosRule负载均衡

1、服务集群属性

不过我们最终想要实现的是orderservice远程调用userserivce时优先选择本地集群,因此我们要给orderserivce也配置一个集群属性

orderservice中的application.yml,给它也是HZ集群,然后重启orderservice
在这里插入图片描述
然后我们在浏览器中访问order/101、order/102、order/103

然后回到IDEA中看到UserApplication、UserApplication2、UserApplication3都有输出sql语句,说明它们都被访问了,也就是说orderservice发起远程调用时没有优先选择同集群,依然是采用轮询方案
我们知道服务在选择实例时,它的规则全都是由负载均衡的规则来决定的,也就是IRule。现在我们没有配置IRule,因此默认的规则就是轮询

2、根据集群负载均衡

在这里插入图片描述
修改负载均衡的规则同样是在yml里面。之前已经配置过orderservice的userservice的ribbon里负载均衡的规则了,不过配的是随机,现在只需要替换它

userservice:
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则

然后重启order服务

然后我们在浏览器中访问order/101、order/102、order/103、…、order/107,发现全部都在UserApplication和UserApplication2,UserApplication3一个都没有
nacos特点:优先选择本地集群,在本地集群内的多个服务当中再采用随机方式进行负载均衡

此时如果把8081和8082停掉会怎么样呢?
在这里插入图片描述
会发现本地集群没有服务时也能访问,
order中会出现一个警告信息
在这里插入图片描述

3、总结

在这里插入图片描述

(五)服务实例的权重设置

1、根据权重负载均衡

在这里插入图片描述
在这里插入图片描述
权重调为0时,就不会被访问!

2、总结

在这里插入图片描述

(六)环境隔离namespace

1、环境隔离

在这里插入图片描述
环境隔离就是在对服务service做隔离
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
那么我们来设置命名空间
在这里插入图片描述

在这里插入图片描述
那么怎么样去修改一个服务的命名空间呢?这个就不是在控制台修改的了,需要在代码区域了

在这里插入图片描述
就是添加了一个namespace,注意到填的不是名称是id

namespace: d2afdd92-4e10-47ee-be86-1b080c1ec582 # 命名空间,填id

然后重启orderservice
在这里插入图片描述
此时它们就是两个世界的人了,隔离,因此再访问就报错了:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、总结

在这里插入图片描述

环境隔离是用namespace来做的

(七)Nacos和Eureka的对比

1、nacos注册中心细节分析

在这里插入图片描述

2、临时实例和非临时实例

在这里插入图片描述

将orderservice的修改:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/cloud_order?useSSL=false
    username: root
    password: root123456
    driver-class-name: com.mysql.jdbc.Driver
  application:
    name: orderservice # order服务的服务名称
  cloud:
    nacos:
      server-addr: localhost:8848,localhost:8847,localhost:8849 # nacos服务端地址
      discovery:
        cluster-name: HZ # 配置集群名称,也就是机房位置,例如:HZ,杭州
        namespace: d2afdd92-4e10-47ee-be86-1b080c1ec582 # 命名空间,填id
        ephemeral: false # 设置为非临时实例

此时先关闭orderservice,去nacos控制台,就没有了
再次启动orderservice
在这里插入图片描述
再在IDEA中关闭orderservice,nacos控制台中orderservice还在,只是红色了
在这里插入图片描述
再等很久这个服务也不会被剔除,除非手动删除它,否则永远都在

3、总结

在这里插入图片描述

(八)Nacos配置管理-Nacos实现配置管理

1、统一配置管理

在这里插入图片描述
打开nacos控制台,
在这里插入图片描述
点击加号,新建配置
在这里插入图片描述

在这里插入图片描述

切记这个配置内容不是把application.yml中一切内容都弄过来,只是有热更新需求的

(九)Nacos配置管理-微服务配置拉取

1、统一配置管理

在这里插入图片描述
在这里插入图片描述
1、在userservice中引入nacos配置管理客户端依赖

<!--nacos的配置管理依赖-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

2、bootstrap.yml

(十)Nacos配置管理-配置热更新

(十一)Nacos配置管理-多环境配置共享

(十二)Nacos配置管理-nacos集群搭建

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

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

相关文章

《Android 移动应用基础教程(Android Studio)(第2版)》【课本习题】【学习通2023春PDF】【参考答案】

文章目录 超星学习通智能终端软件开发&#xff08;基于Android Studio环境&#xff09;章节作业&#xff08;39&#xff09;第一章第二章 Android常见界面布局第三章 Android常见界面控件第四章第五章第六章&#xff08;略&#xff09;第七章第八章第九章第十章第十一章第十二章…

ChatGPT常见问题,Access denied的解决办法

今天&#xff0c;突然想登录一登录ChatGPT&#xff0c;提示 Access denied, You do not have access to chat.openai.com 怎么办&#xff1f; “Access denied You do not have access to chat.openai.com. The site owner may have set restrictions that prevent you from ac…

leetcode142. 环形链表 II

给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数…

vue3+electron开发桌面软件(7)——修改注册表,创建级联菜单

系列文章目录 系列第一篇&#xff1a; vue3electron开发桌面软件入门与实战&#xff08;0&#xff09;——创建electron应用 文章目录 系列文章目录前言一、创建右键级联菜单二、了解注册表结构1.手动添加注册表——一级菜单2.手动添加注册表——二级菜单父菜单3.手动添加注册…

IC-14W网络IC卡读写器_银河麒麟桌面操作系统V10适配测试报告

银河麒麟操作系统产品NeoCertify 认证测试报告 系统版本&#xff1a;银河麒麟桌面操作系统V10 厂商名称&#xff1a; 广州荣士电子有限公司 认证产品&#xff1a;IC-14W网络IC卡读写器 测试日期&#xff1a; 2022-11-04 …

基于SVG的HMI组件

人机界面是自动化领域不可或缺重要组成部分。人机界面系统的设计看上去并没有太大的技术门槛&#xff0c;但是设计一个HMI系统的工作量是巨大的&#xff0c;如果你没有足够的耐心和精力是难以完成一个通用HMI系统的。构建UI控件库就是一个似乎永远完不成的事情&#xff0c;用户…

12.基于蒙特卡洛抽样的电动汽车充电负荷计算

说明书 MATLAB代码&#xff1a;基于蒙特卡洛抽样的电动汽车充电负荷计算 关键词&#xff1a;电动汽车 蒙特卡洛模拟 抽样 充放电负荷 参考文档&#xff1a;《主动配电网多源协同运行优化研究_乔珊》第3.2节&#xff0c;完全复现 仿真平台&#xff1a;MATLAB 优势&#xf…

JavaWeb——IO、存储、硬盘、文件系统相关常识

目录 一、IO 1、定义 二、存储和硬盘 1、存储 2、硬盘 三、文件系统 1、文件 &#xff08;1&#xff09;、定义 &#xff08;2&#xff09;、分类 &#xff08;3&#xff09;、操作 2、树形结构和目录 3、路径 &#xff08;1&#xff09;、定义 &#xff08;2&…

elementui是怎么做表单验证的?

文章目录 前言elementui是怎么做表单验证&#xff1f;步骤 一、 表单验证校验代码&#xff1f;二、el-button提交验证代码2.validate方法深入了解1. 有参数2. 无参数 总结 前言 在项目开发中&#xff0c;我们经常会遇到表单保存的功能&#xff0c;在表单保存前&#xff0c;常常…

Salesforce如何防止黑客攻击和数据泄露?了解他们的安全措施!

安全性一直是Salesforce密切关注的问题。Google的安全浏览报告指出&#xff0c;2022年网络钓鱼网站的数量增加了80&#xff05;。面对着黑客攻击、安全漏洞、数据泄露等不安全事件频发&#xff0c;实施更强大的安全措施比以往更加重要。 调查显示&#xff0c;电子邮件目前是网…

阿里巴巴图标,font-family字体样式

阿里巴巴官网&#xff1a;https://www.iconfont.cn/ 如有需要&#xff0c;请注意到文章最后的问题。 一&#xff0c;图标 1&#xff0c;搜索关键词&#xff0c;点击图标 -> 加入购物车 -> 添加到项目 2&#xff0c;两种方式 &#xff08;1&#xff09;选择 Font cla…

推荐一个好工具,可以替代 swagger 生成文档

Swagger 是一个规范且完整的框架&#xff0c;用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。 Swagger 的目标是对 REST API 定义一个标准且和语言无关的接口&#xff0c;可以让人和计算机拥有无须访问源码、文档或网络流量监测就可以发现和理解服务的能力。当通过 S…

SpringBoot扫包排除指定包(配置文件形式)

1、背景​ 在有些时候&#xff0c;不同环境可能需要用代码不同模块的能力&#xff0c;但是不同环境的项目包是一致的。这块我们想到的最简单的办法是在maven打包的时候打不同的模块&#xff0c;但是这样往往需要出多个包&#xff0c;虽然这种方式是正路但运维同学嫌麻烦。第二种…

Java面试题--MySQL索引

一. 索引介绍 MySQL的索引是一种数据结构&#xff0c;它可以帮助MySQL快速定位需要访问的记录。索引可类比于一本书的目录&#xff0c;通过它可以快速找到某个特定的记录。 MySQL支持多种类型的索引&#xff0c;每种索引都有其优势和局限性&#xff0c;常用的包括&#xff1a…

python类型转换

我们就想那我们目前接触到的三种类型做一下转换 分别是 字符串 浮点数 正整数 可能会有刚接触编程的小伙伴在想 没事类型转换什么呢&#xff1f; 其实在实际开发中 这东西用的不要太多 根据我们目前认识的类型 先用到三个方法 我们编写代码 String_int str(111); print(St…

初阶数据结构——时间复杂度和空间复杂度

目录 算法效率算法的复杂度 时间复杂度时间复杂度的概念习题 空间复杂度空间复杂度的概念习题 什么是数据结构&#xff1f; 数据结构(Data Structure)是计算机存储、组织数据的方式&#xff0c;指相互之间存在一种或多种特定关系的数据元素的集合。 什么是算法&#xff1f; 算法…

java+ssm603企业人事档案管理系统带前端springboot

人事管理系统的设计与实现采用Spring、SpringMVC和MyBatis作为主体框架,系统设计遵循界面层、业务逻辑层和数据访问层的Web开发三层架构。采用B/S结构,使得系统更加容易维护。人事管理系统的设计与实现主要实现角色有管理员和用户,管理员在后台管理资料文件模块、员工模块、文件…

深度相机初体验:Hello World

当我的组长给了我一个深度相机&#xff0c;倒霉的事情就开始了&#xff0c;在使用的过程中遇到的某些问题搜不到&#xff0c;头秃啊呜呜呜呜呜呜呜呜 配置&#xff1a; ubuntu20.04&#xff08;我实在是懒得去升级了&#xff0c;一旦升级就可能会出现找不到教程的可能性&#x…

运行时内存数据区之执行引擎(一)

执行引擎概述 执行引擎是Java虚拟机核心的组成部分之一。 “虚拟机”是一个相对于“物理机”的概念&#xff0c;这两种机器都有代码执行能力&#xff0c;其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的&#xff0c;而虚拟机的执行引擎则是由软…

【MATLAB基础绘图第8棒】绘制局部放大图

MATLAB绘制局部放大图 1 工具准备 MATLAB官网-ZoomPlot(Kepeng Qiu. Matlab Central, 2022) 初始数据图绘制完成后&#xff0c;调用以下代码&#xff1a; %% 添加局部放大 zp BaseZoom(); zp.plot;1.1 具体绘制步骤 具体绘制步骤如下&#xff1a; 通过鼠标左键框选作图区…