消息队列
文章平均质量分 70
酱学编程
软件设计师,系统架构师
展开
-
消息队列-保证消息的可靠性
消息消费成功,事务已经提交,ack时,机器宕机。导致没有ack成功,Broker 的消息重新由 unack 变为 ready,并发送给其他消费者。做好容错方法 (try-catch),发送消息可能会网络失败,失败后要有重试机制,可记录到数据库,采用定期扫描重发的方式。此时Broker尚未持久化完成,宕机。成功消费,ack时宕机,消息由unack变为ready,Broker又重新发送。做好定期重发,如果消息没有发送成功,定期去数据库扫描未成功的消息进行重发。消息消费失败,由于重试机制,自动又将消息发送出去。原创 2024-06-16 18:16:57 · 347 阅读 · 0 评论 -
消息队列-RabbitMQ-延时队列实现
DLX,全称为Dead-Letter-Exchange,死信交换机,死信邮箱。当消息在一个队列中变成死信之后,它能重新发送到另外一个交换器中,这个交换器就是DLX,绑定DLX的队列就称为死信队列。● 消息被拒(Basic.Reject/Basic.Nack)且requeue = false。● 消息TTL(消息的存活时间)过期。● 队列满了,无法再添加。原创 2024-06-16 18:06:57 · 524 阅读 · 0 评论 -
消息队列-Rabbit运行机制
RabbitMQ 中通过 Binding(绑定) 将 Exchange(交换器) 与 Queue(消息队列) 关联起来,在绑定的时候一般会指定一个 BindingKey(绑定建) ,这样 RabbitMQ 就知道如何正确将消息路由到队列了,如下图所示。Exchange(交换器) 用来接收生产者发送的消息并将这些消息路由给服务器中的队列中,如果路由不到,或许会返回给 Producer(生产者) ,或许会被直接丢弃掉。RabbitMQ 的生产者生产消息并最终投递到队列中,消费者可以从队列中获取消息并消费。原创 2024-06-16 17:36:56 · 1250 阅读 · 0 评论 -
消息队列-RabbitMQ概述
RabbitMQ 是一个在 AMQP(Advanced Message Queuing Protocol )基础上实现的,可复用的企业消息系统。它可以用于大型软件系统各个模块之间的高效通信,支持高并发,支持可扩展。它支持多种客户端如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP 等,支持 AJAX,持久化,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。原创 2024-06-16 17:29:11 · 709 阅读 · 0 评论 -
消息队列-应用
除了这三点之外,消息队列还有其他的一些应用场景,例如实现分布式事务、顺序保证和数据流处理。如果在面试的时候你被面试官问到这个问题的话,一般情况是你在你的简历上涉及到消息队列这方面的内容,这个时候推荐你结合你自己的项目来回答。原创 2024-06-16 17:21:35 · 453 阅读 · 0 评论 -
消息队列-概述-JMS和AMQP
一条消息只能被一个消费者使用,未被消费的消息在队列中保留直到被消费或超时。比如:我们生产者发送 100 条消息的话,两个消费者来消费一般情况下两个消费者会按照消息发送的顺序各自消费一半(也就是你一个我一个的消费。,是应用层协议的一个开放标准,为面向消息的中间件设计,兼容 JMS。JMS(JAVA Message Service,java 消息服务)是 Java 的消息服务,JMS 的客户端之间可以通过 JMS 服务进行异步的消息传输。发布者发布一条消息,该消息通过主题传递给所有的订阅者。原创 2024-06-16 17:08:47 · 374 阅读 · 0 评论 -
消息队列-概述-什么是消息队列
我们可以把消息队列看作是一个存放消息的容器,当我们需要使用消息的时候,直接从容器中取出消息供自己使用即可。由于队列 Queue 是一种先进先出的数据结构,所以消费消息时也是按照顺序来消费的。参与消息传递的双方称为 生产者 和 消费者 ,生产者负责发送消息,消费者负责处理消息。我们知道操作系统中的进程通信的一种很重要的方式就是消息队列。我们这里提到的消息队列稍微有点区别,更多指的是各个服务以及系统内部各个组件/模块之前的通信,属于一种 中间件。原创 2024-06-16 17:07:44 · 404 阅读 · 0 评论