springcloudalibaba入门详细使用教程

news2024/11/25 11:27:28

目录标题

  • 一、简介
  • 二、SpringCloud Alibaba核心组件
    • 2-1、Nacos (配置中心与服务注册与发现)
    • 2-2、Sentinel (分布式流控)
    • 2-3、RocketMQ (消息队列)/RabbitMq/kafka
    • 2-4、Seata (分布式事务)
    • 2-5、Dubbo (RPC)
  • 三、为什么大家看好 Spring Cloud Alibaba
    • 3-1、阿里巴巴强大的技术输出能力
    • 3-2、集成Dubbo,利用Dubbo在微服务领域的超高人气
    • 3-3、云原生趋势,集成阿里云商业化组件
  • 四、创建简单项目
    • 4-1、微服务环境搭建
    • 4-2、版本依赖
    • 4-3、组件版本关系
    • 4-4、创建项目
      • 4-4-1 导入springboot的jar包
      • 4-4-2 创建maven以及导入jar包
      • 4-4-3 运行App
      • 4-4-4 创建实例项目
  • 五、创建公共类存放
    • 5-1、创建sys-comm作为公共类
    • 5-2、sys-order
    • 5-3、sys-pro

一、简介

很多人可能会问,有了spring cloud这个微服务的框架,为什么又要使用spring cloud alibaba这个框架了?最重要的原因在于spring cloud中的几乎所有的组件都使用Netflix公司的产品,然后在其基础上做了一层封装。然而Netflix的服务发现组件Eureka已经停止更新;而其他的众多组件在2020年停止维护。所以急需其他的一些替代产品,也就是spring cloud alibaba,SpringCloud Alibaba是依赖SpringCloud相关的标准实现的一套微服务的架构。
作为 Spring Cloud 体系下的新实现,Spring Cloud Alibaba 跟官方的组件或其它的第三方实现如 Netflix, Consul,Zookeeper 等对比,具备了更多的功能:在这里插入图片描述

微服务架构的常见问题 一旦采用微服务系统架构,就势必会遇到这样几个问题:
• 这么多小服务,如何管理他们?(服务治理 注册中心[服务注册 发现 剔除])
• 这么多小服务,他们之间如何通讯?(restful rpc)
• 这么多小服务,客户端怎么访问他们?(网关 GateWay)
• 这么多小服务,一旦出现问题了,应该如何自处理?(容错)
A–>B–>C–D—E sentinel
• 这么多小服务,一旦出现问题了,应该如何排错? (链路追踪)
sluth
对于上面的问题,是任何一个微服务设计者都不能绕过去的,因此大部分的微服务产品都针对每一 个问题提供了相应的组件来解决它们

二、SpringCloud Alibaba核心组件

配置中心 nacos : springcloud config
服务治理中心nacos : Eurke

2-1、Nacos (配置中心与服务注册与发现)

Nacos实现了服务的配置中心与服务注册发现的功能,Nacos可以通过可视化的配置降低相关的学习与维护成本,实现动态的配置管理与分环境的配置中心控制。 同时Nacos提供了基于http/RCP的服务注册与发现功能。

2-2、Sentinel (分布式流控)

Sentinel是面向分布式微服务架构的轻量级高可用的流控组件,以流量作为切入点,从流量控制,熔断降级,系统负载保护等维度帮助用户保证服务的稳定性。常用与实现限流、熔断降级等策略。

2-3、RocketMQ (消息队列)/RabbitMq/kafka

RocketMQ基于Java的高性能、高吞吐量的消息队列,在SpringCloud Alibaba生态用于实现消息驱动的业务开发,常见的消息队列有Kafka、RocketMQ、RabbitMQ等,相关的比较文档可以自行去翻阅。

2-4、Seata (分布式事务)

既然是微服务的产品,那么肯定会用到分布式事物。Seata就是阿里巴巴开源的一个高性能分布式事物的解决方案。

2-5、Dubbo (RPC)

Dubbo已经在圈内很火了,SpringCloud Alibaba基于上面提到的Nacos服务注册中心也同样整合了Dubbo。
在这里插入图片描述

三、为什么大家看好 Spring Cloud Alibaba

3-1、阿里巴巴强大的技术输出能力

