RabbitMQ 消息队列(Spring boot AMQP)

文章目录

  • 🍰有几个原因可以解释为什么要选择 RabbitMQ:
    • 🥩mq之间的对比
      • 🌽RabbitMQ vs Apache Kafka
      • 🌽RabbitMQ vs ActiveMQ
      • 🌽RabbitMQ vs RocketMQ
      • 🌽RabbitMQ vs Redis
    • 🥩linux docker 部署 rabbitmq
      • 🌽拉去镜像
      • 🌽创建挂载目录
      • 🌽运行镜像
      • 🌽安装可视化界面插件 : 进入容器
    • 🥩Springboot AMQP RabbitMQ发送消息示例
      • 🌽Basic Queue 简单队列模型
        • 🌽消息发送
        • 🌽消息接收
        • 🌽添加消息对象序列化
        • 🌽使用对象发送消息
    • 🥩在使用MQ(消息队列)时,需要注意以下几个问题
      • 🌽1. 消息丢失:
      • 🌽2. 消息顺序:
      • 🌽3. 幂等性:
      • 🌽4. 性能和吞吐量:
      • 🌽5. 容错性和可靠性:
      • 🌽6. 监控和调优:

🍰有几个原因可以解释为什么要选择 RabbitMQ:


  1. 灵活性和可靠性:RabbitMQ 提供了丰富的消息传递模型和功能,使开发者能够设计出灵活而复杂的消息路由机制。它还提供了可靠的消息传递机制,包括消息确认、持久化等,确保消息的可靠传递。

  2. 可扩展性和高性能:RabbitMQ 具备良好的水平扩展能力,可以轻松处理大量的并发连接和高吞吐量。它的性能表现稳定,并且在大规模部署中经得起考验。

  3. 协议支持和跨平台兼容性:RabbitMQ 基于 AMQP(Advanced Message Queuing Protocol)标准,并支持多种编程语言和平台。这意味着您可以使用多种语言和技术栈来与 RabbitMQ 进行交互,从而方便地集成到您的现有系统中。

  4. 社区支持和稳定性:RabbitMQ 是一个广受欢迎的开源项目,拥有活跃的社区支持和持续的更新。它已经经过多年的稳定运行和广泛应用,在很多大型企业和组织中被广泛信赖。

  5. 丰富的功能和插件:RabbitMQ 提供了许多有用的功能和插件,如消息优先级、延迟队列、RPC(Remote Procedure Call)等。这些功能可以根据具体需求进行配置和扩展,使得 RabbitMQ 更加灵活且适用于各种场景。

  6. 管理和监控:RabbitMQ 提供了直观的管理界面,方便您管理队列、交换机、绑定等,并监控关键性能指标和健康状态。这使您能够方便地查看和管理消息传递的整个过程。


  • 总而言之,选择 RabbitMQ 的原因是它提供了一个可靠、灵活且功能强大的消息传递解决方案。它广泛应用于企业集成、异步任务处理、实时数据流处理等各种场景。
  • 当然,在选择消息队列解决方案时,您还需要考虑其他因素,如团队经验、技术栈兼容性等。但基于其特点和广泛的应用,RabbitMQ 是一个值得考虑且常见的选择。
  • 当涉及到消息队列(Message Queue,简称 MQ)时,RabbitMQ 是其中一个广为人知且流行的解决方案。以下是 RabbitMQ 和其他 MQ 解决方案之间的一些比较:

🥩mq之间的对比


几种常见MQ的对比:

RabbitMQActiveMQRocketMQKafka
公司/社区RabbitApache阿里Apache
开发语言ErlangJavaJavaScala&Java
协议支持AMQP,XMPP,SMTP,STOMPOpenWire,STOMP,REST,XMPP,AMQP自定义协议自定义协议
可用性一般
单机吞吐量一般非常高
消息延迟微秒级毫秒级毫秒级毫秒以内
消息可靠性一般一般

追求可用性:Kafka、 RocketMQ 、RabbitMQ

追求可靠性:RabbitMQ、RocketMQ

追求吞吐能力:RocketMQ、Kafka

追求消息低延迟:RabbitMQ、Kafka

