RabbitMQ学习第三章:消息应答与消息持久化

应答:

boolean autoAck=true;(自动确认模式),一旦RabbitMQ将消息发送给消费者

消息就会从内存中删除。(这种情况下不安全,如果杀死正在执行的消费者,

就会丢失正在处理的消息)。

boolean autoAck=false;(手动确认模式),如果有一个消费者挂掉,就会交付给

其他的消费者来执行,RabbitMQ支持消息应答,消费者回执一个消息告诉

RabbitMQ已经处理完成,然后RabbitMQ就会删除内存中的消息。

持久化:

 当RabbitMQ服务挂了以后,消息会丢失,所以需要持久化。

  //创建队列

Boolean durable=false;

  channel.queueDeclare(QUEUE_NAME,durable,false,false,null); 

 (这里有个小细节,就是将Boolean durable=false改为true会报错,尽管代码写

的正确,因为我们已经定义了一个queue,这个queue未持久化,RabbitMQ不允许

重新定义(不同参数)一个已经存在的queue)

RabbitMQ学习第四章:publish_subscribe发布订阅模式

publish_subscribe发布订阅模式

模型:

 

解读:

1.一个生产者,多个消费者。

2.每一个消费者都有自己的队列。

3.生产者没有直接把消息发送到队列,而是发到了交换机exchange(X)。                                                                                                                 

4.每个队列都要绑定到交换机。

5.生产者发送的消息经过交换机,然后到达队列,就能实现一个消息被

多个消费者消费。

例:声明交换机(生产者)

public static final String EXCHANGE_NAME="test_exchange_fanout";

 

 

图中将消息发送到了交换机,控制台中也显示了发送的消息,并且RabbitMQ

控制台也新添加了一个我命名的交换机,但是消息发送到交换机之后去哪了?

已经丢失了!!!因为交换机没有存储的能力,在RabbitMQ里面只有队列有

存储的能力,这时候队列还没有绑定交换机,所以消息丢失了。

队列绑定交换机:

消费者1:

 消费者2:

 

消费者1和消费者2都绑定了 EXCHANGE_NAME="test_exchange_fanout"的交换机,将消息

发送到交换机时候,实现了一个消息被多个消费者消费,如图:

 

 

 

控制台查看到交换机绑定的队列:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值