当前位置: 首页 > news >正文

微服务开发-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服务治理

注册中心原理 流程如下&#xff1a; 服务启动时就会注册自己的服务信息&#xff08;服务名、IP、端口&#xff09;到注册中心&#xff1b;调用者可以从注册中心订阅想要的服务&#xff0c;获取服务对应的实例列表&#xff08;1个服务可能多实例部署&#xff09;&#xff1b;调…...

鸿蒙开发:两个重磅更新,鸿蒙版微信要来了!

从媒体消息中&#xff0c;其实我们已经知道&#xff0c;华为纯血鸿蒙系统&#xff08;HarmonyOS NEXT&#xff09;于10月8日正式开启了公测&#xff0c;对应的官方文档&#xff0c;大家可以看到已由原来的Beta版本更新到了Release&#xff0c;NEXT终于迎来了正式版本。 文档更新…...

es kibana .logstash离线集群安装

es离线集群安装 下载对应的版本一般看你客户端引用的是什么版本我这里下载的是7.6.2 官方下载地址&#xff1a;https://www.elastic.co/cn/downloads/elasticsearch 源码安装-环境准备&#xff1a;在etc/hosts文件添加3台主机 node-001 192.168.1.81 node-002 19…...

Java项目-基于springboot框架的基于协同过滤算法商品推荐系统项目实战(附源码+文档)

作者&#xff1a;计算机学长阿伟 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、ElementUI等&#xff0c;“文末源码”。 开发运行环境 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBoot、Vue、Mybaits Plus、ELementUI工具&#xff1a;IDEA/…...

JAVA使用easyExcel导出数据到EXCEl,导出数据不全问题解决

JAVA使用easyExcel导出数据到EXCEl,导出数据不全问题解决 问题描述解决思路一解决思路二温馨提示 问题描述 JAVA使用easyExcel导出数据到EXCEl,导出数据不全问题。 导出的excel部分列有数据&#xff0c;好几列没有数据 解决思路一 从网上百度查询&#xff0c;大多数的解决思路…...

2-130 基于经验模态分解(EMD)的信号分解

基于经验模态分解&#xff08;EMD&#xff09;的信号分解。通过仿真信号构造待分解信号&#xff0c;经过分解后得到信号希尔伯特时频图&#xff0c;可视化展示不同分解信号频率段。程序已调通&#xff0c;可直接运行。 下载源程序请点链接&#xff1a;2-130 基于经验模态分解&…...

openlayers 测量功能实现(测距测面)- vue3

一、配置openlayer环境 借鉴&#xff1a;Vue 3 OpenLayers 的简单使用_vue3 openlayers-CSDN博客 二、代码如下&#xff08;测距、测面和清除&#xff09; measurs.js: import {ref} from vue; import Draw from ol/interaction/Draw import VectorSource from ol/source/…...

