搭建cloud项目以及各个依赖和配置说明

news2024/11/18 23:48:28

文章目录

  • 背景
  • 步骤
    • 配置父pom文件
      • spring-cloud和spring-cloud-alibaba的区别
    • 添加网关模块
      • 配置网关的application.yml文件
      • 网关入口
    • 普通模块
      • 普通模块的配置文件:
      • 普通模块的pom文件
      • 启动类:
      • application.yml文件和bootstrap.yml文件的区别
  • 总结

背景

最近在做cloud项目,但是对于cloud项目的搭建还有有疑问的,所以尝试自己进行搭建并把自己遇到的问题进行总结。

步骤

接下来,我将自己是如何操作的一些步骤给总结和整理。

配置父pom文件

在配置pom文件之前首先要搭建一个空的maven项目。在父pom文件中加入依赖。
一、引入依赖:springcloud和cpringcloudalibaba依赖

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <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>

上面的代码中加入的依赖为spring-cloud-dependencies和spring-cloud-alibaba-dependencies

spring-cloud和spring-cloud-alibaba的区别

spring-cloud-alibaba是阿里巴巴开源的组件,主要包含了阿里巴巴在微服务方面的若干开源产品,spring-cloud-alibaba中的主要组件有:

  1. Nacos:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
  2. Dubbo:阿里巴巴开源的一个高性能Java RPC框架。
  3. RocketMQ:一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。
  4. Seata:阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。
  5. Sentinel:阿里巴巴开源产品,一个控制微服务流量的开源框架。
    除此之外,spring-cloud-alibaba还整合了Spring Cloud与上述组件,提供了更加完善的微服务解决方案,主要包含:
  • Service Discovery:包含Nacos与Eureka的发现组件。
  • Configuration:Nacos配置中心组件。
  • Messaging:RocketMQ消息中间件的整合。
  • Distributed Transaction:Seata的分布式事务支持。
  • Circuit Breaker:Sentinel的熔断与限流支持。
  • Gateway:与Spring Cloud Gateway的整合。

spring-cloud是Spring官方提供的微服务开发工具。它基于Spring Boot构建,提供了一系列框架和工具帮助我们快速构建分布式系统中的微服务架构。spring-cloud主要包含以下组件:

  1. Eureka:服务注册中心,用于服务注册与发现。
  2. Ribbon:负载均衡器,在服务调用方进行负载均衡。
  3. Feign:声明式 REST 客户端,简化 RESTful API 的调用。
  4. Hystrix:熔断器,容错管理工具,防止分布式系统中级联故障。
  5. Zuul:API 网关,用于认证、监控和路由转发等功能。
  6. Config:配置中心,通过Git仓库统一管理应用配置。
  7. Bus:事件总线,用于广播配置文件变更事件。
  8. Sleuth:调用链监控系统,用于跟踪微服务中的调用链信息。
  9. Stream:消息驱动微服务,简化消息系统的使用。
  10. Gateway:新的API网关,取代Zuul。
    除此之外,spring-cloud还支持与第三方组件的整合,如:
  • Kubernetes:容器编排平台的整合。
  • Netflix组件:Ribbon、Hystrix、Zuul等。
  • Zookeeper:服务注册发现与配置中心的支持。
  • Consul:服务注册发现与配置中心的支持。
    二者二维表比较:
    在这里插入图片描述标签是依赖管理它主要有以下作用:
  1. 声明依赖的版本号,让子项目的依赖使用相同版本号,实现版本锁定。这可以避免因依赖版本过高或过低导致的构建问题。
  2. 子项目继承自父项目,声明为dependencyManagement的依赖不会实际引入。子项目需要显式声明需要使用的依赖,并从父项目中继承正确的版本号。
  3. 如果子项目中没有声明依赖版本,默认会使用从dependencyManagement继承的版本,实现版本的一致管理。
  4. dependencyManagement只是声明依赖版本,并不实际引入那些依赖。因此,它不会对Maven构建过程产生实际影响。
    二、引入spring-boot-starter-parent
