RabbitMQ基础知识

news2024/11/20 12:39:40

一.什么是RabbitMQ

      RabbitMQ是一个开源的、高性能的消息队列系统,用于在应用程序之间实现异步通信。它实现了AMQP(Advanced Message Queuing Protocol)协议,可以在分布式系统中传递和存储消息。

     消息队列是一种将消息发送者和接收者解耦的机制。发送者将消息发送到队列中,然后接收者从队列中获取消息并进行处理。这种方式可以提高系统的可靠性、扩展性和灵活性。

    RabbitMQ使用生产者-消费者模型,其中生产者将消息发送到队列中,消费者从队列中获取消息并进行处理。它支持多种消息传递模式,如发布/订阅、路由、主题等。

    RabbitMQ具有很高的性能和可靠性,可以处理大量的消息,并具有故障恢复机制,以确保消息不会丢失。它还提供了可扩展性和灵活的配置选项,可以根据需要调整系统的吞吐量和延迟。

    RabbitMQ广泛应用于各种领域,如金融、电子商务、电信、物联网等,用于构建分布式系统、异步处理、事件驱动架构等。

二.RabbitMQ的作用是什么 

     RabbitMQ是一个消息队列中间件,其作用是实现异步通信。它可以在不同的应用程序之间传递消息,使得应用程序能够解耦,以提高系统的可伸缩性和可靠性。

   具体来说,RabbitMQ可以将消息发送到一个队列中,并立即返回给发送者,而不需要等待消息被处理。其他应用程序可以从该队列中获取消息,并进行处理。这种异步通信模式使得应用程序能够以自己的节奏进行处理,并且不会直接依赖于其他应用程序的可用性。

   RabbitMQ支持多种消息传递模式,包括点对点方式(one-to-one)、发布/订阅方式(one-to-many)和请求/应答方式(request/reply)。这些模式使得开发者能够根据特定的需求选择合适的模式来实现消息的传递。

   RabbitMQ的主要作用是提供一种可靠的异步通信机制,使得不同的应用程序能够进行解耦和高效地进行消息传递。

三.RabbitMQ的模型

      RabbitMQ的模型基于以下几个重要的概念:

生产者(Producer)

    负责创建和发送消息到RabbitMQ中的Exchange。生产者将消息发送到Exchange,Exchange根据一定的规则将消息路由到绑定的队列。

消息(Message)

     消息是生产者发送给RabbitMQ的基本数据单元。它包含了要传输的数据以及相关的元数据,例如消息的ID、优先级、时间戳等。

Exchange:

    Exchange是消息的接收和分发中心。它接收生产者发送的消息,根据预定义的规则将消息路由到一个或多个绑定的队列中。Exchange有四种类型:direct、fanout、topic和headers,不同的类型规定了不同的消息路由规则。

队列(Queue)

     队列是消息的存储区域,用于存放Exchange分发的消息。消费者从队列中获取消息进行处理。每个消息都会被发送到一个或多个队列中,消息在队列中按照先进先出的原则进行处理。

消费者(Consumer)

    负责从队列中获取消息并进行处理。消费者向RabbitMQ注册自己监听的队列,当有消息到达队列时,消费者会接收并处理消息。

绑定(Binding)

    绑定是Exchange和队列之间的关系。它定义了Exchange将消息路由到哪些队列中。绑定可以指定路由规则,例如根据消息的关键字、标签等进行路由。

RabbitMQ支持多种消息模型,下面是一些常见的消息模型:

  1. 点对点模型:也被称为队列模型,消息发送者发送消息到一个队列,消息接收者从队列中获取消息。每个消息只能被一个接收者消费。

  2. 发布/订阅模型:消息发送者将消息发送到一个交换机(exchange),交换机将消息广播给所有绑定到它的队列,每个队列都有一个接收者。

  3. 主题模式:类似于发布/订阅模型,但是消息发送者可以指定一个主题(topic),接收者可以使用通配符来订阅感兴趣的主题。

  4. RPC模型:Remote Procedure Call(远程过程调用)模型,允许应用程序之间进行远程调用。客户端发送请求到RPC队列,服务端接收请求并处理,然后将结果返回给客户端。

四.RabbitMQ的优势       

   RabbitMQ的优势包括:

  • 灵活性:RabbitMQ支持多种消息传递模式,包括点对点、发布/订阅、工作队列等,能够满足不同应用场景的需求。
  • 可靠性:RabbitMQ使用消息确认机制,确保消息的可靠传递。它还支持持久化消息和镜像队列,提高了消息的可靠性和可用性。

  • 扩展性:RabbitMQ支持横向扩展,可以通过添加多个服务器来增加消息处理的能力。它还支持集群模式,提供了高可用性和负载均衡的能力。

  • 消息优先级:RabbitMQ支持消息优先级,可以根据消息的重要性进行优先处理。

  • 插件机制:RabbitMQ提供了丰富的插件机制,可以扩展其功能,如支持消息转发、消息过滤、消息持久化等。

  • 多语言支持:RabbitMQ支持多种编程语言,包括Java、Python、Ruby、C#等,可以方便地与不同语言的应用程序进行集成。

  • 开源和社区支持:RabbitMQ是开源软件,拥有活跃的社区支持,用户可以获取到大量的文档、示例代码和社区帮助。