各种语言的序列化与反序列化(C/C++ c# Python Javascript Java)

序列化是指将程序中的对象转换为字节序列的过程&#xff0c;使得对象的状态可以在网络上传输或存储到文件中。反序列化则是将字节序列恢复为程序中的对象的过程。这两个过程是数据持久化和远程通信中的关键步骤。 1. C 序列化与反序列化 在 C 中&#xff0c;标准库没有提供内…...

RHCE笔记

第二章&#xff1a;时间服务器 东八区&#xff1a;UTC8CST(北京时间) 应用层的时间协议&#xff1a;NTP&#xff08;网络时间协议&#xff09;&#xff1a;udp/端口&#xff1a;123 Chrony软件&#xff1a;由chronyd&#xff08;客户端&#xff09;和chronyc&#xff08;服务…...

Android 设置控件为圆形

Android的圆形控件 对于所有的View有效 在开发的过程中&#xff0c;肯定需要实现一个圆形的控件&#xff0c;而且不是绘制一个圆形&#xff0c;那么怎么弄呢&#xff0c;在Android5.0后&#xff0c;有一个类ViewOutlineProvider&#xff0c;可以实现这个功能&#xff0c;应该是…...

qt/c++中成员函数返回成员变量并且可以赋值

#创作灵感 最近在做仪表项目&#xff0c;由于客户提供的仪表故障指示灯只有10个固定位置&#xff0c;而故障指示灯却有80多个。为了解决这个问题&#xff0c;进过我的设计&#xff0c;项目中需要返回类的成员变量。并且还可以赋值给它。于是就产生了下面的代码。 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这样有创意的新能源车 除了概念车外&#xff0c;市面上真的很少能看到类似的量产车 别致可爱的造型、新颖的对开门设计、百变的空间布局 同时兼顾了MPV大空间以及SUV的操控乐趣和通过性 妥妥的“新物种” A级车车长D级车轴距&#xff0c;配合隐藏式双B柱电动对开…...

【Flutter】路由与导航:复杂导航与深度链接

在开发大型 Flutter 应用时&#xff0c;复杂的导航管理是不可避免的。除了基本的页面跳转与返回操作外&#xff0c;很多应用会用到 嵌套路由、页面分组、TabBar 和 Drawer 的结合使用等复杂导航场景&#xff0c;甚至支持 深度链接 和 动态路由。本文将深入探讨这些高级导航技巧…...

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实现导航功能,开发国外网站免费简单好用

开发国外软件的时候&#xff0c;想使用goole map实现导航等功能&#xff0c;可以使用google的api来做&#xff0c;官方文档地址&#xff1a;https://developers.google.com/maps/documentation/urls/get-started?hlzh-cn &#xff0c;比如&#xff1a; 支持的请求的操作&…...

UE4 材质学习笔记12(水体反射和折射)

一.水体反射和折射 首先就是要断开所有连接到根节点的线&#xff0c;因为水有很多不同的节点成分&#xff0c;当所有其他节点都在用时 要分辨出其中一个是何效果是很难的。 虚幻有五种不同的方法可以创建反射&#xff0c;虚幻中的大多数场景使用多种这些方法 它们会同时运作。…...

Go:error处理机制和函数

文章目录 error处理机制函数函数作为参数匿名函数匿名函数和闭包闭包运用闭包与工厂模式 error处理机制 本篇总结的是Go中对于错误的处理机制 Go 语言的函数经常使用两个返回值来表示执行是否成功&#xff1a;返回某个值以及 true 表示成功&#xff1b;返回零值&#xff08;或…...

智能指针(3)

目录 可能问题五&#xff1a; 问题分析&#xff1a; 答案格式&#xff1a; shared_ptr的模拟实现 部分1&#xff1a;引用计数的设计(分考点1) 代码实现&#xff1a; 部分2&#xff1a;作为类所必须的部分(分考点2) 代码实现&#xff1a; 部分3&#xff1a;拷贝构造函数…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

tree 树组件大数据卡顿问题优化

问题背景 项目中有用到树组件用来做文件目录&#xff0c;但是由于这个树组件的节点越来越多&#xff0c;导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多&#xff0c;导致的浏览器卡顿&#xff0c;这里很明显就需要用到虚拟列表的技术&…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能

1. 开发环境准备 ​​安装DevEco Studio 3.1​​&#xff1a; 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK ​​项目配置​​&#xff1a; // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...

如何配置一个sql server使得其它用户可以通过excel odbc获取数据

要让其他用户通过 Excel 使用 ODBC 连接到 SQL Server 获取数据&#xff0c;你需要完成以下配置步骤&#xff1a; ✅ 一、在 SQL Server 端配置&#xff08;服务器设置&#xff09; 1. 启用 TCP/IP 协议 打开 “SQL Server 配置管理器”。导航到&#xff1a;SQL Server 网络配…...

针对药品仓库的效期管理问题,如何利用WMS系统“破局”

案例&#xff1a; 某医药分销企业&#xff0c;主要经营各类药品的批发与零售。由于药品的特殊性&#xff0c;效期管理至关重要&#xff0c;但该企业一直面临效期问题的困扰。在未使用WMS系统之前&#xff0c;其药品入库、存储、出库等环节的效期管理主要依赖人工记录与检查。库…...