SpringCloud微服之Nacos的学习

article/2025/10/4 17:28:50

1:使用前提

  • 第一步:解压启动Nocos
    SpringCloudAlibaba 推出了一个名为 Nacos 的注册中心,在国外也有大量的使用。
    在这里插入图片描述

startup.cmd -m standalone

访问http://localhost:8848/nacos/
在这里插入图片描述

  • 第二步:服务注册
    工程目录
    在这里插入图片描述

在父工程中添加依赖

 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2.2.6.RELEASE</version><type>pom</type><scope>import</scope>
</dependency>

在order-service user-service中添加依赖

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

在userService中跟orderService中 添加配置

spring:cloud:nacos:server-addr: 127.0.0.1:8848

项目重新启动后,可以看到三个服务都被注册进了 Nacos
在这里插入图片描述

2:Nocos是注册中心

a:已知

orderService服务需要调用 userService服务 但是userService是有多个的

b:oderService调用服务流程

  • order-service 如何得知 user-service 实例地址?
    user-service 服务实例启动后,将自己的信息注册到Nacos注册中心(Nacos服务端),叫做服务注册 eureka-server 保存服务名称到服务实例地址列表的映射关系 order-service 根据服务名称,拉取实例地址列表,这个叫服务发现或服务拉取 order-service
  • 如何从多个user-service 实例中选择具体的实例?
    order-service从实例列表中利用负载均衡算法选中一个实例地址,向该实例地址发起远程调用 order-service 如何得知某个
    user-service 实例是否依然健康,是不是已经宕机? user-service 会每隔一段时间(默认30秒)向
    nacos-server 发起请求,报告自己状态,称为心跳 当超过一定时间没有发送心跳时,nacos-server
    会认为微服务实例故障,将该实例从服务列表中剔除 order-service 拉取服务时,就能将故障实例排除了

3:Nacos是配置中心

a:使用背景

当微服务部署的实例越来越多,达到数十、数百时,逐个修改微服务配置就会让人抓狂,而且很容易出错。我们需要一种统一配置管理方案,可以集中管理所有实例的配置。
图片: https://uploader.shimo.im/f/tmzV4LITzapqXYW3.png!thumbnail?accessToken=eyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjE2NTkwMDAzODksImZpbGVHVUlEIjoibThBWlYxUGVhV3U0SzBBYiIsImlhdCI6MTY1OTAwMDA4OSwiaXNzIjoidXBsb2FkZXJfYWNjZXNzX3Jlc291cmNlIiwidXNlcklkIjo2MzQ0MDYzN30.sXQf8NVYYEfSaWMEv6gXMBxmC6nPcmlVjZ3ONKVRnLw

Nacos 一方面可以将配置集中管理,另一方可以在配置变更时,及时通知微服务,实现配置的热更新。
注意:项目的核心配置,需要热更新的配置才有放到 nacos 管理的必要。基本不会变更的一些配置(例如数据库连接)还是保存在微服务本地比较好。

b:项目启动的时候读取配置文件的顺序

未加入Nacos配置的 项目启动读取配置文件顺序
在这里插入图片描述

加入Nacos配置文件后的 项目启动读取配置文件的顺序
在这里插入图片描述

这样会引发一个问题,我们将Nacos服务的地址放到application.yml中 那么Nacos就无法根据地址去获取配置了
加入bootstarap.yml
图片: https://uploader.shimo.im/f/f1PHuAuEFafPfkqH.png!thumbnail?accessToken=eyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjE2NTkwMDAzODksImZpbGVHVUlEIjoibThBWlYxUGVhV3U0SzBBYiIsImlhdCI6MTY1OTAwMDA4OSwiaXNzIjoidXBsb2FkZXJfYWNjZXNzX3Jlc291cmNlIiwidXNlcklkIjo2MzQ0MDYzN30.sXQf8NVYYEfSaWMEv6gXMBxmC6nPcmlVjZ3ONKVRnLw

c:关于Nacos配置中心的通俗理解

