RabbitMQ学习笔记

RabbitMQ介绍

       消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。实现高性能,高可用,可伸缩和最终一致性架构。是大型分布式系统不可缺少的中间件。
       RabbitMQ(Rabbit Message Queue)是使用Erlang语言开发的开源消息队列系统,基于AMQP协议来实现;AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。AMQP协议更多用在企业系统内,对数据一致性、稳定性和可靠性要求较高的场景,对性能和吞吐量的要求还在其次。
       Erlang语言最初用于交换机领域的架构模式,有着和原生Socket一样的延迟,这样使得RabbitMQ在Broker之间进行数据交互的性能是非常优秀的。
       RabbitMQ提供了可靠的消息机制、跟踪机制和灵活的消息路由,支持消息集群和分布式部署。适用于排队算法、秒杀活动、消息分发、异步处理、数据同步、处理耗时任务、CQRS等应用场景。

RabbitMQ应用


消费端的手动ack和nack

  • 应用场景

       消费端进行消费的时候,如果由于业务异常我们可以进行日志记录,然后进行补偿等;
       如果由于服务器挂掉等严重问题,此时我们可以采取手动ack保障消费端消费成功;


消费端的重回队列

  • 应用场景

       某些情况下由于业务需要,对于没有成功处理的消息,我们需要把消息返回Broker,让消费端重新消费;


过期时间TTL:Time To Live

       RabbitMQ支持消息的过期时间,在消息发送时可以指定过期时间;
       RabbitMQ同事还支持队列的过期时间,从消息加入队列开始计时,只要超过了队列配置的超时时间,那么 就自动清除消息;

  • 设置方式
		AMQP.BasicProperties properties = new AMQP.BasicProperties.Builder()
				.deliveryMode(2)
				.contentEncoding("UTF-8")
				.expiration("10000")   // 设置过期时间
				.headers(headers)
				.build();
		Map<String, Object>  map = new HashMap<String, Object>();
        map.put("x-message-ttl",6000);
        channel.queueDeclare(queueName, durable, exclusive, autoDelete, map);


展开阅读全文

没有更多推荐了,返回首页