【springcloud】快速搭建一套分布式服务springcloudalibaba(一)

news/2025/2/24 9:02:05

第一篇 基于nacos搭建一套springcloud分布式服务
项目所需 maven + nacos + java8 + idea + git
当前项目为快速搭建 用户服务提供查询,商品服务查询用户信息
请先准备好环境,可以直接clone下来项目去部署。

快速搭建一套分布式服务

  • 项目结构
  • 关于搭建
  • 下载配置nacos
    • 下载
    • 解压与配置
  • 快速搭建一套分布式服务
    • commonUtil 服务
    • 用户服务
      • 创建项目
      • 启动项目
        • 问题一
        • 问题二
        • 问题三(重要)
        • 问题四(脚手架循环依赖注入)
    • 商品服务
    • 调试
      • 用户服务 通过id获取用户
      • 商品服务 通过用户服务获取用户信息
      • 启动信息
      • 调试过程的问题与解决
        • 问题一
        • 问题二
  • 总结

项目结构

模拟实际场景创建分布式应用 各个服务是单一的module


git clone git@gitee.com:goodluckv/ali-cloud-common.git
git clone git@gitee.com:goodluckv/ali-cloud-goods.git
git clone git@gitee.com:goodluckv/ali-cloud-user.git

在这里插入图片描述

关于搭建

下载配置nacos

下载

官网地址 nacos下载
楼主主要做演示用,直接下载的最新的稳定版本。2.5.0。如果没有了请在历史版本中查询。

在这里插入图片描述

解压与配置

解压后的目录
在这里插入图片描述

启动命令 sh /Users/***/nacos/bin/startup.sh -m standalone

nacos is starting with standalone
nacos is starting. you can check the /Users/***/nacos/logs/start.out

输入下面url 进入管理页面 如果成功进去即部署成功。2.5.0版本开发版本单机模式启动是开封即用的。
http://127.0.0.1:8848/nacos

在这里插入图片描述

如果想进一步了解可以 进入conf目录 查看application.properties
启动前请确保默认配置8848端口没有被占用
-m standalone 参数可以快速启动 Nacos 单机模式,适合开发和测试。
单机模式的特点

  • 无需集群配置:单机模式下,Nacos 不会尝试与其他节点通信,适合本地开发或测试。
  • 默认使用嵌入式数据库(Derby):单机模式下,Nacos 默认使用内置的 Derby 数据库存储数据。
  • 快速启动:无需额外配置,适合快速验证功能。

配置文件application.properties 的作用

  1. 修改端口号 默认端口8848
  2. 上下文路径: 默认 /nacos
  3. Nacos 支持使用 MySQL 作为持久化存储 单机模式下,默认使用 Derby 数据库,数据存储在 ${NACOS_HOME}/data 目录下
  4. 集群配置 nacos支持集群部署 nacos.core.cluster.members
  5. 认证与安全 支持身份认证可以加入用户名和密码 默认无nacos.core.auth.enabled nacos.core.auth.server.identity
  6. 线程池配置 与 HTTP 请求超时配置
    还有很多 就不一个一个写了。我们看下一步

快速搭建一套分布式服务

commonUtil 服务

用于定义接口通讯的返回值等参数 模拟开发场景 因为是快速部署我们先定义基础类即可. boot项目会帮我把目录建好,我就直接选boot项目了。next选工具包时选择开发工具包中的Lombok 即可。
在这里插入图片描述
创建完成后 把目录修改一下 pom文件不需要的东西清除 。
在这里插入图片描述
pom中 加入下方的plugin打包 打包的地址 altDeploymentRepository,记得更改为自己的

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-deploy-plugin</artifactId>
                <version>2.8.2</version>
                <configuration>
                    <altDeploymentRepository>local::default::file:///Users/***/software/javajre/localjar</altDeploymentRepository>
                </configuration>
            </plugin>

用户服务

用于登录与获取用户信息

创建项目

