RabbitMQ使用指南

    • 介绍
    • 主要特点
    • 常用插件
      • 使用RabbitMQ的插件
      • 常用插件列表
    • 应用场景
    • Kafka与RabbitMq的区别
    • 主要优缺点
    • 安装步骤
      • 插件安装步骤
    • 使用RabbitMq
    • Java代码示例
    • 拓展

介绍

RabbitMQ是由Erlang语言开发的,基于AMQP(高级消息队列协议)协议实现的开源消息代理软件。它是一个实现了消息队列的中间件,遵循FIFO原则,用于应用程序之间的通信。RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。
RabbitMQ在分布式系统开发中应用非常广泛,可以提高系统响应速度、异步处理任务、服务解耦、消除峰值等。例如,将不需要同步处理的并且耗时长的操作由消息队列通知消息接收方进行异步处理,提高了应用程序的响应时间。

在这里插入图片描述

主要特点

RabbitMQ的主要特点包括:
可靠性 :RabbitMQ使用持久化、传输确认以及发布确认等机制来保证消息的可靠性。
灵活的路由 :在消息进入队列之前,通过交换机来路由信息,可以实现灵活的消息分发。
扩展性 :多个RabbitMQ可以组成一个集群,也可以根据业务情况动态地扩展集群中的节点。
多语言客户端 :RabbitMQ支持非常多的语言,如Java,Python,Ruby,PHP,C#,JavaScript等。
管理界面 :RabbitMQ提供了一个易于使用的用户界面,使得用户可以监控和管理消息和集群中的节点等。
插件机制 :RabbitMQ提供了许多插件,实现从多方面进行扩展,也可以编写自己的插件。

常用插件

使用RabbitMQ的插件

要使用RabbitMQ的插件列表,您可以按照以下步骤进行操作:

  1. 访问RabbitMQ的官方网站,并转到“插件”页面。您可以在该页面上找到所有可用的插件列表。
  2. 在插件列表中,您可以查找适合您需求的插件。插件通常根据其功能进行分类,例如消息持久化、消息确认、消息路由等。
  3. 找到适合的插件后,请按照插件页面上的说明进行安装。通常,这包括将插件文件复制到RabbitMQ服务器上的特定位置,并执行一些配置任务。
  4. 安装完成后,您需要重新启动RabbitMQ服务器以使插件生效。
  5. 一旦插件安装并启用,您可以使用RabbitMQ的管理界面或相关工具来配置和管理该插件。具体的配置方法取决于插件的具体功能和要求。

请注意,使用RabbitMQ的插件时,您需要确保了解其工作原理和配置要求,以确保正确使用和充分发挥其作用。如果您不确定如何使用某个插件,建议参考RabbitMQ的官方文档或寻求相关社区和论坛的帮助。

常用插件列表

RabbitMQ常用的插件有很多,比如以下几个:

1. rabbitmq_amqp1_0 :这是一个支持AMQP 1.0协议的插件,可以让RabbitMQ使用AMQP协议进行通信。
2. rabbitmq_delayed_message_exchange :这个插件可以设置消息的延迟时间,实现延迟消息的发送。
3. rabbitmq_federation:该插件可以实现RabbitMQ集群之间的消息联邦,使得消息可以在不同的集群之间进行传递。
4. rabbitmq_sharding :这是一个分片插件,用于实现消息的分布式处理。
5. rabbitmq_shovel :这个插件可以实现消息的静态路由,可以将消息路由到指定的队列。
6. rabbitmq_tracing :该插件可以实现对RabbitMQ消息的跟踪和监控。
7. rabbitmq_mqtt :这是一个MQTT插件,可以让RabbitMQ支持MQTT协议。
8. rabbitmq_web_mqtt :这是一个基于HTTP的MQTT插件,可以让MQTT客户端通过HTTP协议与RabbitMQ进行通信。
9. rabbitmq_stomp :这是一个STOMP插件,可以让RabbitMQ支持STOMP协议。
10. rabbitmq_web_stomp :这是一个基于HTTP的STOMP插件,可以让STOMP客户端通过HTTP协议与RabbitMQ进行通信。
11. rabbitmq_consistent_hash_exchange :这个插件可以实现一致性哈希交换,可以将消息根据key值进行路由,并发送到对应的队列。