🌽RabbitMQ vs Apache Kafka


  • 消息模型:RabbitMQ 使用点对点和发布/订阅模型,而 Kafka 则是一个高吞吐量的分布式消息系统,适用于流处理、事件驱动和日志传输。
  • 可靠性:RabbitMQ 提供了丰富的可靠性机制,如消息确认和持久化。而 Kafka 通过数据复制和分区副本保障消息的持久性和容错性。
  • 延迟:RabbitMQ 在低延迟的场景下表现更好,适合需要实时处理的应用程序。Kafka 更适合大规模的实时数据流处理,但相对有较高的延迟。
  • 扩展性:Kafka 具备更好的水平扩展能力,可以轻松处理大量的并发连接和高吞吐量。
  • 使用场景:RabbitMQ 适用于传统的企业应用集成、任务调度等场景;Kafka 更适用于大规模的数据管道、日志聚合和实时流处理。

🌽RabbitMQ vs ActiveMQ


  • 协议支持:RabbitMQ 实现了 AMQP 协议,而 ActiveMQ 支持多种协议,包括 AMQP、STOMP、OpenWire 等。
  • 性能:RabbitMQ 在吞吐量方面表现更优,尤其在高并发和大规模消息交换的场景下。ActiveMQ 相对较慢,但对于中小型应用仍然具备足够的性能。
  • 可靠性:RabbitMQ 提供了丰富的可靠性机制,如消息确认和持久化。ActiveMQ 也提供了持久化、事务等机制来保证消息的可靠传递。
  • 功能和插件:RabbitMQ 提供了更多的功能和插件,例如消息优先级、RPC、延迟队列等。ActiveMQ 也有类似的功能,但相对较少一些。

🌽RabbitMQ vs RocketMQ


RabbitMQ和RocketMQ是两个流行的消息系统,用于构建分布式和可扩展的应用程序。虽然它们有相似的目标,但在它们之间存在几个区别,可以帮助您决定哪个更适合您特定的使用场景。

1. 开源性: RabbitMQ是用Erlang编写的开源消息代理,而RocketMQ也是由阿里巴巴集团开发的开源分布式消息系统,使用Java编写。这两个项目都有活跃的社区,并定期进行更新。

2. 语言支持: RabbitMQ为多种编程语言提供官方客户端库,包括Java、Python、Ruby、.NET等。另一方面,RocketMQ本地支持Java客户端,但也有由社区支持的其他语言(如Go、Python和C++)的客户端库。

3. 消息模式: RabbitMQ主要专注于支持AMQP(高级消息队列协议),并支持广泛的消息模式,如发布/订阅、请求/回复和工作队列。RocketMQ设计用于高吞吐量、低延迟的场景,并针对流式处理和事件驱动架构进行了优化。它支持发布/订阅、点对点和请求/回复消息模式。

4. 可扩展性和性能: RabbitMQ和RocketMQ都具有高度的可扩展性,但RocketMQ专门设计用于处理大量低延迟的消息。它通过消息批处理、消息压缩和分布式架构等功能实现这一点。如果您需要高性能的大规模消息传递,RocketMQ可能更合适。

5. 数据持久化: RabbitMQ默认将消息存储在磁盘上,即使代理重新启动也能确保持久性。相比之下,RocketMQ依靠预写日志和副本来实现容错和数据持久化。

6. 社区和生态系统: 作为一个流行的消息系统,RabbitMQ拥有成熟的社区和丰富的插件和集成生态系统。RocketMQ拥有不断增长的社区,并在中国市场上更常见,重点在于阿里巴巴的生态系统。

最终,在RabbitMQ和RocketMQ之间的选择取决于您的具体需求。如果您需要强大的语言支持、丰富的生态系统和灵活的消息模式,请选择RabbitMQ。另一方面,如果您优先考虑高吞吐量、低延迟和原生Java集成,请选择RocketMQ。

