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)类型详解

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

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

相关文章

基于java swing 药品销售管理系统

大家好,我是DeBug,很高兴你能来阅读!作为一名热爱编程的程序员,我希望通过这些教学笔记与大家分享我的编程经验和知识。在这里,我将会结合实际项目经验,分享编程技巧、最佳实践以及解决问题的方法。无论你是…

Https证书/SSL证书异常导致访问失败该如何解决?

我们在使用SSL证书时,经常会碰到一些常见的SSL证书错误,例如浏览器提示证书无效,证书在地址栏中被红色警告等等。下面是关于SSL证书错误的几种原因及解决方法。 1.报错:NET::ERR_CERT_DATE_INVALID 原因:SSL证书已过…

大数据讲课笔记1.4 进程管理

文章目录 零、学习目标一、导入新课二、新课讲解(一)进程概述1、基本概念2、三维度看待进程3、引入多道编程模型(1)CPU利用率与进程数关系(2)从三个视角看多进程 4、进程的产生和消亡(1&#xf…

智能优化算法应用:基于缎蓝园丁鸟算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于缎蓝园丁鸟算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于缎蓝园丁鸟算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.缎蓝园丁鸟算法4.实验参数设定5.算法…

046:vue通过axios调用json地址数据的方法

第046个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下,本专栏提供行之有效的源代码示例和信息点介绍,做到灵活运用。 (1)提供vue2的一些基本操作:安装、引用,模板使…

企业微信应用模板消息

是在发送应用消息接口的基础上,第三方应用支持一种新的消息类型:模板消息,msgtype指定为template_msg。模板消息是一种固定格式的消息。 注意 - 此消息类型目前仅第三方应用支持,自建应用不支持。服务商需在管理端申请模版。接口…

Maven基础

目录 Maven坐标 坐标简介 主要组成 Maven依赖管理 配置依赖 依赖简介 配置依赖 依赖传递 依赖传递简介 排除依赖 依赖范围 生命周期 生命周期简介 执行指定生命周期 Maven坐标 坐标简介 Maven中的坐标是资源的唯一标识,通过该坐标可以唯一定位资…

NSSCTF web刷题记录7

文章目录 [SDCTF 2022]CURL Up and Read[NUSTCTF 2022 新生赛]Translate [SDCTF 2022]CURL Up and Read 考点:SSRF 打开题目发现是curl命令,提示填入url 尝试http://www.baidu.com,成功跳转 将url的字符串拿去解码,得到json格式数…

LVGL | Demo实例使用说明

LVGL | Demo实例使用说明 时间:2023年12月10日21:51:17 文章目录 LVGL | Demo实例使用说明Demos for LVGLAdd the examples to your projectsDemosWidgetsMusic playerKeypad and encoderBenchmarkStress Contributing Demos for LVGL Add the examples to your p…

做题总结 59. 螺旋矩阵 II

跟着代码随想录顺序到这题,不会做。不知道怎么才能实现。 PS:我是用 java实现的。 题目:给你一个正整数 n ,生成一个包含 1 到 n^2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。 总结思路为&am…

Android音量调节参考一

基于android 9平台分析。 在Android系统中,默认的设备(phone等)音量都是分开控制的,这些包括媒体、铃声、闹铃、蓝牙、通话通过音频流来区别不同的音量类型。每种流类型都定义最大音量、最小音量及默认音量,Android 9定了了11中音频流类型&am…

Shell 常用命令详解-上

Shell 常用命令详解-上 1.目录查阅相关命令2.文件操作相关命令 1.目录查阅相关命令 ll 命令 命令描述:ll命令用于显示指定工作目录下的内容。 命令格式:ll [参数] [目录名]。 参数说明: 参数说明-a显示所有文件及目录(包括隐藏文…

Modelscope Agent初体验与思考

背景:LLM → \to → Agent ChatGPT为代表的大语言模型就不用过多的介绍了,ChatGPT很强大,但是也有做不到的东西。 例如: 实时查询问题:实时的天气,地理位置,最新新闻报道,现实世…

基于ssm保险业务管理系统设计与实现论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本保险业务管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息…

手动搭建koa+ts项目框架(基础)

文章目录 前言一、TS配置文件1、全局安装TypeScript2、项目根目录创建Typescript配置文件 二、项目初始化配置文件(package.json)1、初始化配置文件2、安装依赖 三、开启简单的服务API入口文件新增脚本 总结如有启发,可点赞收藏哟~ 前言 为什…

外贸开发信主题行写法?邮件的主题怎么写?

如何写高点击率的外贸开发信主题行?推荐的电子邮件主题行有哪些? 外贸开发信如何设计一个引人注目的主题行,成为了外贸从业者需要深入思考的问题。在本文中,蜂邮将探讨外贸开发信主题行的写作方法,以确保您的邮件能够…

Stable Diffusion这样的文本-图像生成模型有记忆吗?

Stable Diffusion扩散模型作为生成高质量图像的先进模型,却伴随着对训练数据的记忆化倾向,引发了隐私和安全性的担忧。AIGCer分享一篇分析该现象的文章,通过两个案例研究深入挖掘了文本复制现象,旨在为未来生成模型的改进提供重要…

调试备忘录-NTC电阻的使用(教程 + 代码)

软件环境:CodeWarrior 11.1 硬件环境:NXP S9KEAZ64A 传感器参数:NTC热敏电阻(R25 50k,B25-50 3950) 写在前面 最近做小项目需要用到NTC电阻,因此写一个调试备忘录记录下。 什么是NTC电阻? NTC热敏电阻就是负温度…

【CiteSpace】引文可视化分析软件CiteSpace下载与安装

CiteSpace 译“引文空间”,是一款着眼于分析科学分析中蕴含的潜在知识,是在科学计量学、数据可视化背景下逐渐发展起来的引文可视化分析软件。由于是通过可视化的手段来呈现科学知识的结构、规律和分布情况,因此也将通过此类方法分析得到的可…

JMS(Java Message Service)使用指南

介绍 JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。它是一…