应用场景

RabbitMQ在以下场景中具有广泛应用:
异步处理任务 :通过使用RabbitMQ,可以将任务异步发送到消息队列中,由消费者异步处理,从而实现系统解耦和高并发处理。例如,订单系统可以将订单数据发送到消息队列中,由库存系统和支付系统异步处理。
消息通知 :在分布式系统中,各个模块之间需要相互通信,例如用户注册、支付成功、物流状态等。通过使用 RabbitMQ,可以将消息发送到消息队列中,由消费者接收并处理,实现消息通知功能。
日志处理 :RabbitMQ可用于日志处理,例如日志收集、日志分析等。通过将日志消息发送到消息队列中,可以实现日志的异步处理,同时可以通过设置消息的属性、路由规则等来实现不同类型的日志处理。
应对大流量场景 :在商品秒杀、抢购等流量短时间内暴增场景中,为了防止后端应用被压垮,可在前后端系统间使用 RabbitMQ 消息队列传递请求。

Kafka与RabbitMq的区别

RabbitMQ和Kafka都是广泛使用的消息队列系统,它们在以下方面存在一些差异:

  1. 语言与开发:RabbitMQ是由Erlang语言开发的,主要用于实时且对可靠性要求较高的消息传递。而Kafka则是由Scala语言开发的,主要用于处理活跃的流式数据,特别是在大数据量的处理上。
  2. 架构与交互方式:RabbitMQ以broker为中心,包含Exchange、Binding和Queue等组成部分。而Kafka则以consumer为中心,无消息确认机制。在集群负载均衡方面,Kafka比RabbitMQ更具优势。
  3. 吞吐量与持久化:RabbitMQ支持消息的可靠传递,支持事务,不支持批量操作,基于存储的可靠性要求存储可以采用内存或硬盘,吞吐量相对较小。而Kafka内部采用消息的批量处理,数据的存储和获取是本地磁盘顺序批量操作,消息处理的效率高,吞吐量高。另外,Kafka的消息被消费后仍保存在磁盘中。
  4. 性能与扩展性:由于RabbitMQ使用AMQP协议,其性能相对较高,但扩展性相对较差。而Kafka使用Pull方式获取消息,客户端直接与Broker交互,使得其具有较好的扩展性。

RabbitMQ和Kafka在语言与开发、架构与交互方式、吞吐量与持久化、性能与扩展性等方面存在明显差异。选择使用哪个系统取决于具体的应用场景和需求。

主要优缺点

RabbitMQ是一款广泛使用的开源消息队列系统,它具有以下优点:

  1. 可靠性:RabbitMQ提供了高可靠性的消息传输,通过持久化机制和消息确认机制,保证了消息的可靠性和不丢失。
  2. 灵活性:RabbitMQ支持多种消息协议和数据格式,可以灵活地满足不同的业务需求。
  3. 可扩展性:RabbitMQ可以轻松地进行横向扩展,支持多个生产者和消费者,可以有效地提高系统的吞吐量和并发处理能力。
  4. 易用性:RabbitMQ具有友好的用户界面和丰富的客户端库支持,可以方便地进行管理和使用。

然而,RabbitMQ也存在一些缺点:

  1. 性能开销:引入RabbitMQ作为中间件,会增加系统的复杂度和性能开销。
  2. 适用场景有限:RabbitMQ对于需要高吞吐量和低延迟的应用场景可能不够适用。
  3. 消息一致性:在分布式环境中,确保消息的一致性是一个挑战。如果处理不当,可能会导致数据不一致的问题。
  4. 故障恢复:如果RabbitMQ服务器出现故障,需要一定的时间进行故障恢复,这期间可能会对系统可用性造成影响。

安装步骤

在Linux平台上安装RabbitMQ的详细步骤如下:

  1. 打开终端,使用root用户或者sudo权限的用户登录。
  2. 进入RabbitMQ的安装包所在目录。
  3. 执行以下命令解压安装包:
