在这篇博客中,简单记录一下 rabbitmq 服务器中一些基本的概念。
Connection: connection 为 TCP连接,是我们的应用程序和RabbitMQ服务器真正发送和接收数据的地方。
Channel: channel为connection创建的“信道”,具体的AMQP命令都是通过信道发送出去的。每一条信道都有一个唯一的id,channel是线程不安全的。
bindingKey和routingKey的区分:
bindingkey: 在使用绑定的时候,需要用到的路由键是 bindingkey。涉及到的客户端方法: channel.exchangeBind 和 channel.queueBind等
routingkey: 在发送消息的时候,需要用到的路由键是 routingkey。涉及到的客户端方法: channel.basicPublish
exchange:交换器,存在四种类型
-
fanout:fanout类型的Exchange路由规则非常简单,它会把所有发送到该Exchage的消息路由到所有与它绑定的Queue中。
-
direct:direct类型的Exchange路由规则也是非常简单,它会把消息路由到哪些 binding key 与 routing key 完全匹配的Queue中。
每个队列在新建时,默认会绑定到 默认交换器(名字为空字符串),绑定的路由键名称和路由键名称一致。
-
topic: 根据 routingKey 和 bindingKey 进行匹配。bindingKey
- headers:此种交换器不常用,它是使用headers来匹配的,不依赖routingKey和bindingKey中可以存在两种特殊字符“*” 与 “#” ,用于做模糊匹配,其中 “*” 用于匹配一个单词,“#”用于匹配多个参数(可以是零个)。注意:“*” 以 . 作为分隔符 、 “#” 以任何字符作为匹配关键字的部分。
vhost:虚拟主机
每一个 vhost 本质上就是一个 mini 版的 RabbitMQ 服务器,它拥有自己的队列、交换器、绑定等,同时它也有自己的权限控制。它提供了逻辑上的隔离,保证了数据的安全性。
Connection和Channel有什么关系?
我们知道操作系统创建和销毁一条tcp连接是非常消耗性能的,如果系统高峰期时,大量的创建和销毁TCP连接,这会造成大量的性能损耗,并且系统很有可能达到瓶颈,如果我们所有的线程都使用一条TCP连接,并且保证每个线程的私密性,那么就可以大大提高系统的性能,因此 Channel 就应运而生了。
即:我们可以简单的理解,channel 就是一个虚拟的 connection,channel是通过connection创建得来的,channel是线程不安全的。
设置消息的过期时间:
1、设置队列中消息的过期时间
通过队列设置的过期时间,那么队列中的每条消息的过期时间都是一致的。
在channel.queueDeclare 时,设置x-message-ttl 参数,这个参数的单位是毫秒
** 不进行设置,表示此消息永不过期
** 设置为0表示,除非此时可以将消息投递给消费者,否则该消息会被立即丢弃
2、为单条消息设置过期时间
在channel.basicPublish 方法中加入expiretion 的属性参数,单位是毫秒
注意:
1、如果同时设置了队列的过期时间和消息的过期时间,那么以过期时间小的为准
2、对于第一种方法设置的过期时间,在消息过期时就会从队列中进行移除,对于第二种方法,即使消息过期也不会马上从队列中移除,因为每条消息的过期时间是在即将投递给消费者之前进行判断的。
消费者消费消息时与rabbitmq断开连接:
如果消费者就收到一条消息,然后确认之前与RabbitMQ断开连接或从队列上取消订阅,RabbitMQ会认为这条消息没有进行分发,会重新分发给下一个消费者进行处理。
消费者忘记确认消息时RabbitMQ服务器的处理:
如果应用程序有bug导致没有确认消息,那么RabbitMQ将不会给该消费者发送更多的消息了。这是因为RabbitMQ服务器认为该消费者没有准备好接受下一条消息。
如果消息要想从RabbitMQ崩溃中恢复,必须满足一下几点:
- 将消息的投递模式(delivery mode)设置成 2(持久)
- 发送到持久化的交换器中
- 到达持久化的队列中
生产者如果知道消息到达了RabbitMQ服务器上
1、使用事务模式。(不推荐,严重影响性能)
2、使用 confirm 一步确认。(推荐)
详细解释:http://huan1993.iteye.com/admin/blogs/2432156
相关推荐
rabbitMQ学习笔记rabbitMQ学习笔记rabbitMQ学习笔记rabbitMQ学习笔记rabbitMQ学习笔记rabbitMQ学习笔记rabbitMQ学习笔记rabbitMQ学习笔记rabbitMQ学习笔记rabbitMQ学习笔记rabbitMQ学习笔记rabbitMQ学习笔记rabbitMQ...
rabbitmq学习笔记和软件和插件,尚硅谷的学习笔记和软件
RabbitMQ笔记
RabbitMQ和Kafka详细笔记以及示例代码
rabbitmq学习笔记.zip
rabbitMQ 学习笔记
结合狂神RabbitMQ笔记,外加自己查阅资料
RabbitMQ学习笔记 RabbitMQ学习笔记 RabbitMQ学习笔记 RabbitMQ学习笔记 RabbitMQ学习笔记 RabbitMQ学习笔记
rabbitMQ学习的笔记和学习过程中写的代码
cent6.6安装rabbitMQ3.1.5-详细笔记文档总结-带安装包
RabbitMQ是一个开源的遵循 AMQP协议实现的基于 Erlang语言编写,支持多种客户端(语言),用于在分布式系统中存储消息,转发消息,具有高可用,高可扩性,易用性等特征\ RabbitMQ是采用 Erlang语言开发的,所以系统...
rabbitmqg概念快速预览,整理了mq所包含的大部分概念,帮助快速理解掌握mq,比你看一整本书来的简单透彻。节省时间而放在写代码上。
RabbitMq是实现AMQP(高级消息队列协议)的消息中间件的一种,与Springboot整合后使用方便简单,功能强大。本文还列举了Springboot整合RabbitMq使用和原版对比、及一些坑,简单易懂。
附件内含erlang、rabbitmq 安装压缩包 ,安装步骤安装即可成功。一般安装中问题最多的为erlang版本与rabbitmq不一致,造成安装失败
RabbitMq学习笔记1
RabbitMQ笔记.zip
本人rabbitmq集群环境搭建笔记分享。
RabbitMQ源码和客户端工具RabbitMQ源码和客户端工具
MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送...