🌽RabbitMQ vs Redis


  • 数据类型:Redis 是一个内存数据库,具有键值存储、列表、集合等数据结构,同时也支持发布/订阅模式。RabbitMQ 则专注于消息队列的功能。
  • 消息传递模型:RabbitMQ 提供了丰富的消息传递模型,更适合复杂的消息路由和消费者管理。Redis 的发布/订阅模式更适合简单的发布和订阅场景。
  • 持久化:RabbitMQ 提供了可靠的消息持久化机制,适用于需要持久化的消息传递。Redis 也可以通过持久化机制来保留数据,但主要关注于内存数据库的性能。
  • 性能:Redis 是一个非常快速的内存数据库,适用于低延迟和高吞吐量的场景。RabbitMQ 的性能也很好,但相对 Redis 来说稍慢一些。

这些比较提供了一些关键区别,但选择合适的 MQ 解决方案还应基于具体的使用案例、需求和性能要求。每个解决方案都有其优势和适用场景,因此您可能需要根据自己的情况进行评估和选择。
在 Redis 中,订阅和发布是一种基于发布/订阅模式的消息传递机制。通过使用 Redis 提供的 PUBLISH 命令进行消息发布,以及使用 SUBSCRIBE 命令进行消息订阅,您可以实现简单而强大的消息传递功能。以下是 Redis 订阅和发布的详细步骤:

🥩linux docker 部署 rabbitmq

docker怎么拉镜像已经写过很多遍了,还是不清楚可以看之前的例子https://blog.csdn.net/qq_39017153/article/details/131976173?spm=1001.2014.3001.5501

🌽拉去镜像


docker pull rabbitmq

15672(UI页面通信口,浏览器界面)、5672(client端通信口,最常用到的)、25672(server间内部通信口)、61613(stomp 消息传输)、1883(MQTT消息队列遥测传输)

🌽创建挂载目录


mkdir -p /data/apps/rabbitmq/data
mkdir -p /data/apps/rabbitmq/conf
mkdir -p /data/apps/rabbitmq/log

还是一样给你创建文件授权 我这里怕麻烦直接给的最大

chmod -R 777 /data/apps/rabbitmq

🌽运行镜像


docker run \
-p 5672:5672 -p 15672:15672 \
--name rabbitmq \
--hostname my-rabbit \
-v /data/apps/rabbitmq/data:/var/lib/rabbitmq \
-v /data/apps/rabbitmq/conf:/etc/rabbitmq \
-v /data/apps/rabbitmq/log:/var/log/rabbitmq \
-e RABBITMQ_DEFAULT_USER=admin \
-e RABBITMQ_DEFAULT_PASS=admin \
-d rabbitmq:latest

🌽安装可视化界面插件 : 进入容器


docker exec -it rabbitmq bash

进入容器后执行安装插件命令 ,执行完成 访问 ip+15672 即可访问

rabbitmq-plugins enable rabbitmq_management

在这里插入图片描述

🥩Springboot AMQP RabbitMQ发送消息示例

SpringAMQP是基于RabbitMQ封装的一套模板,并且还利用SpringBoot对其实现了自动装配,使用起来非常方便。
SpringAmqp的官方地址:https://spring.io/projects/spring-amqp

在这里插入图片描述
在这里插入图片描述
SpringAMQP提供了三个功能:

自动声明队列、交换机及其绑定关系
基于注解的监听器模式,异步接收消息
封装了RabbitTemplate工具,用于发送消息

🌽Basic Queue 简单队列模型


下面是一个使用Spring Boot和RabbitMQ的基本示例:

首先,确保你已经在项目中引入了Spring Boot和RabbitMQ的依赖。

<!-- pom.xml -->
<dependencies>
    <!-- Spring Boot Starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <!-- RabbitMQ Starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-amqp</artifactId>
    </dependency>
</dependencies>

🌽消息发送

接下来,配置RabbitMQ连接和相关属性。

# application.yml
spring:
  rabbitmq:
    host: 192.168.xxx.xxx # 主机名
    port: 5672 # 端口
    virtual-host: / # 虚拟主机
    username: itcast # 用户名
    password: 123321 # 密码
   listener:
      simple:
        prefetch: 1 # 每次只能获取一条消息,处理完成才能获取下一个消息 

创建发送消息的生产者。