五.RabbitMQ的基本使用         

      在Spring Boot项目中使用RabbitMQ,需要添加以下依赖:

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

    然后,创建一个配置类来配置RabbitMQ连接和队列等信息:

import org.springframework.amqp.core.Queue;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer;
import org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RabbitMQConfig {

    private static final String QUEUE_NAME = "my-queue";

    @Bean
    public Queue queue() {
        return new Queue(QUEUE_NAME, false);
    }

    @Bean
    public SimpleMessageListenerContainer container(ConnectionFactory connectionFactory,
                                                    MessageListenerAdapter listenerAdapter) {
        SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        container.setQueueNames(QUEUE_NAME);
        container.setMessageListener(listenerAdapter);
        return container;
    }

    @Bean
    public MessageListenerAdapter listenerAdapter(RabbitMQReceiver receiver) {
        return new MessageListenerAdapter(receiver, "receiveMessage");
    }

}

     接下来,创建一个消息接收者类:

import org.springframework.stereotype.Component;

@Component
public class RabbitMQReceiver {

    public void receiveMessage(String message) {
        System.out.println("Received message: " + message);
    }

}

     最后,在你需要发送消息的地方,注入一个RabbitTemplate对象,然后使用convertAndSend方法发送消息:

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

@Component
public class RabbitMQSender {

    private RabbitTemplate rabbitTemplate;

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

    public void sendMessage(String message) {
        rabbitTemplate.convertAndSend("my-queue", message);
        System.out.println("Sent message: " + message);
    }

}

这样,你就完成了RabbitMQ的基本使用。当消息发送时,RabbitMQ会将消息发送到队列中,然后接收者会从队列中接收并处理消息。

在一个完整的Spring Boot项目中,你可以使用RabbitMQSender发送消息,然后RabbitMQReceiver接收并处理消息。

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

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

相关文章

六、Redis 分布式系统 —— 超详细操作演示!

六、Redis 分布式系统 —— 超详细操作演示&#xff01; 六、Redis 分布式系统6.1 数据分区算法6.1.1 顺序分区6.1.2 哈希分区 6.2 系统搭建与运行6.2.1 系统搭建6.2.2 系统启动与关闭 6.3 集群操作6.3.1 连接集群6.3.2 写入数据6.3.3 集群查询6.3.4 故障转移6.3.5 集群扩容6.3…

Android 12.0 禁用插入耳机时弹出的保护听力对话框

1.前言 在12.0的系统rom定制化开发中,在某些产品中会对耳机音量调节过高限制,在调高到最大音量的70%的时候,会弹出音量过高弹出警告,所以产品 开发的需要要求去掉这个音量弹窗警告功能,接下来具体实现相关功能 2.禁用插入耳机时弹出的保护听力对话框的核心类 frameworks\b…

JAVA对象、List、Map和JSON之间的相互转换

JAVA对象、List、Map和JSON之间的相互转换 1.Java中对象和json互转2.Java中list和json互转3.Java中map和json互转 1.Java中对象和json互转 Object obj new Object(); String objJson JSONObject.toJSONString(obj);//java对象转json Object newObj JSONObject.parseObject(…

Pytorch详细安装过程

1、安装anaconda 官网&#xff08;https://www.anaconda.com/products/distribution#Downloads&#xff09;下载&#xff0c;使用管理员身份运行&#xff08;不使用似乎也没事&#xff09; 这里选择Just me&#xff08;至于为啥&#xff0c;咱也不是很清楚&#xff09; 更改路…

玩转贝启科技BQ3588C开源鸿蒙系统开发板 —— 开发板详情与规格

本文主要参考&#xff1a; BQ3588C_开发板详情-开源鸿蒙技术交流-Bearkey-开源社区 BQ3588C_开发板规格-开源鸿蒙技术交流-Bearkey-开源社区 厦门贝启科技有限公司-Bearkey-官网 1. 开发板详情 RK3588 核心板是一款由贝启科技自主研发的基于瑞芯微 RK3588 AI 芯片的智能核心…

强大的隐藏应用 Hides 5中文 for mac

Hides 5是一款Mac上的应用程序&#xff0c;旨在帮助用户隐藏其他应用程序并专注于当前任务&#xff0c;从而提高工作效率。其主要功能包括对焦模式、隐藏所有打开的应用程序、隐藏除当前活动应用之外的所有打开的应用程序、支持全局热键、可定制性、支持多种显示方式等。 Hide…

vue3项目创建

安装node.js vue --version &#xff08;4.5.0以上&#xff09; npm install -g vue/cli vue create 项目名称 npm run dev 启动 npm run build 打包 ———————— vite 创建工程 npm create vuelatest npm i npm run dev 启动 npm run build 打包 项目结构…

WeNet语音识别+Qwen-72B-Chat Bot+Sambert-Hifigan语音合成

