RabbitMQ使用的端口:
5672 amqp协议
15672 后台管理界面
25672 当搭建rabbitMQ集群时使用
virtual host 相当于mysql里的数据库db1,db2等,使用RabbitMQ之前先创建建用户和virtual host 然后给virtual host指定用户,只有指定的用户可以访问该virtual host 。
持久化,消息是存储在内存中的队列里的,当RabbitMQ宕机后,内存中的消息会丢失。而设置为持久化后,会把消息保存在硬盘中,重启RabbitMQ会从硬盘中读取消息到内存,消息不会丢失。
消息确认机制 ,生产者发送消息到RabbitMQ,怎么知道RabbitMQ一定收到消息了呢?可以采用两种方式。
第一种是事务机制,因为RabbitMQ是基于AMQP协议的。本身实现了事务,可以采用channel.txSelect()开启事务,txCommit()提交事务,txRollback回滚事务
第二种是confirm模式,channel.confirmSelect()开启confirm模式,waitforConfirm()等待RabbitMQ确认是否发送成功,或者添加监听器。
消息应答模式,消息应答分为自动确认和手动确认两种。
自动确认表示的是当消费者收到消息后,消息就从队列里自动删除了。当消费者正在处理消息时,消费者突然宕机了,该条消息还没有真正被消费完,会造成消息丢失。
手动确认表示的是只有当消费者回复ack后,消息才从队列里删除。当消费者宕机时不会造成消息丢失,因为消息还没有从队列中删除。
交换机的类型
fanout 对应发布订阅
direct 对应路由模式
topic 对应主题模式
header 这种类型的交换机用到很少
RabbitMQ中的几种队列模式
1 简单队列
一个生产者发送消息到队列,一个消费者从队列里获取消息。
2 工作队列
一个队列可以有多个消费者
之所以有这种模型,是由于发送消息一般是比较快,而消费消息比较耗时,为了提高效率,采用了两个消费者。
这种模型又分为两种情况,第一种情况是采用轮训分发机制(round-robin),不管C1和C2哪个的消息处理速度比较快,他们消费的消息数量基本是相同的(消息应答设置自动确认)。
第二种情况是采用公平分发机制(fairdispatcher),C1和C2哪个处理速度快,消费的消息也多。(消息应答设置为手动确认,并且Qos设置为1,表示每次只发送或者接受一个消息)
3 发布订阅模式
一个消息被多个消费者消费(交换机的类型为fanout,可以理解为不处理路由键)
生产者将消息发送到交换机上,只要队列绑定到了该交换机,消息就被转发到该队列,每个消费者从自己的队列中获取消息
4 路由模式
与发布订阅模式不同的是,不是所有的队列都会受到消息。交换机转发消息时,会根据队列和交换机绑定时设置的路由键(完全匹配)来转发。
交换机类型为direct,可以为处理路由键
5 主题模式
交换机类型是topic
队列和交换机绑定时可以含有通配符
* 号只能匹配一个单词
# 号能匹配0个或多个单词