那么实际使用的时候,我们的微服务是怎么从nacos上拿到配置文件的呢?我觉得本质是这样的:微服务在启动的时候,肯定会有个配置文件,这个配置文件中应该会说明 nacos的配置信息、命名空间、配置文件的名称等等信息,当有这些信息以后,相当于nacos集群和我们的服务之间就能实现网络互连,这样完全可以通过约定的协议从nacos上拿到对应的配置文件,拿到配置文件后再下载到本地上来,这样就实现了本地使用远程nacos上的配置文件了。而且如果要实现动态更新,比如在nacos上修改了这个配置文件的时候,也可以知道使用了该配置文件的服务是哪一些,然后通过网络下发通知说这个配置修改了,从而实现动态修改。不过我觉得这种动态更新应该只限制与一些普通配置文件,如果是一些数据库配置的话,毕竟微服务需要重新去连接一次数据库,和重启效果差不多是一样的了。
原文链接:https://blog.csdn.net/qq_35463905/article/details/116525129
(4):Nacos集群
“因为当一个nacos服务部署在A服务器中,如果这台服务器挂了,那么就会出现各个模块都无法访问的了,所以将nacos部署在多个服务器中,搭建一个集群的模式,这样可以预防一台服务器挂了,所以的服务都会收到影响。”
(5):Feign的远程调用
a:使用背景
Feign 是一个声明式的 http 客户端,官方地址:https://github.com/OpenFeign/feign 其作用就是帮助我们优雅的实现 http 请求的发送

原来我们orderService调用UserService
图片: https://uploader.shimo.im/f/iGzW1L9nm8BlAfkr.png!thumbnail?accessToken=eyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjE2NTkwMDAzODksImZpbGVHVUlEIjoibThBWlYxUGVhV3U0SzBBYiIsImlhdCI6MTY1OTAwMDA4OSwiaXNzIjoidXBsb2FkZXJfYWNjZXNzX3Jlc291cmNlIiwidXNlcklkIjo2MzQ0MDYzN30.sXQf8NVYYEfSaWMEv6gXMBxmC6nPcmlVjZ3ONKVRnLw

显示出的问题:
代码可读性差,参数不同一
b:Feigin的使用流程
引入依赖(在orderService中引入依赖)

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

添加注解
在order-service的启动类上添加注解
图片: https://uploader.shimo.im/f/g1bmiXVpXEfQTdmt.png!thumbnail?accessToken=eyJhbGciOiJIUzI1NiIsImtpZCI6ImRlZmF1bHQiLCJ0eXAiOiJKV1QifQ.eyJleHAiOjE2NTkwMDAzODksImZpbGVHVUlEIjoibThBWlYxUGVhV3U0SzBBYiIsImlhdCI6MTY1OTAwMDA4OSwiaXNzIjoidXBsb2FkZXJfYWNjZXNzX3Jlc291cmNlIiwidXNlcklkIjo2MzQ0MDYzN30.sXQf8NVYYEfSaWMEv6gXMBxmC6nPcmlVjZ3ONKVRnLw

在orderService中添加一个接口

package com.xn2001.order.client;
import com.xn2001.order.pojo.User;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
@FeignClient("userservice")
public interface UserClient {@GetMapping("/user/{id}")User findById(@PathVariable("id") Long id);
}

@FeignClient(“userservice”):其中参数填写的是微服务名
@GetMapping(“/user/{id}”):其中参数填写的是请求路径
这个客户端主要是基于 SpringMVC 的注解 @GetMapping 来声明远程调用的信息
Feign 可以帮助我们发送 http 请求,无需自己使用 RestTemplate 来发送了。
测试

@Autowired
private UserClient userClient;
public Order queryOrderAndUserById(Long orderId) {// 1.查询订单Order order = orderMapper.findById(orderId);// TODO: 2021/8/20 使用feign远程调用User user = userClient.findById(order.getUserId());// 3. 将用户信息封装进订单order.setUser(user);// 4.返回return order;
}

http://chatgpt.dhexx.cn/article/wGLvdchr.shtml

相关文章

python注册nacos微服并使用gateway网关

业务需求&#xff1a;使用python flask框架和java spring boot框架共同注册到nacos中&#xff0c;在由spring cloud gateway分配路由。 flaskDome: from flask import Flaskapp Flask(__name__)app.route(/python) def test():return "这是python flask框架接口&#xf…