在这里插入图片描述
需要选中的包

  • discovery 用于注册nacos与服务发现。configuration 用于nacos的动态配置信息获取。
  • web springWeb项目开发脚手架,快速搭建服务
  • openFeign 用于简化微服务之间的 远程调用。可以直接使用注解调用二方远程服务
  • loadbalancer 用于负载均衡 默认启用 按顺序依次选择服务实例 还可以随机 权重 自定义 (Ribbon 官方已经不推荐使用了)在这里插入图片描述
    创建完之后的目录 。因为springcloud是给我提供的分布式脚手架,也基本做到了开封即用,所以项目创建之后直接是配置好的。

在这里插入图片描述
标注的几个地方需要改成自己的。
spring.application.name 会作为服务的唯一标识用于注册服务或者发现服务。

在这里插入图片描述

pom 别忘了加入自己的common包

<dependency>
            <groupId>com.alicloud.common</groupId>
            <artifactId>ali-cloud-common</artifactId>
            <version>250223.002</version>
        </dependency>

启动项目

问题一

做完上面那些就可以启动项目了。脚手架第一次启动会报错
原因: 我们导入了configuration 脚手架会自动注入 动态配置管理供我们参考,但我们的nacos中没有user.age信息 所以报错 ,这个时候进入本地nacos管理平台 加入配置即可。
配置中心的dataId 对应项目application.properties的 spring.config.import
http://127.0.0.1:8848/nacos

Could not resolve placeholder 'user.age' in value "${user.age}"
问题二

如果提示下面这个报错,是因为springbootweb集成的脚手架里面有/user了,url冲突了,改个url就行。

{ [/user]}: There is already 'nacosConfigSampleController' bean method
问题三(重要)

类 NacosConfigDemoConfiguration 中的dataId = “nacos-config-example.properties”; 记得修改成这个。具体为啥会是nacos-config-sample.properties可能是想让我们体验排查到问题的开心

问题四(脚手架循环依赖注入)

BrokerThe dependencies of some of the beans in the application context form a cycle:
脚手架再给我们演示负载均衡时触发了循环依赖注入了RestTemplateController
application.properties在这个配置文件里面把下面这个配置加上

spring.main.allow-circular-references=true

Spring Boot 2.6.0 及以上版本默认:false(禁用循环依赖)。
Spring Boot 2.6.0 以下版本默认:true(允许循环依赖)。

图内的三个是我调试的信息,可以结合自己跑起来的看看。
在这里插入图片描述

dataId 对应项目中的 spring.config.import
在这里插入图片描述

user.name=测试
user.age=18

在这里插入图片描述

商品服务

用户服务启动之后 可以直接复制一套。
记得pom引入 ali-cloud-common 。
application.properties中的信息改成商品服务的信息。

调试

用户服务 通过id获取用户

在这里插入图片描述

商品服务 通过用户服务获取用户信息

商品服务获取用户信息一共有俩种方式 第一种是 @FeignClient(“user-service”) 注解方式
第二种是 restTemplate 集成的LoadBalanced 负载均衡请求。
俩者都是默认轮询负载。
在这里插入图片描述
在这里插入图片描述

启动信息

部署三台user-service服务提供给goods服务调用
在这里插入图片描述

服务启动了,试试调用 。我是在goods服务通过userId获取用户的信息。

http://127.0.0.1:8090/goods/user/get?userId=1000

在这里插入图片描述

**根据控制台日志信息确实是轮训 且按轮询调用处理。 因为是三个实例就不贴图了
**

调试过程的问题与解决

问题一

NacosDiscoveryConsumerConfiguration 这个配置类在哪个包下面只会扫当前目录里面的包注解@FeignClient 。
把@EnableFeignClients 放到启动类中,就会扫整个目录了。

问题二

getUser2
get请求发送参数 在方法中必须 加入@RequestParam
post请求必须加入 @RequestBody
对应的@RequestHeader(“Authorization”) 发送请求头信息
@PathVariable(“id”) 获取路径中的参数

@FeignClient("user-service")

    @GetMapping("/user/get2")
    Res<User> getUser2(@RequestParam("userId") Long userId);