import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class MessageProducer {
    private final RabbitTemplate rabbitTemplate;

    @Autowired
    public MessageProducer(RabbitTemplate rabbitTemplate) {
        this.rabbitTemplate = rabbitTemplate;
    }

    public void sendMessage(String message) {
        rabbitTemplate.convertAndSend("my-queue", message);
    }
}

🌽消息接收


创建消息队列

@Configuration
public class FanoutConfig {
    // itcast.fanout
 @Bean
    public Queue fanoutQueue1(){
        return new Queue("my-queue");
    }
}

创建接收消息的消费者。

import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

@Component
public class MessageConsumer {

    @RabbitListener(queues = "my-queue")
    public void receiveMessage(String message) {
        System.out.println("Received message: " + message);
    }
}

最后,在启动类上添加注解@EnableRabbit,以启用RabbitMQ相关功能。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.scheduling.annotation.EnableScheduling;

@SpringBootApplication
@EnableRabbit
public class RabbitMQDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(RabbitMQDemoApplication.class, args);
    }
}

通过以上示例,你已经完成了一个简单的Spring Boot和RabbitMQ集成的应用程序。当调用MessageProducersendMessage()方法时,消息将会发送到名为"my-queue"的队列中,并被MessageConsumerreceiveMessage()方法接收和处理。

🌽添加消息对象序列化


为需要重写序列化对象,因为默认使用的是JDK对象序列化,性能差,有安全漏洞,所以推荐使用JSON序列化

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
</dependency>
    @Bean
    public MessageConverter messageConverter(){
        return new Jackson2JsonMessageConverter();
    }

🌽使用对象发送消息


    @Test
    public void test() {
        String queueName = "object.queue";
        Map<String,Object> msg =new HashMap<>();
        msg.put("name","柳岩");
        msg.put("age","18");
        rabbitTemplate.convertAndSend(queueName,msg);
    }
  @RabbitListener(queues = "object.queue")
    public void listenObjectQueue(Map<String,Object> msg){
        System.out.println("接收到object.queue的消息:" + msg);
    }

在这里插入图片描述

到mq界面上可以看到我们的柳岩了

🥩在使用MQ(消息队列)时,需要注意以下几个问题


🌽1. 消息丢失:


  • 解决方案:
    • 开启消息持久化:将消息保存到持久化存储介质(如磁盘)中,以确保即使在系统故障或重启后,消息也能够被恢复。
    • 设置合适的消息超时时间:根据业务需求,合理设置消息的过期时间,避免长期滞留的消息占用资源。
    • 使用备份和冗余机制:在分布式环境下,可以使用主备架构、多副本复制等机制来保障消息的可靠性。

🌽2. 消息顺序:


  • 解决方案:
    • 使用单一消息队列:为了确保消息的有序处理,可以使用单一消息队列,使消息按照先后顺序进行处理。
    • 对消息进行分区:如果需要水平扩展,可以将消息划分为多个分区,并根据分区进行顺序处理。

🌽3. 幂等性:


  • 解决方案:
    • 唯一标识符:为每条消息生成唯一的标识符,在消息处理前检查该标识符是否已经处理过,避免重复消费。
    • 幂等性校验:记录已处理的消息ID或内容,并在每次接收到消息时进行查重,确保同一消息不会被处理多次。
    • 事务性处理:将消息的处理逻辑与更新数据库、缓存等操作放在同一个事务中,并通过回滚事务来避免重复处理。

🌽4. 性能和吞吐量:


  • 解决方案:
    • 优化代码逻辑:合理设计消息生产者和消费者的代码逻辑,减少不必要的网络通信或资源占用。
    • 合理配置MQ参数:根据系统需求,调整MQ的配置参数,如队列长度、批量发送等,以提高性能和吞吐量。
    • 水平扩展:通过增加消息队列的实例或增加消费者线程数等方式,实现水平扩展,提升处理能力。

🌽5. 容错性和可靠性:


  • 解决方案:
    • 主备架构:使用主备模式,当主节点故障时,自动切换到备份节点,确保消息服务的高可用性。
    • 多副本复制:将消息队列的内容复制到多个节点上,实现数据的冗余备份,确保数据的安全性和可靠性。