大开眼界,Jenkins结合SpringCloud+K8S,打通微服一条龙技术讲解

Jenkins 是目前最常用的持续集成工具&#xff0c;拥有近50%的市场份额&#xff0c;他还是很多技术团队的第一个使用的自动化工具。由此可见他的重要性&#xff01; 这份Jenkins宝典从入门介绍到结合DockerSpringCloudKubernetes&#xff0c;打通一条龙技术讲解&#xff0c;简直…

基于Ant DesignPro Vue + SpringBoot 前后端分离 - 后端微服化 + 接口网关 + Nacos

基于Ant DesignPro Vue SpringBoot 前后端分离 - 后端微服化 接口网关 Nacos 通过Ant DesignPro Vue SpringBoot 搭建的后台管理系统后&#xff0c;实现了前后端分离&#xff0c;并实现了登录认证&#xff0c;认证成功后返回该用户相应权限范围内可见的菜单。 后端采用Spri…

微服务消费端通过feign调用微服异常问题

在项目开发中,我们的调用方通过Feign调用微服时,如果微服出现业务异常(例如空指针,或抛出自定义的异常)和非业务异常(参数不合法4xx异常)都会进入到调用方的全局异常拦截器,抛出的code全部转换成了500,这样不友好 实际上只有业务异常feign才会转换成500错误且转成FeignExcepti…

大开眼界!Jenkins结合SpringCloud+K8S,打通微服一条龙技术讲解

Jenkins 是目前最常用的持续集成工具&#xff0c;拥有近50%的市场份额&#xff0c;他还是很多技术团队的第一个使用的自动化工具。由此可见他的重要性&#xff01; 这份Jenkins宝典从入门介绍到结合DockerSpringCloudKubernetes&#xff0c;打通一条龙技术讲解&#xff0c;简直…

从0搭建公司SpringCloud Alibaba 微服務鉴权中心服务(详细教程)

大家好&#xff0c;我是宝哥&#xff01; 鉴权中心服务 认识JWT json web token 是一个开放的标准 &#xff0c;它定义了一个种紧凑的&#xff0c;自包含的方式&#xff0c;用于作为json对象在各方之间安全的传输信息 服务器鉴权完成之后 会生成 json 对象 发送给客户端&#x…

腾讯云开源业界微服管理框架 Femas

导读 企业数字化向云原生演进过程面临诸多痛点&#xff0c;微服务框架不统一、协议多样化、语言异构&#xff0c;纷繁复杂的微服务技术栈&#xff0c;基础组件之间像一座座孤岛&#xff0c;各个基础组件的控制面不能互联&#xff0c;让用户的体验非常割裂&#xff0c;各种历史包…

基于Ant DesignPro Vue + SpringBoot 前后端分离 - 后端微服化 + 接口网关 + Nacos + Sentinel

基于Ant DesignPro Vue SpringBoot 前后端分离 - 后端微服化 接口网关 Nacos Sentinel 通过Ant DesignPro Vue SpringBoot 搭建的后台管理系统后&#xff0c;实现了前后端分离&#xff0c;并实现了登录认证&#xff0c;认证成功后返回该用户相应权限范围内可见的菜单。 后…

分布式/微服务必配APM系统,SkyWalking让你不迷路

前言 如今分布式、微服务盛行&#xff0c;面对拆分服务比较多的系统&#xff0c;如果线上出现异常&#xff0c;需要快速定位到异常服务节点&#xff0c;假如还用传统的方式排查肯定效率是极低的&#xff0c;因为服务之间的各种通信会让定位更加繁琐&#xff1b;所以就急需一个…

大开眼界,Jenkins 结合 SpringCloud+K8S,打通微服一条龙技术讲解

Jenkins 是目前最常用的持续集成工具&#xff0c;拥有近 50%的市场份额&#xff0c;他还是很多技术团队的第一个使用的自动化工具。由此可见他的重要性&#xff01; 这份 Jenkins 宝典从入门介绍到结合 DockerSpringCloudKubernetes&#xff0c;打通一条龙技术讲解&#xff0c;…

