当前位置: 首页 > article >正文

RabbitMQ入门详解

文章目录

  • RabbitMQ入门详解
    • 一、引言
    • 二、安装与配置
      • 1、安装 RabbitMQ
      • 2、配置 RabbitMQ
    • 三、核心概念
      • 1、基础架构
      • 2、交换机类型
    • 四、使用示例
      • 1、发送消息
      • 2、接收消息
    • 五、总结

RabbitMQ入门详解

在这里插入图片描述

一、引言

RabbitMQ 是一款基于 AMQP(高级消息队列协议)的开源消息中间件,广泛应用于分布式系统中,用于实现应用之间的异步通信、负载均衡和解耦。它支持多种编程语言,包括 Java、Python、.NET 等,并且可以在 Linux、Windows 和 macOS 等主流操作系统上运行。本文将详细介绍 RabbitMQ 的基本概念、安装配置以及使用示例,帮助读者快速入门。

二、安装与配置

1、安装 RabbitMQ

在 Windows 系统上安装 RabbitMQ,需要先安装 Erlang 环境,因为 RabbitMQ 是基于 Erlang 语言开发的。安装完成后,需要配置环境变量,并启动 RabbitMQ 服务。此外,还可以通过安装 rabbitmq_management 插件,使用可视化界面管理 RabbitMQ。

2、配置 RabbitMQ

RabbitMQ 的配置文件通常位于安装目录的 etc 文件夹中。可以通过修改 rabbitmq.conf 文件来设置虚拟主机、用户权限等参数。例如,可以设置默认的虚拟主机和用户权限,以确保系统的安全性和隔离性。

三、核心概念

1、基础架构

RabbitMQ 的架构主要包括以下几个组件:

  • Broker:消息代理,负责接收和分发消息。
  • Virtual Host:虚拟主机,用于隔离不同的应用环境。
  • Exchange:交换机,负责将消息路由到不同的队列。
  • Queue:队列,用于存储消息。
  • Producer:生产者,负责发送消息。
  • Consumer:消费者,负责接收消息。

2、交换机类型

RabbitMQ 支持多种类型的交换机,包括:

  • Direct Exchange:根据路由键将消息直接路由到指定队列。
  • Fanout Exchange:将消息广播到所有绑定的队列。
  • Topic Exchange:根据路由键的模式匹配将消息路由到队列。

四、使用示例

1、发送消息

以下是一个简单的 Java 示例,展示如何发送消息:

java复制

import com.rabbitmq.client.*;

public class Producer {
    private static final String EXCHANGE_NAME = "direct_logs";

    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.exchangeDeclare(EXCHANGE_NAME, "direct");
            String severity = getSeverity(argv);
            String message = getMessage(argv);
            channel.basicPublish(EXCHANGE_NAME, severity, null, message.getBytes("UTF-8"));
            System.out.println(" [x] Sent '" + severity + "':'" + message + "'");
        }
    }

    private static String getSeverity(String[] strings) {
        if (strings.length < 1) {
            return "info";
        }
        return strings[0];
    }

    private static String getMessage(String[] strings) {
        if (strings.length < 2) {
            return "Hello World!";
        }
        return String.join(" ", strings);
    }
}

2、接收消息

以下是一个简单的 Java 示例,展示如何接收消息:

java复制

import com.rabbitmq.client.*;

public class Consumer {
    private static final String EXCHANGE_NAME = "direct_logs";

    public static void main(String[] argv) throws Exception {
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");
        Connection connection = factory.newConnection();
        Channel channel = connection.createChannel();
        channel.exchangeDeclare(EXCHANGE_NAME, "direct");
        String queueName = channel.queueDeclare().getQueue();
        if (argv.length < 1) {
            System.err.println("Usage: Consumer [info] [warning] [error]");
            System.exit(1);
        }
        for (String severity : argv) {
            channel.queueBind(queueName, EXCHANGE_NAME, severity);
        }
        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 '" + delivery.getEnvelope().getRoutingKey() + "':'" + message + "'");
        };
        channel.basicConsume(queueName, true, deliverCallback, consumerTag -> {});
    }
}

五、总结

RabbitMQ 是一款功能强大的消息中间件,适用于多种应用场景。通过本文的介绍,读者可以快速了解 RabbitMQ 的基本概念、安装配置以及使用方法。在实际开发中,可以根据具体需求选择合适的交换机类型和消息模型,实现高效的消息传递。


版权声明:本博客内容为原创,转载请保留原文链接及作者信息。

参考文章

  • RabbitMq 入门教程看这一篇就够了 (超详细!!!)_rabbitmq教程-CSDN博客
  • RabbitMQ的四种消息传递模式与演示代码-腾讯云开发者社区-腾讯云

http://www.kler.cn/a/518990.html

相关文章:

  • 996引擎 - NPC-动态创建NPC
  • 单片机基础模块学习——按键
  • flutter_学习记录_00_环境搭建
  • WinForm保持一个窗口在另一个全屏窗口的上面
  • 基于 Node.js 的天气查询系统实现(附源码)
  • 华为数据之道-读书笔记
  • 总线、UART、IIC、SPI
  • MySQL(InnoDB表空间工具innodb_ruby)
  • 2025数学建模美赛|赛题翻译|B题
  • 如何移植ftp服务器到arm板子?
  • [高等数学学习记录]函数的极值与最大值最小值
  • 操作系统1.3
  • Qt简单迷宫游戏
  • 解数独力扣
  • MATLAB 工具库的使用说明和案例示例
  • 双写+灰度发布:高并发场景下的维度表拆分零事故迁移实践
  • Mono里运行C#脚本36—加载C#类定义的成员变量和方法的数量
  • 【数据结构】树的基本:结点、度、高度与计算
  • vue路由history模式springBoot/Nginx配置
  • 【优选算法】11----最大连续1的个数|||
  • 【湖北省乡镇界】面图层arcgis数据乡镇名称和编码wgs84坐标无偏移shp格式内容测评
  • debian12.9编译freeswitch1.10.12【默认安装】
  • 掌握Gradle构建脚本:Kotlin DSL配置指南与最佳实践
  • 机器学习day3
  • 本地Ubuntu轻松部署高效性能监控平台SigNoz与远程使用教程
  • 71.在 Vue 3 中使用 OpenLayers 实现按住 Shift 拖拽、旋转和缩放效果