阿里巴巴无疑是国内开源技术领域的最有影响力的公司之一,已经有Dubbo、Druid,FastJson等成功的开源组件,
再加上阿里不遗余力的推广,社区发展也非常快。

3-2、集成Dubbo,利用Dubbo在微服务领域的超高人气

Dubbo是国内应用最广的分布式服务框架之一,基于Dubbo改造的Dubbox等也有很多公司在使用,
Spring Cloud Alibaba对Dubbo做了比较好的集成,可以吸引不少使用Dubbo的开发者。

3-3、云原生趋势,集成阿里云商业化组件

云原生(Cloud Native)是今年技术领域特别热门的一个词,云原生是一种专门针对云上应用而设计的方法,用于构建和部署应用,以充分发挥云计算的优势。
Spring Cloud Alibaba 集成了阿里云的商业化组件,可以说天然支持云原生特性。

四、创建简单项目

4-1、微服务环境搭建

微服务环境搭建

数据库:mysql
持久层:mybatis-plus
Springcloud:Hoxton.SR9
SpringcludAlibaba: 2.2.6.RELEASE
SpringBoot:2.3.2.RELEASE
nacos:1.4.2
最新的版本对应关系可以参考网址:
https://github.com/alibaba/spring-cloud-alibaba

4-2、版本依赖

在这里插入图片描述
在这里插入图片描述

4-3、组件版本关系

每个 Spring Cloud Alibaba 版本及其自身所适配的各组件对应版本如下表所示(注意,Spring Cloud Dubbo 从 2021.0.1.0 起已被移除出主干,不再随主干演进)
在这里插入图片描述

4-4、创建项目

  • 先创建springboot
  • 在springboot下创建maven
    在这里插入图片描述

在这里插入图片描述

4-4-1 导入springboot的jar包

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <packaging>pom</packaging>
    <modules>

        <module>sys-order</module>
        <module>sys-pro</module>
        <module>sys-comm</module>
    </modules>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.2</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>cloudalibaba</name>
    <description>Demo project for Spring Boot</description>
    <!--设置一些属性-->
    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

        <spring-cloud.version>2020.0.1</spring-cloud.version>
        <spring-cloud-alibaba.version>2021.1</spring-cloud-alibaba.version>
    </properties>
<!--    <dependencies>-->
<!--        <dependency>-->
<!--            <groupId>org.springframework.boot</groupId>-->
<!--            <artifactId>spring-boot-starter</artifactId>-->
<!--        </dependency>-->

<!--        <dependency>-->
<!--            <groupId>org.springframework.boot</groupId>-->
<!--            <artifactId>spring-boot-starter-test</artifactId>-->
<!--            <scope>test</scope>-->
<!--        </dependency>-->
<!--    </dependencies>-->

    <!--版本管理,不引入jar 包-->
    <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>


    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <image>
                        <builder>paketobuildpacks/builder-jammy-base:latest</builder>
                    </image>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

4-4-2 创建maven以及导入jar包

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>demo</artifactId>
        <groupId>com.example</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>sys-pro</artifactId>

    <name>sys-pro</name>
    <!-- FIXME change it to the project's website -->
    <url>http://www.example.com</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>

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

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>


    </dependencies>

</project>

4-4-3 运行App

package com.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * Hello world!
 *
 */
@SpringBootApplication
public class ProApp
{
    public static void main( String[] args )
    {
        System.out.println( "Hello World!" );
        SpringApplication.run(ProApp.class );
    }
}

4-4-4 创建实例项目

entity

package com.example.entity;


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Product {
    private Integer id;
    private String name;
}

controller

package com.example.controller;

import com.example.entity.Product;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class Procontroller {

    @GetMapping("/pro/{id}")
    public Product  getProById(@PathVariable Integer id) {
        return new Product(1,"test"+id);
    }
}

在这里插入图片描述

在这里插入图片描述

五、创建公共类存放

5-1、创建sys-comm作为公共类

在这里插入图片描述

    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>
package com.example.entity;


import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Product {
    private Integer id;
    private String name;
}

5-2、sys-order

pom.xml 需要引入sys-comm公共类

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
      <version>2.4.2</version>
    </dependency>
<!--        引用公共类-->
    <dependency>
      <groupId>com.example</groupId>
      <artifactId>sys-comm</artifactId>
      <version>0.0.1-SNAPSHOT</version>
    </dependency>
  </dependencies>