【微服】单体、SOA、微服务

单体架构 将所有的功能都集中在一个模块中&#xff08;WAR包&#xff09;开发、部署、迭代&#xff0c;牵一发而动全身&#xff0c;局部低效率拖垮整个服务。 SOA 按服务对项目拆分&#xff0c;通过对外提供接口的方式提供服务&#xff0c;缓解了单体的单服务低效率拖垮整个服…

微服架构基础设施环境平台搭建 -(三)Docker+Kubernetes集群搭建

微服架构基础设施环境平台搭建 -&#xff08;三&#xff09;DockerKubernetes集群搭建 通过采用微服相关架构构建一套以KubernetesDocker为自动化运维基础平台&#xff0c;以微服务为服务中心&#xff0c;在此基础之上构建业务中台&#xff0c;并通过Jekins自动构建、编译、测试…

微服架构基础设施环境平台搭建 -(二)Docker私有仓库Harbor服务搭建

微服架构基础设施环境平台搭建 -&#xff08;二&#xff09;Docker私有仓库Harbor服务搭建 通过采用微服相关架构构建一套以KubernetesDocker为自动化运维基础平台&#xff0c;以微服务为服务中心&#xff0c;在此基础之上构建业务中台&#xff0c;并通过Jekins自动构建、编译、…

SpringCloud微服架构

微服务架构 1&#xff09;单体应用架构 高效开发&#xff1a;项目前期开发节奏快&#xff0c;团队成员少的时候能够快替代 架构简单&#xff1a;mvc架构&#xff0c;只需要借助Ide开发&#xff0c;调试即可 易于测试&#xff1a;只要通过单元测试或者浏览器完成 易于部署&…

微服架构

首先我们看看为什么要考虑使用微服务。 开发单体式应用 假设你正准备开发一款与Uber和Hailo竞争的出租车调度软件&#xff0c;经过初步会议和需求分析&#xff0c;你可能会手动或者使用基于Rails、Spring Boot、Play或者Maven的生成器开始这个新项目&#xff0c;它的六边形架构…

微服架构基础设施环境平台搭建 -(一)基础环境准备

微服架构基础设施环境平台搭建 -&#xff08;一&#xff09;基础环境准备 通过采用微服相关架构构建一套以KubernetesDocker为自动化运维基础平台&#xff0c;以微服务为服务中心&#xff0c;在此基础之上构建业务中台&#xff0c;并通过Jekins自动构建、编译、测试、发布的自动…

微服架构基础设施环境平台搭建 -(四)在Kubernetes集群基础上搭建Kubesphere平台

微服架构基础设施环境平台搭建 -&#xff08;四&#xff09;在Kubernetes集群基础上搭建Kubesphere平台 通过采用微服相关架构构建一套以KubernetesDocker为自动化运维基础平台&#xff0c;以微服务为服务中心&#xff0c;在此基础之上构建业务中台&#xff0c;并通过Jekins自动…

微服架构简介

什么是微服务&#xff1f; 专业解释&#xff1a; 微服务架构是一种架构模式&#xff0c;它提倡将单一应用程序划分成一组小的服务&#xff0c;服务之间互相协调、互相配合&#xff0c;为用户提供最终价值。每个服务运行在其独立的进程中&#xff0c;服务与服务间采用轻量级的…

微服架构基础设施环境平台搭建 -(五)Docker常用命令

微服架构基础设施环境平台搭建 -&#xff08;五&#xff09;Docker常用命令 本文主要列出了Docker常用的命令 微服架构基础设施环境平台搭建 系列文章 微服架构基础设施环境平台搭建 -&#xff08;一&#xff09;基础环境准备 微服架构基础设施环境平台搭建 -&#xff08;二&am…

微服务简介

文章目录 微服务&#xff08;micro services&#xff09;简介一 什么是微服务&#xff1f;二 微服务这个概念的由来三 微服务和单体式架构区别3.1 单体式架构缺点3.2 微服务架构的解决方案3.3 微服务缺点3.4 微服务优点3.5 单体式和微服务对比 微服务&#xff08;micro service…