消息队列 (Message Queue)

消息队列

What

消息队列

  • 是消息的队列;
  • 是消息的临时缓冲;
  • 是发布/订阅模式的兄弟;
  • 在多个进程/线程间实现异步通讯模式

Why

消息队列在多个进程/线程中实现了异步通讯模式。

这里我们先介绍下同步消息处理。对于同步消息处理,消息的消费者接受消息,处理消息,再接受下一个消息,这会延迟消息的接收直到上一个消息被处理完成,如果消息的处理速度很慢,消息的生产者必须在上一个消息的处理期间等待,直到其完成才能推送下一个消息,这会大大降低消息生产者的效率。

消息队列实现异步消息处理。对于异步消息处理,消息的产生和消息的处理是异步的。消息的生产者将消息暂时放入队列中,然后就可以继续处理其他任务了,而不是阻塞在原地等待消息被处理;消息的消费者会在合适的时间 (比如空闲的时候) 从队列中取出消息进行处理。

消息队列为消息提供缓存,确保消息会被消费者接收。

消息队列还能提供流控制,平衡生产和消费的速度。当消息队列到达高水位 (HWM) 时,不再接收消息进队,并报告给调用方,使其降低消息入队的速率。让消息的消费者能处理队列中的消息,不至于堆积。

When

Where

消息队列常用于进程间通讯或同一进程的线程间通讯。

Who

How

消息队列可能存在隐式或显式的对消息大小的限制以及队列中存在的消息的数量的限制

有些消息队列在多个操作系统和多个应用间传递消息,这样的消息队列一般提供恢复的机制以避免因为程序或系统崩溃导致的消息丢失。

消息传递的准确语义通常有很多选项,包括:

  • 持久性 – 消息可能存储在内存中,写到磁盘中,或者甚至上传到 DBMS 中,如果对可靠性的需求表明需要更多的资源密集型解决方案的话。
  • 安全策略 – 哪个应用应该访问这些消息?
  • 消息清除策略 – 队列或消息可能有“生命周期”。
  • 消息过滤 – 一些系统支持过滤数据,所以订阅者可能仅能看到符合预先指定的感兴趣的标准的消息。
  • 递交策略 – 是否需要保证消息被递交至少一次还是不超过一次。
  • 路由策略 – 在一个有很多队列服务器的系统中,哪个服务器应该接收消息或队列的消息?
  • 批处理策略 – 消息应当被立刻递交嘛?或者系统应该等待一会以尝试一次递交多条消息?
  • 排队标准 – 何时消息被认为是 “已排队的”?当一个队列持有它的时候?或者当它至少被转发到一个远程队列中?或者被转发到所有队列中?
  • 接收通知 – 发布者可能需要知道何时一些或所有的订阅者已经接收到该消息。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值