controller

package com.example.controller;

import org.springframework.boot.autoconfigure.kafka.KafkaProperties;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import javax.annotation.Resource;

@RestController
public class OrderController {

    // 远程调用
    @Resource
    private RestTemplate restTemplate;

    public  Object addOrder(@PathVariable Integer pid) {
        KafkaProperties.Producer forObject= restTemplate.getForObject("http://localhost:8082/pro/2"+pid, KafkaProperties.Producer.class);
        return  forObject;
    }
}

App

package com.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

/**
 * Hello world!
 *
 */
@SpringBootApplication
public class OrderApp
{
    public static void main( String[] args )
    {
        System.out.println( "Hello World!" );
        SpringApplication.run(OrderApp.class);
    }

    @Bean
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
}

在这里插入图片描述

5-3、sys-pro

pom.xml 需要引入sys-comm公共类


    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>

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

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

<!--        引用公共类-->
        <dependency>
            <groupId>com.example</groupId>
            <artifactId>sys-comm</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
    </dependencies>

controller

package com.example.controller;

import com.example.entity.Product;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class Procontroller {

    @GetMapping("/pro/{id}")
    public Product  getProById(@PathVariable Integer id) {
        return new Product(1,"test"+id);
    }
}

App

package com.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * Hello world!
 *
 */
@SpringBootApplication
public class ProApp
{
    public static void main( String[] args )
    {
        System.out.println( "Hello World!" );
        SpringApplication.run(ProApp.class );
    }
}

在这里插入图片描述

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

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

相关文章

使用责任链模式实现登录风险控制

责任链模式 责任链模式是是设计模式中的一种行为型模式。该模式下&#xff0c;多个对象通过next属性进行关系关联&#xff0c;从而形成一个对象执行链表。当发起执行请求时&#xff0c;会从首个节点对象开始向后依次执行&#xff0c;如果一个对象不能处理该请求或者完成了请求…

福建科立讯通信 指挥调度管理平台RCE漏洞复现

0x01 产品简介 福建科立讯通信指挥调度管理平台是一个专门针对通信行业的管理平台。该产品旨在提供高效的指挥调度和管理解决方案&#xff0c;以帮助通信运营商或相关机构实现更好的运营效率和服务质量。该平台提供强大的指挥调度功能&#xff0c;可以实时监控和管理通信网络设…

一文让你了解网络刷卡器的特点和优势

网络刷卡器一款高性能的多协议电子标签读写器&#xff0c;保持高识读率的同时实现对电子标签的快速读写处理&#xff0c;广泛应用于物流追踪、个人身份识别、人员管理、智能停车场、门禁考勤、公交一卡通、餐饮、金融等多个领域。 特点和优势&#xff1a; 1&#xff09;低功耗、…

知识管理工具zotero的数据迁移工作

工作中一直使用zotero来管理一些有价值的文档&#xff0c;时间长了这个数据库的大小也是很大的&#xff0c;如果有调整电脑的需求&#xff0c;那么这个数据库就要随之迁移&#xff0c;zotero有两种数据迁移方式&#xff0c;一种是云同步&#xff0c;需要买zotero的容量&#xf…

【FastCAE源码阅读8】调用gmsh生成网格

FastCAE使用gmsh进行网格划分&#xff0c;划分的时候直接启动一个新的gmsh进程&#xff0c;个人猜测这么设计是为了规避gmsh的GPL协议风险。 进行网格划分时&#xff0c;其大体运行如下图&#xff1a; 一、Python到gmshModule模块 GUI操作到Python这步不再分析&#xff0c;比…

C++学习第三十七天----第十章--对象和类

10.2.2 C中的类 类是一种将抽象转换未用户定义类型的C工具&#xff0c;它将数据表示和操作数据的方法合成一个整洁的包。 接口&#xff1a;一个共享框架&#xff0c;供两个系统交互时使用。 1.访问控制 使用类对象的程序可以直接访问类的公有部分&#xff0c;但只能通过公有…

单片机定时器讲解和实现

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、计数器是什么&#xff1f;二、单片机定时器结构2.1***两个8位如何合成16位&#xff0c;16位如何分成两个8位***2.2 计数器的位数组合&#xff1f;2.3 定时功…

用python将csv表格数据做成热力图

