微服务开发-Nacos服务治理
注册中心原理

流程如下:
- 服务启动时就会注册自己的服务信息(服务名、IP、端口)到注册中心;
- 调用者可以从注册中心订阅想要的服务,获取服务对应的实例列表(1个服务可能多实例部署);
- 调用者自己对实例列表负载均衡,挑选一个实例;
- 调用者向该实例发起远程调用。
服务治理中的三个角色分别是什么?
服务提供者:暴露服务接口,供其它服务调用;
服务消费者:调用其它服务提供的接口;
注册中心:记录并监控微服务各实例状态,推送服务变更信息。
消费者如何知道提供者的地址?
服务提供者会在启动时注册自己信息到注册中心,消费者可以从注册中心订阅和拉取服务信息。
消费者如何得知服务状态变更?
服务提供者通过心跳机制向注册中心报告自己的健康状态,当心跳异常时注册中心会将异常服务剔除,并通知订阅了该服务的消费者。
当提供者有多个实例时,消费者该选择哪一个?
消费者可以通过负载均衡算法,从多个实例中选择一个,如:随机,轮询,加权轮询等。
spring-cloud-alibaba:https://spring.io/projects/spring-cloud-alibaba
Nacos官方文档:https://nacos.io/docs/latest/what-is-nacos/
Nacos下载地址:https://github.com/alibaba/nacos/releases
Nacos 是一个易于使用的动态服务发现、配置管理和服务管理平台,旨在帮助开发人员快速构建云原生应用。下面是 Nacos 的完整使用流程,包括安装、配置、注册服务、服务发现以及配置管理。
搭建Nacos注册中心的三种方式:
方式一:Nacos 官网安装直接使用
1、下载安装包
从 Nacos 的 GitHub Releases 页面 下载最新版本的 Nacos。
2、解压并启动
打开终端cd进入存放 tar.gz 文件的目录
# 解压 Nacos
tar -zxvf nacos-server-<version>.tar.gz
cd nacos/bin
3、启动 Nacos Server
使用以下命令启动 Nacos 服务(默认为嵌入式数据库模式):
# 启动 Nacos
sh startup.sh -m standalone
4 访问 Nacos 控制台
在浏览器中访问 http://localhost:8848/nacos。默认的用户名和密码都是 nacos。
方式二:Docker拉取Nacos镜像
以下是完整的步骤,用于拉取并部署 Nacos 镜像,确保过程流畅且易于理解:
步骤 1:安装 Docker
安装centos7虚拟机和安装docker:详细安装过程与环境准备见课程:(2024最新SpringCloud微服务开发与实战,java黑马商城项目微服务实战开发(涵盖MybatisPlus、Docker、MQ、ES、Redis高级等))
步骤 2:拉取 Nacos 镜像
使用以下命令拉取 Nacos 的 Docker 镜像(你可以选择不同版本):
docker pull nacos/nacos-server:v2.1.0-slim
步骤 3:创建环境变量文件
创建一个名为 custom.env 的文件,放置在centos虚拟机中./nacos/ 目录下,并添加所需的环境变量。可以使用以下命令创建文件并编辑:
mkdir -p ./nacos
nano ./nacos/custom.env
在 custom.env 中添加如下内容(根据需要调整):
第一组配置:
MODE=standalone
SPRING_DATASOURCE_HOST=your_db_host
SPRING_DATASOURCE_PORT=3306
SPRING_DATASOURCE_USERNAME=your_db_username
SPRING_DATASOURCE_PASSWORD=your_db_password
第二组配置:
PREFER_HOST_MODE=hostname
MODE=standalone
SPRING_DATASOURCE_PLATFORM=mysql
MYSQL_SERVICE_HOST=192.168.254.129
MYSQL_SERVICE_DB_NAME=nacos
MYSQL_SERVICE_PORT=3306
MYSQL_SERVICE_USER=root
MYSQL_SERVICE_PASSWORD=123
MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai
第一组配置:更通用和灵活,适合快速测试或开发环境。用户可以根据需要填写相应的数据库连接信息。
第二组配置:适合在明确使用 MySQL,并且需要详细配置连接参数的场景,通常用于生产环境。
注意:
1、使用 Nacos 的默认内存存储模式(即不使用外部数据库),你可以将 Nacos 的运行模式设置为 standalone,并且不需要配置与数据库相关的环境变量。这是因为在内存存储模式下,Nacos 会将所有数据存储在内存中,而不依赖于外部数据库(如 MySQL)。但是使用 MySQL 可以确保 Nacos 的数据在重启后不会丢失。而内存存储仅在应用运行期间有效,重启后数据会丢失。对于需要保持配置、服务注册信息和其他重要数据的应用来说,持久化存储是必要的。
2、Nacos 本身并不会自动创建数据库。如果 Nacos 连接的 MySQL 数据库不存在,启动时会出现连接错误。你需要手动创建 Nacos 所需的数据库,并确保数据库的名称与在 custom.env 中配置的名称一致
3、注意将192.168.254.129替换为你自己的虚拟机IP地址。
步骤 4:运行 Nacos 容器
使用以下命令运行 Nacos 容器:
docker run -d \--name nacos \--env-file ./nacos/custom.env \-p 8848:8848 \-p 9848:9848 \-p 9849:9849 \--restart=always \nacos/nacos-server:v2.1.0-slim
注意:
1.-p 8848:8848:
这是 Nacos 的主要服务端口。你可以通过访问 http://localhost:8848/nacos 来访问 Nacos 的管理界面。容器内部的 8848 端口与宿主机的 8848 端口绑定,使得从宿主机发出的请求能够被 Nacos 服务接收。
2.-p 9848:9848:
这个端口通常用于 Nacos 的集群管理。Nacos 支持集群模式,该端口用于集群节点之间的通信。如果您不打算使用集群模式,可能不需要直接使用这个端口,但映射它可以为未来的扩展提供便利。
3.-p 9849:9849:
这个端口用于 Nacos 的控制台安全通信,通常用于 HTTPS 请求的处理。和上面的 9848 类似,虽然默认情况下你可能不需要使用这个端口,但映射它可以提供额外的功能。
4.–env-file 选项指定一个环境变量文件。该文件中的每一行都会被导入为环境变量。在这个例子中,./nacos/custom.env 包含了 Nacos 连接 MySQL 数据库的相关配置,如数据库地址、用户名和密码等。
5.–restart=always:
设置容器的重启策略为“始终”。这意味着如果容器停止运行,Docker 会自动尝试重启它,确保服务持续可用。
步骤 5:验证 Nacos 是否正常运行
你可以通过访问浏览器访问 Nacos 的管理界面,输入以下 URL:
http://你的虚拟机IP地址:8848/nacos
默认的用户名和密码是:nacos
方式三:已有Nacos镜像文件时Docker加载镜像
1、创建一个名为 custom.env 的文件,放置在centos虚拟机中 ./nacos/ 目录下,并添加所需的环境变量。可以使用以下命令创建文件并编辑:
mkdir -p ./nacos
nano ./nacos/custom.env
2、在 custom.env 中添加配置内容:详细见方式二中的步骤3;
注意:Nacos 本身并不会自动创建数据库。如果 Nacos 连接的 MySQL 数据库不存在,启动时会出现连接错误。你需要手动创建 Nacos 所需的数据库,并确保数据库的名称与在 custom.env 中配置的名称一致
3、将Nacos镜像文件nacos.tar拖进centos虚拟机的root目录下:
运行以下命令加载镜像并验证镜像是否加载成功:
docker load -i nacos.tar
docker images
4、运行 Nacos 容器**
使用以下命令运行 Nacos 容器:注意点见:方式二中的步骤4;
docker run -d \--name nacos \--env-file ./nacos/custom.env \-p 8848:8848 \-p 9848:9848 \-p 9849:9849 \--restart=always \nacos/nacos-server:v2.1.0-slim
5、验证 Nacos 是否正常运行
查看Nacos日志:docker logs -f nacos
你可以通过访问浏览器访问 Nacos 的管理界面,输入以下 URL:
http://你的虚拟机IP地址:8848/nacos
默认的用户名和密码是:nacos
服务注册
服务发现和负载均衡
待更新…
相关文章:
微服务开发-Nacos服务治理
注册中心原理 流程如下: 服务启动时就会注册自己的服务信息(服务名、IP、端口)到注册中心;调用者可以从注册中心订阅想要的服务,获取服务对应的实例列表(1个服务可能多实例部署);调…...
鸿蒙开发:两个重磅更新,鸿蒙版微信要来了!
从媒体消息中,其实我们已经知道,华为纯血鸿蒙系统(HarmonyOS NEXT)于10月8日正式开启了公测,对应的官方文档,大家可以看到已由原来的Beta版本更新到了Release,NEXT终于迎来了正式版本。 文档更新…...
es kibana .logstash离线集群安装
es离线集群安装 下载对应的版本一般看你客户端引用的是什么版本我这里下载的是7.6.2 官方下载地址:https://www.elastic.co/cn/downloads/elasticsearch 源码安装-环境准备:在etc/hosts文件添加3台主机 node-001 192.168.1.81 node-002 19…...
Java项目-基于springboot框架的基于协同过滤算法商品推荐系统项目实战(附源码+文档)
作者:计算机学长阿伟 开发技术:SpringBoot、SSM、Vue、MySQL、ElementUI等,“文末源码”。 开发运行环境 开发语言:Java数据库:MySQL技术:SpringBoot、Vue、Mybaits Plus、ELementUI工具:IDEA/…...
JAVA使用easyExcel导出数据到EXCEl,导出数据不全问题解决
JAVA使用easyExcel导出数据到EXCEl,导出数据不全问题解决 问题描述解决思路一解决思路二温馨提示 问题描述 JAVA使用easyExcel导出数据到EXCEl,导出数据不全问题。 导出的excel部分列有数据,好几列没有数据 解决思路一 从网上百度查询,大多数的解决思路…...
2-130 基于经验模态分解(EMD)的信号分解
基于经验模态分解(EMD)的信号分解。通过仿真信号构造待分解信号,经过分解后得到信号希尔伯特时频图,可视化展示不同分解信号频率段。程序已调通,可直接运行。 下载源程序请点链接:2-130 基于经验模态分解&…...
openlayers 测量功能实现(测距测面)- vue3
一、配置openlayer环境 借鉴:Vue 3 OpenLayers 的简单使用_vue3 openlayers-CSDN博客 二、代码如下(测距、测面和清除) measurs.js: import {ref} from vue; import Draw from ol/interaction/Draw import VectorSource from ol/source/…...
各种语言的序列化与反序列化(C/C++ c# Python Javascript Java)
序列化是指将程序中的对象转换为字节序列的过程,使得对象的状态可以在网络上传输或存储到文件中。反序列化则是将字节序列恢复为程序中的对象的过程。这两个过程是数据持久化和远程通信中的关键步骤。 1. C 序列化与反序列化 在 C 中,标准库没有提供内…...
RHCE笔记
第二章:时间服务器 东八区:UTC8CST(北京时间) 应用层的时间协议:NTP(网络时间协议):udp/端口:123 Chrony软件:由chronyd(客户端)和chronyc(服务…...
Android 设置控件为圆形
Android的圆形控件 对于所有的View有效 在开发的过程中,肯定需要实现一个圆形的控件,而且不是绘制一个圆形,那么怎么弄呢,在Android5.0后,有一个类ViewOutlineProvider,可以实现这个功能,应该是…...
qt/c++中成员函数返回成员变量并且可以赋值
#创作灵感 最近在做仪表项目,由于客户提供的仪表故障指示灯只有10个固定位置,而故障指示灯却有80多个。为了解决这个问题,进过我的设计,项目中需要返回类的成员变量。并且还可以赋值给它。于是就产生了下面的代码。 class Foo { …...
【网络安全】IDOR与JWT令牌破解相结合,实现编辑、查看和删除数万帐户
未经许可,不得转载。 文章目录 前言漏洞1漏洞2修复建议在今年4月17日,笔者发过一篇关于 JWT 的文章,未学习过或稍有遗忘的朋友可以点击跳转:【网络安全 | 密码学】JWT基础知识及攻击方式详析 现分享一篇与 JWT 有关的漏洞挖掘案例。 前言 我在某公共漏洞奖励计划的应用程…...
docker安装与镜像打包
文章目录 前言一、docker安装1.1、下载docker安装包1.2、解压1.3、移动1.4、docker注册成系统服务1.5、添加文件权限1.6、设置开机启动1.7、启动docker1.8、测试是否启动 二、镜像加载2.1、镜像准备2.2、加载镜像2.3、查看已加载镜像2.4、进入镜像 三、打包镜像3.1、创建 Docke…...
“新物种”即将上线,极氪MIX是近几年最“好玩”的新车?
像极氪MIX这样有创意的新能源车 除了概念车外,市面上真的很少能看到类似的量产车 别致可爱的造型、新颖的对开门设计、百变的空间布局 同时兼顾了MPV大空间以及SUV的操控乐趣和通过性 妥妥的“新物种” A级车车长D级车轴距,配合隐藏式双B柱电动对开…...
【Flutter】路由与导航:复杂导航与深度链接
在开发大型 Flutter 应用时,复杂的导航管理是不可避免的。除了基本的页面跳转与返回操作外,很多应用会用到 嵌套路由、页面分组、TabBar 和 Drawer 的结合使用等复杂导航场景,甚至支持 深度链接 和 动态路由。本文将深入探讨这些高级导航技巧…...
07 实战:视频捕获
代码如下: import tkinter as tk # 导入tkinter库,用于创建图形用户界面 from tkinter import ttk, filedialog, messagebox # 导入tkinter的额外部件、文件对话框和消息框 import cv2 # 导入OpenCV库,用于图像处理 import numpy as np # 导入NumPy库,用于数值计算 from P…...
前端页面使用google地图api实现导航功能,开发国外网站免费简单好用
开发国外软件的时候,想使用goole map实现导航等功能,可以使用google的api来做,官方文档地址:https://developers.google.com/maps/documentation/urls/get-started?hlzh-cn ,比如: 支持的请求的操作&…...
UE4 材质学习笔记12(水体反射和折射)
一.水体反射和折射 首先就是要断开所有连接到根节点的线,因为水有很多不同的节点成分,当所有其他节点都在用时 要分辨出其中一个是何效果是很难的。 虚幻有五种不同的方法可以创建反射,虚幻中的大多数场景使用多种这些方法 它们会同时运作。…...
Go:error处理机制和函数
文章目录 error处理机制函数函数作为参数匿名函数匿名函数和闭包闭包运用闭包与工厂模式 error处理机制 本篇总结的是Go中对于错误的处理机制 Go 语言的函数经常使用两个返回值来表示执行是否成功:返回某个值以及 true 表示成功;返回零值(或…...
智能指针(3)
目录 可能问题五: 问题分析: 答案格式: shared_ptr的模拟实现 部分1:引用计数的设计(分考点1) 代码实现: 部分2:作为类所必须的部分(分考点2) 代码实现: 部分3:拷贝构造函数…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
uniapp手机号一键登录保姆级教程(包含前端和后端)
目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...
