RabbitMQ入门

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个或多个单词

原文地址:https://www.cnblogs.com/moris5013/p/12268212.html