ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

springCould基础项目

springCould基础项目

springCould基础项目

一、准备工作
编码工具:idea
环境:java17、maven
其他:nacos
微服务架构中,Nacos的核心作用可以概括为两点:服务注册与发现中心,以及动态配置管理中心。它就像一个微服务的“通讯录”和“控制面板”,解决了服务之间如何互相找到、以及如何在不重启的情况下调整设置的问题。
二、项目结构

myblog下的每一个模块就是一个微服务,其中myblog-common是公共类,主要放置共同的类,方法类之类的。
父项目主要负责管理子项目依赖的基本版本,父项目的主要配置pom.xml

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.3.2</version><relativePath/><!-- lookup parent from repository --></parent><packaging>pom</packaging><modules><module>myblog-common</module><module>myblog-article</module><module>myblog-gateway</module><module>myblog-admin</module></modules><properties><!-- 统一版本管理 --><java.version>17</java.version><spring-boot.version>3.3.2</spring-boot.version><myblog-common.version>0.0.1-SNAPSHOT</myblog-common.version><lombok.version>1.18.30</lombok.version><mysql.version>8.4.0</mysql.version><mybatis-plus.version>3.5.7</mybatis-plus.version><!-- Spring Cloud 相关版本 --><spring-cloud.version>2023.0.2</spring-cloud.version><spring-cloud-alibaba.version>2023.0.1.0</spring-cloud-alibaba.version></properties><dependencyManagement><dependencies><!-- Spring Boot Web 启动器 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>${spring-boot.version}</version><!-- 建议与基础依赖保持相同版本 --></dependency><!-- Lombok 依赖 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok.version}</version><!-- 请根据实际情况填写具体版本 --><optional>true</optional></dependency><!-- Spring Boot 测试依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><version>${spring-boot.version}</version><!-- 建议与基础依赖保持相同版本 --><scope>test</scope></dependency><!-- 连接mysql的依赖 --><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>${mysql.version}</version></dependency><!-- springboot结合mybatis-plus --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>${mybatis-plus.version}</version></dependency><!-- 新增:Spring Cloud 依赖管理 --><!-- 新增:这个字典里记录了 Spring Cloud 旗下几十个组件(如 Gateway、OpenFeign)各自应该用哪个版本--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${spring-cloud.version}</version><type>pom</type><scope>import</scope></dependency><!-- 新增:Spring Cloud Alibaba 依赖管理 --><!-- 这个字典里记录了 Nacos、Sentinel、Seata 等阿里组件应该用哪个版本--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>

三、api接口提供方
一个子项目article的主要pom.xml

<parent><groupId>com.caolvchong</groupId><artifactId>myblog</artifactId><version>0.0.1-SNAPSHOT</version></parent><dependencies><!--基础公共类--><dependency><groupId>com.caolvchong</groupId><artifactId>myblog-common</artifactId><version>0.0.1-SNAPSHOT</version></dependency><!-- Spring Boot 基础依赖,继承自父项目 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><!-- Spring Boot Web 启动器,用于构建 Web 应用,包含 Tomcat 和 Spring MVC --<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Lombok 依赖,用于通过注解简化 Java 代码(如自动生成 Getter/Setter) --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!-- Spring Boot 测试依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- 连接mysql的依赖 --><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId></dependency><!-- springboot结合mybatis-plus --><dependency><groupId>com.baomidou</groupId><!--1. 注意:这里必须换成带 spring-boot3 后缀的坐标 --><artifactId>mybatis-plus-spring-boot3-starter</artifactId></dependency><!-- 配置中心 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><!-- Nacos 服务注册与发现 --><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><!-- 服务间声明式调用(OpenFeign)--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><!-- 负载均衡器(Spring Cloud2020+ 必须引入)--><!-- 只要你的微服务项目中使用了 OpenFeign 或者带有 @LoadBalanced 注解的 RestTemplate 进行服务间调用, 就必须引入 spring-cloud-starter-loadbalancer。缺少它,微服务架构下的服务调用将完全无法运转。--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId></dependency></dependencies>

artilce的配置文件,主要连接nacos进行配置

server:# 服务端口号port:8081spring:# 服务端名称,对应 Nacos 上的 Data ID 前缀application: name: myblog-article-service config:# Spring Cloud 2020+ 版本 强制要求显式声明配置导入import: optional:nacos:myblog-article-service.yaml cloud: nacos:# 2. 服务发现配置(用于注册与发现)discovery: server-addr:103.212.187.237:8848 group: BLOG_GROUP namespace: e802618c-aa9c-45d0-a521-41f0997ba376# 3. 配置中心配置(用于拉取配置,必须单独写)config: server-addr:103.212.187.237:8848 group: BLOG_GROUP namespace: e802618c-aa9c-45d0-a521-41f0997ba376 file-extension: yaml


在article中编写一个正常的接口

package com.caolvchong.myblogarticle.controller;/** * 类别 */ @RestController @RequestMapping("/category")public class CategoryController{@Autowired private CategoryService categoryService;/** * 获取所有分类 * @return */ @PostMapping("/getCatgoryList")public ResultVo<List<Category>>getCategoryList(){List<Category>list=categoryService.list();if(list!=null){returnResultVo.success(list);}else{returnResultVo.error("400","获取失败");}}}

四、api接口的调用方
admin的pom.xml和article基本相同主要添加openfeign的依赖,这个依赖主要是去向其他微服务发送请求

<!-- 服务间声明式调用(OpenFeign)--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency>

修改启动类

package com.caolvchong.myblogadmin;//@SpringBootApplication @EnableFeignClients @SpringBootApplication(exclude={DataSourceAutoConfiguration.class})public class MyblogAdminApplication{public static void main(String[]args){SpringApplication.run(MyblogAdminApplication.class, args);}}

发送请求的接口

/** * admin获取 分类 */ //name对应微服务的service的name @FeignClient(name="myblog-article-service")public interface CategoryClient{/** * 获取所有分类 * @return */ //路径一定要和提供方的路径相同 @PostMapping("/category/getCatgoryList")public ResultVo<List<CategoryDto>>getCategoryList();}
返回列表