学习RabbitMQ的一些个人总结

本文介绍了RabbitMQ,一个基于Erlang的AMQP实现,用于异步处理、流量削峰和系统解耦。讨论了其特性如可靠性、路由灵活性、消息集群和管理界面,并详细阐述了消息队列的工作机制、Exchange类型以及在不同场景下的应用,如直接、扇出和主题交换机。此外,还涵盖了RabbitMQ的命令、SpringBoot集成及事务和确认模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

RabbitMQ是流行的开源消息队列系统,用erlang语言开发,RabbitMQ是AMQP(高级消息队列协议)的标准实现。采用该技术,我们可以实现异步处理、流量削峰、系统解耦;

消息 Message 是指在应用件传送的数据,消息可以非常简单,比如只包含文本字符串.也可能包含嵌入对象.

消息队列(Message Queue)是一种应用间的通信方式,消息发送后可以立即返回,由消息系统来确保消息的科可靠传递.
//异步协作机制

RabbitMQ 消息队列
基于Erlang语言开发的AMQP的开源实现.
AMQP : Advanced Message Queue 高级消息队列协议
1.可靠性 (持久化,传输确认,发布确认)
2.灵活的路由 (转发. 在消息进入队列之前,通过Exchange来路由消息)
3.消息集群(多个RabbitMQ服务器组成一个集群,形成一个逻辑Broker)
4.高可用(不会出现单点故障, 在部分节点出现问题的情况下队列仍然可用)
5.多协议标准 ( STOMP.MQTT)
6.多语言客户端(几乎支持所有常用语言)
7.管理界面( 用户界面,使得用户可以监控和管理消息Broker的许多方面)
8.跟踪机制( 如果消息异常,会提供消息跟踪机制)

RabbitMQ 常用命令
启动 rabbitmq-server start
关闭 rabbitmqctl stop
端口 15672
插件 rabbitmq-plugins enable rabbitmq_management

RabbitMQ 消息发送与接收机制
消费者订阅某个队列,生产者创建消息,然后发布到队列(queue)中,最后将消息发送给监听的消费者

生产者----Broker 消息队列实体[Virtual Host(可以有若干个交换机 Exchange —binding-- 队列 Queue)]-----通道–消费者

AMQP中的消息路由
增加了Exchange和Binding的角色.生产者把消息发布到Exchange上,消息到达队列并被消费者接收,而Bingding决定交换器的消息应该发布到哪个队列.

Exchange类型 //4种策略
1.dircet交换机
消息一对一的绑定,精准匹配,会根据message中Routingkey的内容将消息发送给对应的Queue中. 队列需要指定好Bindingkey与routingkey一致.消费者只需要监听某个队列以后就会获取队列中的消息
2.fanout //适用于一些消息数据不是很重要的应用中.例如手机app消息推送
广播模式,消息是一对多的,不需要任何的key和binding.转发消息是最快的. 必须要在消费中监听队列,如果没人去接收就会永远错过消息,会丢失消息.
3.topic
基本概念与Fanout差不多,但是topic需要指定BindingKey,消息中也需要携带RoutingKey.但是它的bindingKey可以识别通配符 *( 必须要匹配一个单词 ) / # ( 可以匹配0个或任意多个单词 ) . 单词和单词主键需要使用 “.” 进行分割. 它也会丢失消息,所以需要消费者去提前监听队列.
4.headers