WeNet语音识别Qwen-72B-Chat Bot&#x1f47e;Sambert-Hifigan语音合成 简介 利用 WeNet 进行语音识别&#xff0c;使用户能够通过语音输入与系统进行交互。接着&#xff0c;Qwen-72B-Chat Bot作为聊天机器人接收用户的语音输入或文本输入&#xff0c;提供响应并与用户进行对话…

二维码地址门牌系统技术服务:一键预约,畅享无忧访客体验

文章目录 前言一、提升访客预约流程二、 优势对比传统访客登记方式三、实际应用效果与价值 提高管理效率与居民满意度四、增进物业与居民关系五、展望未来 前言 在快节奏的生活中&#xff0c;物业管理成为社区不可或缺的一环。二维码地址门牌系统为提供更便捷、高效服务而生&a…

快速打通 Vue 3(一):基本介绍与组合式 API

很激动进入了 Vue 3 的学习&#xff0c;作为一个已经上线了三年多的框架&#xff0c;很多项目都开始使用 Vue 3 来编写了 这一组文章主要聚焦于 Vue 3 的新技术和新特性 如果想要学习基础的 Vue 语法可以看我专栏中的其他博客 Vue&#xff08;一&#xff09;&#xff1a;Vue 入…

uniapp---安卓真机调试提示检测不到手机【解决办法】

最近在做APP&#xff0c;由于华为手机更新过系统&#xff0c;再次用来调试APP发现就不行了。下面给出具体的解决方法&#xff1a; 第一步&#xff1a;打开【允许开发人员选项】 找到【设置】点击【关于手机】找到【版本号】点击7次或多次&#xff0c;允许开发人员选项。 第二…

socket实现视频通话-WebRTC

最近喜欢研究视频流&#xff0c;所以思考了双向通信socket&#xff0c;接下来我们就一起来看看本地如何实现双向视频通讯的功能吧~ 客户端获取视频流 首先思考如何获取视频流呢&#xff1f; 其实跟录音的功能差不多&#xff0c;都是查询电脑上是否有媒体设备&#xff0c;如果…

ES6 class详解

✨ 专栏介绍 在现代Web开发中&#xff0c;JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性&#xff0c;还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言&#xff0c;JavaScript具有广泛的应用场景&#x…

【Java】SpringBoot整合xxl-job学习使用详解

文章目录 介绍作用如何使用下载项目中央仓库地址环境调度中心初始化“调度数据库”配置部署“调度中心”部署项目调度中心集群&#xff08;可选&#xff09;其他&#xff1a;Docker 镜像方式搭建调度中心配置部署“执行器项目” 执行器maven依赖执行器配置执行器组件配置执行器…

Qt:自定义一个好看的等待提示Ui控件

一、2024 永不卡顿 爱的魔力它转圈圈~ 等待样式控件是我们在做UI时出场率还挺高的控件之一&#xff0c;通常情况下有如下的几种实现方式&#xff1a; 1> 获取一张gif的资源图&#xff0c;然后使用QMovie 在一个QLabel 控件上加载显示gif的waiting等待动态。 2> 自定义绘图…

electron自定义菜单

创建menu.js const { app, Menu } require("electron"); const createMenu () > {const menu [{label: "菜单",submenu: [{label: "新增",click: () > {},}, ],},{label: "关于",submenu: [{label: "新增",click:…

系统编程--VIM特辑

这里写目录标题 vim三种工作模式进入文本模式的快捷键在命令模式下进行文本编辑删除快捷键复制粘贴查找替换查找替换 vim其他操作 vim打造简易IDE vim 三种工作模式 具体可见第二章对vim的详细介绍 需要注意的是&#xff0c;在末行模式下执行完一次命令&#xff0c;就可以直接…

深度生成模型之GAN优化目标设计与改进 ->(个人学习记录笔记)

文章目录 深度生成模型之GAN优化目标设计与改进原始GAN优化目标的问题1. JS散度度量问题2. 梯度问题 优化目标的设计与改进1. 最小二乘损失GAN2. Energy-based GAN(EBGAN)3. Wasserstein GAN4. WGAN-GP5. Boundary Equilibrium GAN(BEGAN)6. Loss Sensitive GAN7. Relativeisti…

【安卓的签名和权限】

Android 编译使用哪个key签名&#xff1f; 一看Android.mk 在我们内置某个apk的时候都会带有Android.mk&#xff0c;这里面就写明了该APK使用的是什么签名&#xff0c;如&#xff1a; LOCAL_CERTIFICATE : platform表明使用的是platform签名 LOCAL_CERTIFICATE : PRESIGNED…

运算符的优先级(规矩是人定的)

运算符的优先级&#xff08;规矩是人定的&#xff09; 什么是经典&#xff1f;经典就是理论不随时间变迁而变化。《东方不败》中的很多台词让人时不时想起来振聋发聩。比如 很多事情不是自己想的那样&#xff0c;规矩是人定的。 舔狗和有思想 从小到大&#xff0c;我们都学过…