tar -xzf rabbitmq-server-generic-unix-3.11.0.tar.gz
  1. 进入解压后的目录:
cd rabbitmq_server-3.11.0
  1. 执行以下命令创建配置文件:
cp -r etc /usr/local/rabbitmq
  1. 进入RabbitMQ的安装目录:
cd /usr/local/rabbitmq
  1. 执行以下命令启动RabbitMQ服务:
rabbitmq-server start
  1. RabbitMQ服务启动后,可以运行以下命令进行测试:
rabbitmqctl status

如果看到输出中的"running"字样,说明安装成功。
9. 执行以下命令关闭RabbitMQ服务:

rabbitmqctl stop
  1. 如果需要设置开机启动,可以执行以下命令:
rabbitmq-service add /usr/local/rabbitmq/sbin/rabbitmq-server start /usr/local/rabbitmq/sbin/rabbitmqctl start /usr/local/rabbitmq/sbin/rabbitmqctl stop /usr/local/rabbitmq/sbin/rabbitmqctl restart /usr/local/rabbitmq/sbin/rabbitmqctl status /usr/local/rabbitmq/sbin/rabbitmqctl set_permissions -p / /guest:* //guest:* /mnesia:/ /log:/ /mnesia:/ /log:/ /mnesia:/ /log:/ /mnesia:/ /log:/ /mnesia:/ /log:/ /mnesia:/ /log:/ /mnesia:/ /log:/ /mnesia:/ /log:/ /mnesia:/ /log:/ /mnesia:/ /log:/ /mnesia:/ /log:/

插件安装步骤

RabbitMQ的插件安装步骤如下:

  1. 找到RabbitMQ的安装目录,进入plugins文件夹。
  2. 将需要安装的插件文件复制到plugins文件夹中。
  3. 打开RabbitMQ的管理界面,进入“Plugins”选项卡。
  4. 在列表中找到并选择需要安装的插件,点击“Enable”按钮。
  5. 等待插件安装完成,安装过程中请勿关闭窗口或断开网络连接。
  6. 安装完成后,重新启动RabbitMQ服务,使插件生效。

使用RabbitMq

RabbitMQ是一款广泛使用的开源消息队列系统,它支持多种消息协议和数据格式,可以灵活地满足不同的业务需求。以下是使用RabbitMQ的基本步骤:

  1. 配置RabbitMQ服务器:首先需要在服务器上安装RabbitMQ,并对其进行配置。可以按照默认配置进行安装和启动,也可以根据实际需求进行自定义配置。
  2. 创建交换器和队列:在RabbitMQ中,消息是通过交换器和队列进行路由的。可以根据实际需求创建不同的交换器和队列,例如TopicExchange、DirectExchange、FanoutExchange等不同类型的交换器和Queue。
  3. 绑定交换器和队列:创建好交换器和队列后,需要将它们绑定在一起,以便消息可以在它们之间传递。可以使用Binding类来绑定交换器和队列。
  4. 发送消息:在生产者端,可以使用RabbitMQ的Java客户端库或其他语言的客户端库来发送消息到指定的交换器和队列。需要指定消息的routingKey和消息体。
  5. 接收消息:在消费者端,可以使用RabbitMQ的Java客户端库或其他语言的客户端库来接收消息。需要指定要监听的队列,并实现消息接收逻辑。
  6. 处理消息:在消费者端接收到消息后,可以对消息进行处理,例如执行业务逻辑、存储数据等操作。处理完成后可以通过ack机制通知RabbitMQ服务器消息已经被消费。
  7. 监控和管理:可以使用RabbitMQ的管理界面来监控和管理RabbitMQ服务器和消息队列的状态、性能等指标。也可以通过其他工具或插件来实现更高级的管理和监控功能。

以上是使用RabbitMQ的基本步骤,需要根据实际业务场景和需求进行适当的配置和调整。同时还需要注意消息的可靠传输、消息的持久化和顺序等问题,以及处理异常情况和性能优化等方面的注意事项。

Java代码示例

以下是一个简单的Java代码示例,演示如何使用RabbitMQ发送和接收消息:

发送消息:

