RabbitMQ---事务和消息分发
(一).事务1.概念RabbitMQ是基于AMQP协议实现的该协议实现了事务机制。因此RabbitMQ也支持事务机制。Spring AMQP也提供了事务相关的操作。RabbitMQ事务允许开发者确保消息的发送和接收都是原子的。2.使用事务(1).配置事务管理器(2).声明队列这里我们直接使用内置的交换机即可(3).生产者代码(4).代码测试可以查看事务起作用了注意开启事务配置事务管理器添加Transactional注解。这三步一步也不能确。(二).消息分发1.概念消息分发解决的就是当负载加重的时候某些消费者消费苏队满某些消费者消费速度快就会导致消息积压某些消费者空闲进而应用整体的吞吐量下降。我们可以使用channel.basicQos(int prefetchCount)方法来限制当前信道上的消费者所能保持的最大未确认消息的数量。当发来消息的时候RabbitMQ就会发送一条消息计数1消费一条消息计数器-1当达到上限的时候RabbitMQ就不会在向它发送消息了直到消费者确认了某条消息。类似于“滑动窗口”。主要应用场景为两个一个是限流一个是负载均衡。2.限流RabbitMQ可以控制消费端一次只能拉取N个请求。通过设置prefetchCount参数同时必须设置消息应答方式为手动应答。prefetchCount 控制消费者从队列中prefetch消息的数量来实现流量控制和复杂均衡。(1).配置prefetch参数并设置应答方式为手动应答(2)配置交换机和队列(3).生产者(4).消费者注意这里我们并没有进行ack确认(5).测试结果可以看到有10条是nack的就是没有进行手动确认的。有10条是ready的是因为我们配置了最大未确认数量是10.3.负载均衡我们也可以通过消息分发来实现负载均衡。一个消费者消费的快一个消费者消费的慢此时就会造成一个消费者一直在忙一个消费者很闲。这是因为RabbitMQ只是在消息进入队列时分派消息不考虑消费者未确认消息的数量。我们可以设置prefetch1的方式告诉RabbitMQ一次只能给一个消费者一条消息也就是说在消费者处理并确认前一条消息之前不再向该消费者发送消息。(1).配置prefretch参数(2).生产者(3).消费者(4).测试结果可以发现是可以实现的
上一篇/下一篇内容由系统自动关联
返回资讯列表 →