RabbitMQ使用指南

news2024/11/24 1:57:28

    • 介绍
    • 主要特点
    • 常用插件
      • 使用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.coloradmin.cn/o/1297354.html

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

相关文章

皮卡丘软件的使用教程,python皮卡丘编程代码

本篇文章给大家谈谈皮卡丘软件的使用教程,以及python皮卡丘编程代码,希望对各位有所帮助,不要忘了收藏本站喔。 嗨害大家好鸭!我是小熊猫❤ 昨天企鹅裙里有小伙伴说想让我用Python整个桌面小挂件~ 做个日历什么的感觉不够好玩~ 今…

智能统计账户支出,掌控财务状况,轻松修改明细。

在这个快节奏的时代,我们的生活每天都在发生着变化。无论是工资收入、购物消费,还是房租支出、投资理财,我们的财务状况也因此变得日益复杂。那么,有没有一种方法可以让我们轻松掌握自己的财务状况,实现智慧理财呢&…

springboot助农管理系统

springboot助农管理系统 源码获取: https://docs.qq.com/doc/DUXdsVlhIdVlsemdX

小科普:什么是 API(应用程序编程接口)

API 是一种为客户提供服务的方式。 编者按:何为API?如果你在百度百科上搜索,你会得到如下结果:API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的…

JWT介绍及演示

JWT 介绍 cookie(放在浏览器) cookie 是一个非常具体的东西,指的就是浏览器里面能永久存储的一种数据,仅仅是浏览器实现的一种数据存储功能。 cookie由服务器生成,发送给浏览器,浏览器把cookie以kv形式保存到某个目录下的文本…

Ubunutu18.04 ROS melodic 无人机 XTDrone PX4 仿真平台配置

一、依赖安装 sudo apt install ninja-build exiftool ninja-build protobuf-compiler libeigen3-dev genromfs xmlstarlet libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev python-pip python3-pip gawk pip2 install pandas jinja2 pyserial cerberus pyulog0.7.0 n…

【博客园美化】博客园简单动态背景美化(css个人现写的,不喜勿喷)

效果如图(背景是动态的) 效果参见: 浅吟清风 的博客园 1、前置操作 1、有一个博客园账号; 2、 登陆博客园,进入设置; 3、 选择“博客设置”-> “博客侧边栏公告”-> 申请JS权限(图片展…

6.19二叉搜索树中的众数

算法: 提到二叉搜索树,一定是中序遍历! 双指针法: pre指向当前节点cur的前一个节点,如果cur.val pre.val,count,count用来统计该数值出现的频率 如果 频率count 等于 maxCount(最…

交付《啤酒游戏经营决策沙盘》的项目

感谢首富客户连续两年的邀请,交付《啤酒游戏经营决策沙盘》的项目,下周一JSTO首席学习官Luna想让我分享下系统思考与投资理财,想到曾经看过的一本书《深度思维》,看到一些结构来预判未来。不仅仅可以应用在企业经营和组织发展上&a…

tomcat篇---第三篇

系列文章目录 文章目录 系列文章目录前言一、Tomcat是什么?二、什么是Servlet呢?三、什么是Servlet规范?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 一、To…

【Fastadmin】利用 build_select 做一个树状下拉选择框

1.效果展示 系统crud生成的下拉分类有些不是很好看,并且选择困难,看不出级差,效果如下: 经过 build_select 加工后的效果,美观好看,并添加上搜索功能: 2. 首先需要写一个树状图的数据格式 protected $datalist []; pu…

科学指南针走进江南大学,探索科研绘图与3D Max软件应用的精彩世界

2023年11月23日,江南大学迎来了一场精彩的科学指南针线下讲座,该讲座以探索科研绘图与3D Max软件应用为主题,通过专家讲座和实践操作,帮助学生了解科研绘图的重要性和3D Max软件在科研领域的广泛应用,吸引了大量感兴趣…

不一样的年会彩瞳推荐,绮芙莉多款彩瞳彰显个性

临近年底,各种公司年会、跨年晚会活动也逐渐排上日程,出席这种正式场合,每个人都有自己的“杀手锏”,从发型妆容到穿搭都是变美小细节,作为心灵之窗的双眸,更需要一副彩瞳来提升我们的眼妆质感,…

《树莓派不吃灰》第二十四期:懒是第一生产力,为树莓派安装可视化开源管理面板1Panel

最近有哥们推荐了一个现代化Linux开源管理面板1Panel,开源且稳定,懒是第一生产力,虽然命令行很灵活,但图形化界面真的是懒人刚需,本期在树莓派部署一下1Panel,让树莓派Linux运维更省力,进一步降…

主存储器与CPU的连接

目录 一. 单块存储芯片与CPU的连接二. 多块存储芯片与CPU的连接2.1 位扩展2.2 字扩展2.3 字位扩展 三. 译码器知识点的补充 \quad 一. 单块存储芯片与CPU的连接 \quad \quad \quad 暴露出的引脚都是与CPU连接的 上面这个是88位的存储芯片 我们可以看到有8个字, 每个字的字长是8…

【MATLAB源码-第99期】基于matlab的OFDM系统卡尔曼滤波(kalman)信道估计,对比LS,MMSE。

操作环境: MATLAB 2022a 1、算法描述 卡尔曼滤波器(Kalman Filter)是一种有效的递归滤波器,它能够从一系列的含有噪声的测量中估计动态系统的状态。在无线通信领域,尤其是在正交频分复用(OFDM&#xff0…

【人工智能Ⅰ】实验7:K-means聚类实验

实验7 K-means聚类实验 一、实验目的 学习K-means算法基本原理,实现Iris数据聚类。 二、实验内容 应用K-means算法对iris数据集进行聚类。 三、实验结果及分析 0:输出数据集的基本信息 参考代码在main函数中首先打印了数据、特征名字、目标值、目标…

【C语言】操作符详解(一):进制转换,原码,反码,补码

目录 操作符分类 2进制和进制转换 2进制转10进制 10进制转2进制 2进制转8进制和16进制 2进制转8进制 2进制转16进制 原码、反码、补码 操作符分类 操作符中有一些操作符和二进制有关系,我们先铺垫一下二进制的和进制转换的知识。 2进制和进制转换 其实我们经…

Java+Swing: 主界面的窗体 整理8

主界面的写法跟之前登录界面的窗体写法大致相同,在主界面中主要是窗体的大小的设置 package com.student_view;import com.utils.DimensionUtil; import sun.applet.Main;import javax.swing.*; import java.awt.*; import java.net.URL;/*** Author:xie…