<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.12.RELEASE</version>
 </parent>

为什么要引入spring-boot-starter-parent?
统一管理各种依赖包的版本,避免版本冲突。

  • 继承许多默认的Maven配置,简化pom文件。
  • 能够使用Spring Boot提供的各种starter,快速构建应用。
  • 不需要为许多依赖指定版本号,继承自parent的版本号。

举个例子,如果不使用这个父pom,我们在pom文件中需要声明的依赖信息会非常繁多,像下面这样

<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.1.3.RELEASE</version>
  </dependency>
  
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <version>2.1.3.RELEASE</version>
    <scope>test</scope>
  </dependency>  
  
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <version>2.1.3.RELEASE</version>
    <optional>true</optional>
  </dependency>
  
  <!-- 省略更多... -->
</dependencies>

这样看起来就比较繁琐

而使用了spring-boot-starter-parent之后,pom文件简化为:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.3.RELEASE</version>
</parent>

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-config-server</artifactId>
    </dependency>
</dependencies>

可以看到配置变得非常简单,这就是使用spring-boot-starter-parent的主要好处。

三、添加cloud版本号

<properties>
<!--cloud版本号-->
        <spring-cloud.version>Hoxton.SR12</spring-cloud.version>
        <spring-cloud-alibaba.version>2.2.8.RELEASE</spring-cloud-alibaba.version>
        <java.version>11</java.version>
    </properties>

到这里父pom就基本上配置完毕。

添加网关模块

右击项目–new–添加module,创建普通的manen项目
在这里插入图片描述
网关是cloud项目中所有模块的入口,所以它的配置和普通的配置略有不同。

一、添加依赖:

    <dependencies>
        <dependency>
            <!--     gateway 注意 此模块不能引入starter-web       -->
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>

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

pring-cloud-starter-alibaba-nacos-discovery是Spring Cloud Alibaba中关于Nacos服务发现的起步依赖。引入它可以让Spring Cloud应用使用Nacos作为服务注册与发现中心。

配置网关的application.yml文件

server:
#  该模块的端口号
  port: 8080
spring:
  application:
#  网关名称
    name: gateway
  profiles:
#指定环境
    active: local

  cloud:
    gateway:
      discovery:
        locator: 
          enabled: true # 让gateway从nacos中获取服务信息
      rotes:
        - id: user_route            #用户模块路由
          uri: lb://test   #test项目注册到nacos的服务名称,
          order: 1
          predicates:
            - Path=/test/**  #路由断言,用于判断请求是否符合转发条件。这里是判断请求路径是否以/test开头,如果是则转发到test服务

    nacos:
      discovery:
        server-addr: nacos地址+端口号 #nacos地址
        namespace: FilterTest

网关入口

@SpringBootApplication
@EnableDiscoveryClient   //服务注册是否可以被发现
public class GateWayApplication {
    public static void main(String[] args) {
        SpringApplication.run(GateWayApplication.class,args);
    }
}

普通模块

普通模块创建和网关模块创建是一样的。

普通模块的配置文件:

server:
  port: 8082
  servlet:
    context-path: /test
spring:
  application:
    name: test
  profiles:
    active: local
  cloud:
    nacos:
      discovery:
        server-addr: nacos地址+端口号 #nacos地址
        namespace: FilterTest

普通模块的pom文件

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

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

启动类:

@SpringBootApplication
@EnableDiscoveryClient
public class TestApplication {
    public static void main(String[] args) throws UnknownHostException {
        ConfigurableApplicationContext application =SpringApplication.run(TestApplication.class,args);

}

application.yml文件和bootstrap.yml文件的区别

该例子我搭建的cloud项目使用的配置文件使用的是application.yml,这里有一个优先级的问题,bootstrap.yml的优先级要比application.yml的优先级要高,而且一般使用熔断、限流之类的中间件的时候一般使用bootstrap.yml。

总结

本博客文中只是简单的搭建了一个cloud项目,如果在实际开发过程中需要用到其他的组件,在pom文件中引入相关依赖。

最后搭建完毕之后访问此:http://localhost:8080/test/test/TestController/test地址可以访问到自己的项目。需要说明一下,url地址中的第一个“/test”是网关中配置的地址,第二个test是自己模块中的上下文地址。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/670099.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

chatgpt赋能python:Python描述符:更加灵活的属性管理方式

Python描述符&#xff1a;更加灵活的属性管理方式 Python是一种高级编程语言&#xff0c;它的简单易用、高效性和灵活性使得它成为了现代企业和开发者的首选开发语言之一。然而&#xff0c;在使用Python编写代码时&#xff0c;很多时候需要对属性进行访问和修改&#xff0c;而…

C++单目运算符和特殊运算符的重载(9)

运算符的重载 原理和机制 C中运算符只支持基本数据类型运算&#xff0c;如果需要运算符支持类类型的运算&#xff0c;需要使用C提供的新语法 ------- 运算符的重载 运算符的重载本质上是通过函数来实现的&#xff0c;将类类型数据的运算过程写成一个特殊的函数&#xff0c;当…

YOLOv8 图像分割

一、背景 二、环境配置 官网&#xff1a;Previous PyTorch Versions | PyTorch cuda 11.7 pytorch 1.13.0 torchvision 0.14.0 pytorch-cuda 11.7 三、安装yolov8 官网&#xff1a;GitHub - ultralytics/ultralytics: NEW - YOLOv8 &#x1f680; in PyTorch > ONNX &…

Mendix 10 树形组件分析及应用

一、前言 产品研发目标是服务于业务&#xff0c;解决具体业务问题&#xff0c;带来业务价值。 因此&#xff0c;任何产品功能的推出&#xff0c;都应该秉承“从实践中来&#xff0c;到实践中去”的原则&#xff0c;在实战中发现问题&#xff0c;通过新功能设计和功能改进解决…

chatgpt科普

引言 chatgpt没有国内开放&#xff0c;为什么如此重要。抛开技术细节&#xff0c;少用专业名词&#xff0c;在整体功能上讲解 ChatGPT 的工作原理、制造过程、涌现的能力、未来的影响以及如何应对。让大家明白&#xff1a; ChatGPT是如何回答问题的。 它是怎么被制造的&…

Go语言实现单链表

博主最近在学习Go语言&#xff0c;所以打算更新一期Go语言版本的数据结构。这篇文章将的是Go语言如何实现单链表。 文章目录 前言一、个人见解&#xff0c;为什么学GO&#xff1f;二、Go语言实现单链表1.创建节点2.通过数组创建一个单链表3.遍历单链表4.单链表插入操作4.1 伪代…

HOOPS Visualize SDK 2023 Crack

桌面和移动工程应用程序的图形引擎 HOOPS Visualize 是 3D 图形 SDK&#xff0c;支持来自市场领导者 Hexagon、Trimble、Ansys、SOLIDWORKS、™ Autodesk 等的数百个工程应用程序。 用于 3D CAD 渲染的图形 SDK HOOPS Visualize 是一个以工程为中心的高性能图形库&#xff0c…

安卓蓝牙ATT协议介绍

介绍 ATT&#xff0c;Attribute Protocol&#xff0c;用于发现、读、写对端设备的协议(针对BLE设备) ATT允许蓝牙远程设备&#xff08;比如遥控器&#xff09;作为服务端提供拥有关联值的属性集&#xff0c;让作为客户端的设备&#xff08;比如手机、电视&#xff09;来发现、…

通用能力及AI核心能力表现优异!合合信息智能文档处理系统(IDP)高评级通过中国信通院评估

数字经济快速发展的背后&#xff0c;全球数据总量呈现出爆发式增长趋势。智能文档处理&#xff08;IDP&#xff09;技术能够高效地从多格式文档中捕捉、提取和处理数据&#xff0c;帮助机构和企业大幅提升文档处理效率&#xff0c;节约时间和人力成本。近期&#xff0c;合合信息…

C语言进阶--字符函数与内存函数

目录 一.字符函数 1.strlen函数 模拟实现strlen 2.strcpy函数 模拟实现strcpy 3.strcat函数 模拟实现strcat strcat能否用于自己追加自己&#xff1f; 4.strcmp函数 模拟实现strcmp 5.strncpy函数 6.strncat函数 7.strncmp函数 模拟实现strncmp 8.strstr函数 模…

哨兵2号数据下载与利用Python处理(波段融合、降采样、可视化、裁剪等)

简单介绍 网址:https://scihub.copernicus.eu/dhus/#/home 哨兵2号(Sentinel-2)是欧洲空间局(European Space Agency,简称ESA)推出的一组遥感卫星,旨在为地球观测和环境监测提供高质量的光学图像数据。 S2MSI2A是哨兵2号卫星的一种传感器。 S2MSI2A是哨兵2号卫星搭载…

huggingface - PEFT.参数效率微调

GitHub - huggingface/peft: &#x1f917; PEFT: State-of-the-art Parameter-Efficient Fine-Tuning. 最先进的参数高效微调 (PEFT) 方法 Parameter-Efficient Fine-Tuning (PEFT) 方法可以使预训练语言模型 (PLM) 高效适应各种下游应用程序&#xff0c;而无需微调模型的所有…

记录--Vue3 封装 ECharts 通用组件

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 按需导入的配置文件 配置文件这里就不再赘述&#xff0c;内容都是一样的&#xff0c;主打一个随用随取&#xff0c;按需导入。 import * as echarts from "echarts/core"; // 引入用到的图表…

ctfshow web入门 php特性 web93-97

1.web93 intval($num,0),0代表根据变量类型进行使用哪一种进制进行取整 可以使用8进制&#xff0c;正负数&#xff0c;小数点 payload: 010574 4476.0 4476.0 2.web94 过滤了0&#xff0c;不能使用8进制了&#xff0c;还可以使用小数点&#xff0c;正负数等 payload&#xff1…

【Java算法题】剑指offer_算法之02动态规划

对于动态规划问题&#xff0c;我将拆解为如下五步曲&#xff0c;这五步都搞清楚了&#xff0c;才能说把动态规划真的掌握了&#xff01; 确定dp数组&#xff08;dp table&#xff09;以及下标的含义确定递推公式dp数组如何初始化确定遍历顺序举例推导dp数组 JZ42 连续子数组的…

CTFshow-pwn入门-栈溢出pwn35-pwn36

pwn35 首先还是先下载pwn文件拖进虚拟机加上可执行权限&#xff0c;使用checksec命令查看文件的信息。 chmod x pwn checksec pwn32位的我们直接拖进ida中反编译&#xff1a; // main int __cdecl main(int argc, const char **argv, const char **envp) {FILE *stream; // […

阿里云 OSS介绍

1、什么是阿里云 OSS&#xff1f; OSS 为 Object Storage Service&#xff0c;即对象存储服务。是阿里云提供的海量、安全、低成本、高可靠的云存储服务。 OSS 具有与平台无关的 RESTful API 接口&#xff0c;可以在任意应用、任意时间、任意地点 存储与访问 任何类型的数据。…

软考:软件工程:软件可行性分析,需求分析,ER实体图,数据流图,状态转换图,数据字典

软考&#xff1a;软件工程: 提示&#xff1a;系列被面试官问的问题&#xff0c;我自己当时不会&#xff0c;所以下来自己复盘一下&#xff0c;认真学习和总结&#xff0c;以应对未来更多的可能性 关于互联网大厂的笔试面试&#xff0c;都是需要细心准备的 &#xff08;1&#…

微信小程序——分页组件的创建与使用

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

使用Aspose.Words将word转PDF并且去水印。

&#x1f61c;作 者&#xff1a;是江迪呀✒️本文关键词&#xff1a;Java、工具类、转换、word转pdf、Aspose.Words、后端☀️每日 一言&#xff1a;只要思想不滑坡&#xff0c;办法总比困难多。 前言 在我们日常开发中经常会有将word文档转为PDF的场景&#xff0…