总结

八股文:
分布式服务 是一种将应用程序的功能拆分为多个独立的服务,并将这些服务部署在不同的计算节点(服务器、虚拟机、容器等)上的架构模式。每个服务可以独立开发、部署和扩展,并通过网络进行通信和协作,共同完成应用程序的功能。
目前只实现了程序拆分俩个独立的服务,后面还需要实现统一网管路由,因为部署多个实例,需要有一个统一网关进入实例(配置登录认证)分布式锁,分布式事务等等。
nacos是真的好用,相当于集成了eurke + apollo / 服务注册发现 和 动态配置管理。自身也可以直接部署多个实例。

希望本文可以帮到你。


http://www.niftyadmin.cn/n/5864141.html

相关文章

驱动开发系列39 - Linux Graphics 3D 绘制流程(二)- 设置渲染管线

一:概述 Intel 的 Iris 驱动是 Mesa 中的 Gallium 驱动,主要用于 Intel Gen8+ GPU(Broadwell 及更新架构)。它负责与 i915 内核 DRM 驱动交互,并通过 Vulkan(ANV)、OpenGL(Iris Gallium)、或 OpenCL(Clover)来提供 3D 加速。在 Iris 驱动中,GPU Pipeline 设置 涉及…

跨平台公式兼容性大模型提示词模板(飞书 + CSDN + Microsoft Word)

飞书云文档 CSDN MD编辑器 Microsoft Word 跨平台公式兼容方案&#xff1a; 一、背景痛点与解决方案 在技术文档创作中&#xff0c;数学公式的跨平台渲染一直存在三大痛点&#xff1a; 飞书云文档&#xff1a;原生KaTeX渲染与导出功能存在语法限制微软Word&#xff1a;Math…

数据结构3-栈和队列

栈和队列的操作特点 栈和队列是限定插入和删除只能在表的“端点”进行的线性表 栈&#xff08;操作尾部&#xff09;和队列&#xff08;操作头部&#xff09;是线性表的子集&#xff08;是插入和删除位置受限的线性表&#xff09; 栈&#xff08;Stack&#xff09; 栈是一个…

机器人部分专业课

华东理工 人工智能与机器人导论 Introduction of Artificial Intelligence and Robots 必修 考查 0.5 8 8 0 1 16477012 程序设计基础 The Fundamentals of Programming 必修 考试 3 64 32 32 1 47450012 算法与数据结构 Algorithm and Data Structure 必修 考试 3 56 40 …

debian 12安装 postgresql 17

按照官方文档安装&#xff0c;即可安装成功 https://www.postgresql.org/download/linux/debian/ 添加存储库 #添加存储库 sudo apt install -y postgresql-common#执行 存储库内 命令&#xff0c;自动处理某些东西 sudo /usr/share/postgresql-common/pgdg/apt.postgresql.o…

演示基于FPGA的视频图像去雾处理效果

我近期用FPGA开发板做了一个视频图像去雾算法模块&#xff0c;用于验证其能否在不进行帧缓冲的情况下实现去雾功能。 去雾算法来自一篇技术资料&#xff08;私信提供篇名&#xff09;&#xff0c;其基础是近似的大气光模型。 1 算法原理概要 借助RGB直角坐标空间中的光矢量分…

【电机控制器】ESP32-C3语言模型——通义千问

【电机控制器】ESP32-C3语言模型——通义千问 文章目录 [TOC](文章目录) 前言一、简介二、代码三、实验结果四、参考资料总结 前言 使用工具&#xff1a; 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、简介 二、代码 #include <WiFi.h> …

达梦数据库学习笔记@1

目录 达梦数据库学习笔记一、表空间管理&#xff08;一&#xff09;默认表空间&#xff08;二&#xff09;相关数据字典&#xff08;三&#xff09;表空间操作&#xff08;四&#xff09;临时表空间管理 二、重做日志管理&#xff08;一&#xff09;系统视图&#xff08;二&…