🌽6. 监控和调优:


  • 解决方案:
    • 实时监控:配置监控系统,实时监测消息的发送和消费情况,及时发现异常并进行处理。
    • 性能调优:定期进行性能分析和调优,根据监控数据调整配置参数,提升系统的性能和吞吐量。

综上所述,针对MQ使用中需要注意的问题,我们提供了相应的解决方案。根据具体的业务需求和系统环境,可以结合这些解决方案来确保消息队列的稳定运行和可靠性。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【大数据之Kafka】一、Kafka定义消息队列及基础架构

1 定义 Kafka传统定义&#xff1a;Kafka是一个分布式的基于发布/订阅模式的消息队列&#xff08;Message Queue&#xff09;&#xff0c;主要应用于大数据实时处理领域。 发布/订阅&#xff1a;消息的发布者不会将消息直接发送给特定的订阅者&#xff0c;而是将发布的消息分为…

「C/C++」C/C++正则表达式

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「C/C」C/C程序设计&#x1f4da;全部专栏「UG/NX」NX二次开发「UG/NX」BlockUI集合「VS」Visual Studio「QT」QT5程序设计「C/C」C/C程序设计「Win」Windows程序设计「DSA」数据结构与算法「File」数据文件格式 目录 术语介绍…

无涯教程-Perl - bless函数

描述 此函数告诉REF引用的实体,它现在是CLASSNAME包中的对象,如果省略CLASSNAME,则为当前包中的对象。建议使用bless的两个参数形式。 语法 以下是此函数的简单语法- bless REF, CLASSNAMEbless REF返回值 该函数返回对祝福到CLASSNAME中的对象的引用。 例 以下是显示其…

基于R做宏基因组的进化树ClusterTree分析

写在前面 同上一篇的PCoA分析&#xff0c;这个也是基于公司结果基础上的再次分析&#xff0c;重新挑选样本&#xff0c;在公司结果提供的csv结果表上进行删减&#xff0c;本地重新分析作图 步骤 表格预处理 在公司给的ClusterTree的原始表格数据里选取要保留的样本&#xf…

Python接口自动化之request请求封装

我们在做自动化测试的时候&#xff0c;大家都是希望自己写的代码越简洁越好&#xff0c;代码重复量越少越好。那么&#xff0c;我们可以考虑将request的请求类型&#xff08;如&#xff1a;Get、Post、Delect请求&#xff09;都封装起来。这样&#xff0c;我们在编写用例的时候…

日常BUG——使用Long类型作id,后端返回给前段后精度丢失问题

&#x1f61c;作 者&#xff1a;是江迪呀✒️本文关键词&#xff1a;日常BUG、BUG、问题分析☀️每日 一言 &#xff1a;存在错误说明你在进步&#xff01; 一、问题描述 数据库long类型Id: 前端返回的Id实体类: Data ApiModel("xxx") public class …

chatGPT小白快速入门培训课程-001

一、前言 本文是《chatGPT小白快速入门培训课程》的第001篇文章&#xff0c;全部内容采用chatGPT和chatGPT开源平替软件生成。完整内容大纲详见&#xff1a;《chatGPT小白快速入门课程大纲》。 本系列文章&#xff0c;参与&#xff1a; AIGC征文活动 #AIGC技术创作内容征文# …

Vue 整合 Element UI 、路由嵌套和参数传递(五)

一、整合 Element UI 1.1 工程初始化 使用管理员的模式进入 cmd 的命令行模式&#xff0c;创建一个名为 hello-vue 的工程&#xff0c;命令为&#xff1a; # 1、目录切换 cd F:\idea_home\vue# 2、项目的初始化&#xff0c;记得一路的 no vue init webpack hello-vue 1.2 安装…

STL文件格式详解【3D】

STL&#xff08;StereoLithography&#xff1a;立体光刻&#xff09;文件是 3 维表面几何形状的三角形表示。 表面被逻辑地细分或分解为一系列小三角形&#xff08;面&#xff09;。 每个面由垂直方向和代表三角形顶点&#xff08;角&#xff09;的三个点来描述。 切片算法使用…

Python实战之使用Python进行数据挖掘详解