python的开发者为处理表格和画图提供了库的支持&#xff0c;使用pandas库可以轻松完成对csv文件的读写操作&#xff0c;使用matplotlib库提供了画热力图的各种方法。实现这个功能首先需要读出csv数&#xff0c;然后设置自定义色条的各种属性如颜色&#xff0c;位置&#xff0c;…

[Android]新建项目使用AppCompatActivity后运行闪退

报错 日志&#xff1a; Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity. FATAL EXCEPTION: main Process: com.example.gatestdemol, PID: 26071 java.lang.RuntimeException: Unable to start a…

Maya v2024(3D动画制作软件)

Maya 2024是一款三维计算机图形动画制作软件。它被广泛应用于电影、电视、游戏、动画等领域中&#xff0c;用于创建各种三维模型、场景、特效和动画。 以下是Maya的主要特点&#xff1a; 强大的建模工具&#xff1a;Maya提供了各种建模工具&#xff0c;如多边形建模、NURBS建模…

VsCode 安装 GitHub Copilot插件 (最新)

##在线安装&#xff1a; 打开Vscode扩展商店&#xff0c;输入 "GitHub Copilot " ,选择下载人数最多的那个。&#xff08;这个是你写一部分代码或者注释&#xff0c;Ai自动帮你提示/补全代码&#xff09;,建议选择这个 注意下面有个和他类似的 "GitHub Copilo…

Linux系统编程——其他类型数据写到文件并读取

函数原型解读 由前面章节可知&#xff0c;对文件的操作都是基于字符串&#xff0c;但对文件的操作并不仅限于此&#xff0c;这个时候需要重新审视几个文件操作的函数原型&#xff0c;函数原型如下&#xff1a; ssize_t write(int fd, const void *buf, size_t count); ssize_…

月入8.3k,新传文科生转行5G网络优化工程师,张雪峰:这专业,报考就打晕…

新闻传播专业的就业是什么样子的&#xff1f; 考研名师张雪峰说&#xff1a;如果我是家长的话&#xff0c;孩子非要报新闻学&#xff0c;我一定会干一个事&#xff0c;就是把他打晕&#xff0c;然后给他报个别的。 新闻传播专业似乎已经成了一个备受争议的话题&#xff0c;就业…

测试用例之翻页功能

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

《Linux从练气到飞升》No.26 Linux中的线程控制

&#x1f57a;作者&#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 &#x1f618;欢迎关注&#xff1a;&#x1f44d;点赞&#x1f64c;收藏✍️留言 &#x1f3c7;码字不易&#xff0c;你的&#x1f44d;点赞&#x1f64c;收藏❤️关注对我真的…

目标检测问题总结

目标检测问题总结 目标检测二阶段和一阶段的核心区别目标检测二阶段比一阶段的算法精度高的原因1. 正负样本不平衡2.样本的不一致性 如何解决目标检测中遮挡问题如何解决动态目标检测FPN的作用如何解决训练数据样本过少的问题IOU代码实现NMS代码实现NMS的改进思路 目标检测二阶…

DBC文件解析成C语言

1. 安装python环境 例如Windows安装python3.10版本 下载地址https://cdn.npmmirror.com/binaries/python/3.10.9/python-3.10.9-amd64.exe 2. 安装cantools函数库 打开CMD窗口后&#xff0c;输入pip install cantools 3. 执行dbc文件转为C语言 注意&#xff1a;c文件和…

时间序列预测(2) — 时间序列预测数据集

目录 数据集1&#xff1a;GEFCom2014负荷数据 数据集2&#xff1a;爱奇艺用户留存预测挑战赛数据集 数据集1&#xff1a;GEFCom2014负荷数据 数据集下载&#xff1a; 百度网盘&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1PgCWHx8vYUfGB9UGtCmaVA?pwdktn0 提取码…

儿童HPV感染有哪些症状?皮肤性病科谭巍主任讲述五大要点

HPV&#xff0c;人乳头瘤病毒&#xff0c;是一种常见的感染性强的病毒&#xff0c;相比成人儿童也会感染HPV。家长及时了解儿童感染HPV的症状对于早期发现和治疗至关重要。为了帮助家长们更好预防儿童HPV感染&#xff0c;今日特邀劲松中西医医院皮肤性病科主任谭巍详细介绍儿童…