import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.Channel;public class Send {private final static String QUEUE_NAME = "hello";public static void main(String[] argv) throws Exception {ConnectionFactory factory = new ConnectionFactory();factory.setHost("localhost");try (Connection connection = factory.newConnection();Channel channel = connection.createChannel()) {channel.queueDeclare(QUEUE_NAME, false, false, false, null);String message = "Hello World!";channel.basicPublish("", QUEUE_NAME, null, message.getBytes("UTF-8"));System.out.println(" [x] Sent '" + message + "'");}}
}

接收消息:

import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.DeliverCallback;public class Recv {private final static String QUEUE_NAME = "hello";public static void main(String[] argv) throws Exception {ConnectionFactory factory = new ConnectionFactory();factory.setHost("localhost");try (Connection connection = factory.newConnection();Channel channel = connection.createChannel()) {channel.queueDeclare(QUEUE_NAME, false, false, false, null);System.out.println(" [*] Waiting for messages. To exit press CTRL+C");DeliverCallback deliverCallback = (consumerTag, delivery) -> {String message = new String(delivery.getBody(), "UTF-8");System.out.println(" [x] Received '" + message + "'");};channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> { });}}
}

在这个示例中,我们首先创建了一个名为“hello”的队列,然后使用basicPublish方法将一条消息发送到该队列中。在Recv类中,我们创建了一个名为“hello”的队列,并使用basicConsume方法开始从队列中接收消息。当接收到消息时,DeliverCallback回调函数将被调用,以便对消息进行处理。

拓展

RabbitMq中交换器(Exchange)类型详解

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

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

相关文章

元宇宙红色展厅VR虚拟展馆提高受训者的参与感

生活在和平年代的新一代青少年,可能对革命先烈英勇事迹难以有很深的体会,无法切实感受到中国共产党无畏牺牲、誓死保家卫国的红色精神,因此借助VR虚拟现实制作技术,让参观者们走近革命先烈中,感受老一辈无产阶级革命家…

TrustZone之SMC异常

作为支持两个安全状态的一部分,该架构包括了Secure Monitor Call(SMC)指令。执行SMC会引发Secure Monitor Call异常,该异常目标是EL3。 通常,SMC用于请求服务,可以是来自驻留在EL3中的固件,也可…

微信小程序适配方案:rpx(responsive pixel响应式像素单位)

小程序适配单位:rpx 规定任何屏幕下宽度为750rpx 小程序会根据屏幕的宽度自动计算rpx值的大小 Iphone6下:1rpx 1物理像素 0.5css 小程序编译后,rpx会做一次px换算,换算是以375个物理像素为基准,也就是在一个宽度…

计算一组x和y(一维数组)

输入30个整数a1,a2,a3,…,a30,计算所有的x与y。已知: 输入格式: 30个整数 输出格式: 计算得到的x1, x2,.......,x10 计算得到的y1, y2,.......,y10 所有输出精确到小数点后3位。 注意: 1、输出的每个“”左右各有一个空格,输出…

坚鹏:兴业银行EAST5.0政策解读及数据质量提升方案培训

兴业银行股份有限公司(简称“兴业银行”)成立于1988年8月,2022年总资产9.27万亿元,是经国务院、中国人民银行批准成立的首批股份制商业银行之一,总行设在福州市。现已发展成为横跨境内外,线上线下结合&…

12.8 作业

1, 使用手动连接,将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中,在槽函数中判断ui界面上输入的账号是否为"admin"&#…

FLStudio中文2024中文最新汉化安装包下载

FLStudio中文21最新版本以其使用速度而闻名,是一个高度复杂的音乐制作环境。FL Studio免费,联合国音序器音频和MIDI每个复合编辑都是音乐。现代的DAW是一种非凡的野兽。首先,它在很大程度上把自己放在了(几乎)每个人记录过程的核心。其次&…

探索 SNMPv3 魔法:armbian系统安装snmp服务并通过SNMPV3进行连接控制

文章目录 说明SNMP服务的安装本机连接SNMPV3操作MIB Browser连接SNMPV3问题总结密码过短权限配置错误,导致OID不存在 说明 工具 建议尝试专业版ireasoning MIB brower,因为只有专业版支持SNMP v3的连接。当然,也可以尝试其他SNMP客户端工具 …