一、Python数据挖掘 1.1 数据挖掘是什么&#xff1f; 数据挖掘是从大量的、不完全的、有噪声的、模糊的、随机的实际应用数据中&#xff0c;通过算法&#xff0c;找出其中的规律、知识、信息的过程。Python作为一门广泛应用的编程语言&#xff0c;拥有丰富的数据挖掘库&#…

Python-OpenCV中的图像处理-颜色空间转换

Python-OpenCV中的图像处理-颜色空间转换 颜色空间转换获取HSV的值 颜色空间转换 在 OpenCV 中有超过 150 中进行颜色空间转换的方法。但是你以后就会 发现我们经常用到的也就两种&#xff1a; BGR G r a y 和 B G R Gray 和 BGR Gray和BGRHSV。 注意&#xff1a;在 OpenCV 的…

C语言实现选择排序

什么是选择排序&#xff1f; 选择排序是一种简单直观的排序算法&#xff0c;它的核心思想是每次从未排序的元素中选择最小&#xff08;或最大&#xff09;的元素&#xff0c;然后将其放到已排序序列的末尾。通过重复这个过程&#xff0c;直到所有元素都排好序为止。 选择排序…

计算机网络 网络层 IPv4地址

A类地址第一位固定0 B类10 其下同理

Grafana V10 告警推送 邮件

最近项目建设完成&#xff0c;一个城域网项目&#xff0c;相关zabbix和grafana展示已经完&#xff0c;想了想&#xff0c;不想天天看平台去盯网络监控平台&#xff0c;索性对告警进行分类调整&#xff0c;增加告警的推送&#xff0c;和相关部门的提醒&#xff0c;其他部门看不懂…

PHP利用PCRE回溯次数限制绕过某些安全限制实战案例

目录 一、正则表达式概述 有限状态自动机 匹配输入的过程分别是&#xff1a; DFA&#xff08;确定性有限状态自动机&#xff09; NFA&#xff08;非确定性有限状态自动机&#xff09; 二、回溯的过程 三、 PHP 的 pcre.backtrack_limit 限制利用 例题一 回溯绕过步骤 &…

山西电力市场日前价格预测【2023-08-13】

日前价格预测 预测明日&#xff08;2023-08-13&#xff09;山西电力市场全天平均日前电价为351.64元/MWh。其中&#xff0c;最高日前电价为404.00元/MWh&#xff0c;预计出现在19: 30。最低日前电价为306.39元/MWh&#xff0c;预计出现在13: 15。 价差方向预测 1&#xff1a; 实…

《甲午》观后感——GPT-3.5所写

《甲午》是一部令人深思的纪录片&#xff0c;通过生动的画面和真实的故事&#xff0c;向观众展示了中国历史上的一段重要时期。观看这部纪录片&#xff0c;我深受触动&#xff0c;对历史的认识也得到了深化。 首先&#xff0c;这部纪录片通过精心搜集的历史资料和珍贵的影像资料…

stable-diffusion 模型效果+prompt

摘自个人印象笔记&#xff0c;图不完整可查看原笔记&#xff1a;https://app.yinxiang.com/fx/55cda0c6-2af5-4d66-bd86-85da79c5574ePrompt运用规则及技巧 &#xff1a; 1. https://publicprompts.art/&#xff08;最适用于OpenArt 线上模型 https://openart.ai/&#xff09;…

数据库数据恢复-Oracle数据库数据恢复案例

数据库数据恢复环境&#xff1a; Oracle数据库ASM磁盘组有4块成员盘。 数据库故障&分析&#xff1a; Oracle数据库ASM磁盘组掉线 &#xff0c;ASM实例无法挂载&#xff0c;用户联系我们要求恢复oracle数据库。 数据库数据恢复工程师拿到磁盘后&#xff0c;先将所有磁盘以只…

【深度学习】再谈向量化

前言 向量化是一种思想&#xff0c;不仅体现在可以将任意实体用向量来表示&#xff0c;更为突出的表现了人工智能的发展脉络。向量的演进过程其实都是人工智能向前发展的时代缩影。 1.为什么人工智能需要向量化 电脑如何理解一门语言&#xff1f;电脑的底层是二进制也就是0和1&…