• [转载] 分布式消息队列的设计和使用


    转载自http://blog.csdn.net/tenfyguo/article/details/7453355

    在系统架构设计中,我们有时会用到消息队列,但对对应为什么需要用到消息队列,消息队列的引入是否对架构设计有更多的好处方面,我们是否有足够的认识?

    是否存在为了用消息队列而引入呢?所以这里我们需要非常明确我们的架构目标,一般来说,消息队列能够提供以下几个方面的帮助:

    1,保证消息的传递;

    如果发送消息时接收者不可用,消息队列会保留消息,直到成功地传递它;

    2,提供异步的通信协议;

    消息的发送者将消息发送到消息队列后可以立即返回,不用等待接收者的响应,消息会被保存在队列中,直到接收者取出它;

    3,解耦;

    只要消息格式不变,即使接收者的接口、位置、或者配置改变,也不会给发送者带来任何改变;
    而且,消息发送者无需知道消息接收者是谁,使得系统设计更清晰;

    相反的,例如,远程过程调用(RPC)或者服务间通过socket建立连接,如果对方接口改变了或者对方ip、端口改变了,那么另一方需要改写代码或者改写配置;

    4,提供路由;

    发送者无需与接收者建立连接,双方通过消息队列保证消息能够从发送者路由到接收者,甚至对于本来相互网络不通的两个服务,也可以提供消息路由。

    细节方面的关注:

    1,支持并发模式和顺序模式
       顺序模式:
       消息接收后,在消息接收者来主动删除这条消息之前,队列中的其他消息不可被接收。这样保证应用在一个任务完成后再处理下一个任务,提供了强顺序性
       
       并发模式:
       消息被接收后,消息接收者主动删除前,队列的下一个消息仍可被其他应用接收,且可以一直并发获取下一个没有被接收的消息。
       如果消息被接收后持久(该时间可配)不被删除,则认为消息的原接收者处理失败,消息重新可见,
       可被其他应用再次接收(此特性为容错处理,“接收顺序队列消息”的功能也具备该特性)。
       
    2,短暂锁模式:
       一个消息不会同时被多个服务接收,这是通过针对消息的短暂锁来保证的,消息的接收者可以指定消息被锁定的时间,
       如果接收者处理完消息需要主动将消息显示删除,如果接收者处理消息失败了,那么另一个服务可以在这个消息的锁失效后重新获得这个消息。

  • 相关阅读:
    【Example】C++ 标准库智能指针 unique_ptr 与 shared_ptr
    【小记】腾讯云 Linux 虚拟机如何正确修改 hosts 文件
    【Example】C++ 接口概念讲解及例子演示
    Hudi编译(0.10.1版本)
    通过Spark读写Hudi
    Hudi数据管理
    Hudi数据写操作流程
    Hudi核心概念(时间轴、文件管理、索引)
    Hudi初始
    通过Spark操作Hudi(增、删、改、查、增量查)
  • 原文地址:https://www.cnblogs.com/scott19820130/p/4809756.html
Copyright © 2020-2023  润新知