Java第21章网络通信

网络程序设计基础 网络程序设计编写的是与其他计算机进行通信的程序。Java 已经将网络程序所需要的元素封 装成不同的类,用户只要创建这些类的对象,使用相应的方法,即使不具备有关的网络支持,也可 以编写出高质量的网络…

kennard-stone算法实现样本集划分(ks算法)

目录 一、 Kennard-Stone算法原理(KS算法) 二、Kennard-Stone算法作用 三、代码 四、对选出来的train样本使用T-SNE算法进行绘制 五、参考链接 一、 Kennard-Stone算法原理(KS算法) KS算法原理:把所有的样本都看…

机器学习实验四:贝叶斯分类器

系列文章目录 机器学习实验一:线性回归机器学习实验二:决策树模型机器学习实验三:支持向量机模型机器学习实验四:贝叶斯分类器机器学习实验五:集成学习机器学习实验六:聚类 文章目录 系列文章目录一、实验…

实用案例 | 用 Binning Explorer 小程序创建评分卡题

这个案例展示如何运用 MATLAB 中自带的 Binning Explorer 小程序来创建信用评级中的评分卡。 用 Binning Explorer 对样本进行分箱操作, 创建图表来展示分箱信息,并将创建的对象”creditscorecard”导出。 然后利用 creditscorecard 对象,结合 Financi…

基于深度学习路径规划RRT*-训练图像预处理

基于深度学习路径规划RRT*-训练图像预处理 图像预处理说明 在基于采样的RRT算法对机器人进行路径规划时,由于采样点的随机性,会增加路径的搜索时间的路径的非最优性,所以基于神经网络的优势,利用深度学习进行RRT的随机采样&…

使用webstrom编写vue开启提示

1.语言服务器选择 2.文件类型–忽略的文件和文件夹,删去,node_modules,就可以点进去库了 3.禁用JSLint、TSLint 4.开启node辅助 5.如果是vite,开启自动读取,或手动指定 6.如果是Webpack,开启自动读取&#…

Git提交代码时出现: ‘LF will be replaced by CRLF the next time Git touches it‘

遇到的问题 windows平台进行 git add 时,控制台打印警告 问题分析 1. Dos/Windows平台默认换行符:回车(CR)换行(LF),即’\r\n’ 2. Mac/Linux平台默认换行符:换行(LF&…

小调查:你申请的流量卡,快递员派件时让你激活并充话费了吗?

说到这个问题,就要给大家普及一下流量卡的激活方式了,并不是所有的流量卡快递都需要快递激活并充话费,只有在套餐详情种明确标注快递激活的流量卡才会有这个要求,自主激活的流量卡则不需要的。 如图所示: 接下来&#…

已通过考试和认证注册以及后续计划表

已通过考试和认证注册以及后续计划表 软考 - 计算机技术与软件专业技术资格(水平)考试信息系统集成及服务项目管理人员工程类考试计划你关注的证书样子 软考 - 计算机技术与软件专业技术资格(水平)考试 高级 信息系统项目管理师&…

鸿蒙开发组件之Image

Image组件加载图片方式有三种: 1、网络地址加载 直接Image(xxxx),添加上图片的网络地址就可以了。注意:真机、模拟题调试需要申请"ohos.permission.INTERNET"权限 Image(https://xxxxxxx) 2、PixelMap格式加载像素图 Image(PixelMapObjec…

整数在内存中的存储

整数和浮点数在内存中的存储方式是不一样的,今天,我们来具体学习一下 文章目录 整数在内存中的存储浮点数在内存中的存储 整数在内存中的存储 我们在之前就已经了解过了整数有原码,反码,补码的形式,这三种方式都是二进…

php使用vue.js实现省市区三级联动

参考gpt 有问题问gpt 实现效果 现省市区三级联动的方法可以使用PHP结合AJAX异步请求来实现。下面是一个简单的示例代码&#xff1a; HTML部分&#xff1a; <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>省市区三级联动…