//========================================================================
消息发送类 //端口名是5672

	//创建连接工厂
    ConnectionFactory connectionFactory = new ConnectionFactory();
    //配置RabbitMQ的连接信息
    connectionFactory.setHost("192.168.0.242"); //指定ip
    connectionFactory.setPort(5672);    //端口
    connectionFactory.setUsername("root");
    connectionFactory.setPassword("1212");

    Connection connection = null; //定义连接
    Channel channel = null; //定于通道

    try {
        connection = connectionFactory.newConnection(); //获取连接
        channel = connection.createChannel();   //获取通道

        //利用通道创建队列,声明一个队列
        /*
        *   参数1:队列名称,取值任意
        *   参数2:是否为持久化队列
        *   参数3:是否排外?如果排外则这个队列只允许一个消费者监听
        *   参数4:是否自动删除队列,true->队列中没有消息和消费者链接时自动删除
        *   参数5:队列属性设置,通常为null
        *
        * 注意:
        * 1.声明队列时,这个队列名称如果已存在则放弃声明,如果不存在会声明一个新队列
        * 2.队列名可以随便取,但是要与消息接收完全一致
		* 3.这行代码是可有可无的,但是一定要在发送消息前确认队列名称已经存在于RabbitMQ中,否则抛出异常
        * */
        channel.queueDeclare("",true,false,false,null);
        String msg = "嗷嗷嗷嗷嗷哦啊";

        /*
<think>好的,我现在需要回答用户关于学习RabbitMQ是否需要购买服务器或使用本地环境的问题。首先,我得回顾一下用户提供的引用内容,看看是否有相关的信息。 引用[3]提到在macOS上安装RabbitMQ的方法,包括使用Homebrew安装和启动服务,以及如何启用Web管理界面。这说明用户可以在本地安装和运行RabbitMQ需要购买服务器。此外,引用[2]和[1]中提到的代码示例和客户端库的使用,都暗示了本地开发的可能性。 接下来,我应该考虑用户的学习场景。通常学习新技术时,本地环境搭建是常见且经济的选择。RabbitMQ支持多种操作系统,如Windows、macOS和Linux,用户完全可以在自己的电脑上安装。引用[3]中的安装步骤详细,用户按照指导应该能顺利完成。 另外,用户可能担心是否需要云服务器来运行RabbitMQ。根据我的知识,RabbitMQ作为消息队列中间件,既可以部署在本地机器,也可以在云服务器上运行。对于学习用途,本地环境足够。如果需要团队协作或模拟生产环境,可能需要云服务器,但这是必须的。 可能还需要提到Docker的使用,因为通过Docker容器运行RabbitMQ也是一种简便的方法,适合想在本地安装太多软件的用户。过用户提供的引用中没有提到Docker,所以可能需要重点强调,但可以简要提及作为另一种选择。 总结一下,用户的问题答案应该是:需要购买服务器,可以在本地安装或使用Docker。同时提供引用中的安装步骤作为参考,并说明云服务器的适用场景。最后生成相关问题,帮助用户进一步学习。</think>学习 RabbitMQ 消息队列时,**需要购买服务器**,可以通过本地环境搭建或容器化技术进行学习。以下是具体说明: --- ### 1. **本地环境搭建** RabbitMQ 支持在本地计算机(Windows/macOS/Linux)上直接安装,无需依赖云服务器。 - **安装方式**: - **macOS**:通过 Homebrew 安装(如引用[3]所述): ```bash brew install rabbitmq # 启动服务 brew services start rabbitmq # 启用Web管理插件 rabbitmq-plugins enable rabbitmq_management ``` - **Windows/Linux**:从官网下载安装包并配置环境变量[^3]。 - **访问管理界面**:安装后可通过浏览器访问 `http://localhost:15672`,默认账号密码为 `guest/guest`[^3]。 --- ### 2. **容器化部署(Docker)** 若想在本地安装,可使用 Docker 快速启动 RabbitMQ: ```bash docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:management ``` - `5672` 是消息通信端口,`15672` 是管理界面端口[^3]。 --- ### 3. **云服务器的适用场景** 以下情况可能需要使用云服务器: - 需要模拟分布式环境(如多节点集群)。 - 团队协作测试或长期运行服务。 - 生产环境部署(如引用[4]提到的限流和高并发场景)。 但对个人学习而言,本地环境完全足够。 --- ### 本地学习示例代码 引用[1]和[2]展示了如何在代码中连接 RabbitMQ(需引入 `amqp-client` 依赖): ```csharp using RabbitMQ.Client; // 连接本地 RabbitMQ var factory = new ConnectionFactory { HostName = "localhost" }; using var connection = factory.CreateConnection(); using var channel = connection.CreateModel(); ``` --- 相关问题
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值