zoukankan      html  css  js  c++  java
  • 分布式消息队列的设计和使用

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

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

    1,保证消息的传递;

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


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

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


    3,解耦;

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

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


    4,提供路由;

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


    细节方面的关注:

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

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

  • 相关阅读:
    DNS欺骗&嗅探监听
    linux下的ARP攻击(kali)
    隐匿攻击
    跨边界传输之反弹shell
    跨边界传输之内网代理
    跨边界传输之端口转发
    权限维持
    内网提权-服务篇
    内网提权-系统篇
    Laxcus大数据管理系统2.0(14)- 后记
  • 原文地址:https://www.cnblogs.com/flyingMonkey/p/4359246.html
Copyright © 2011-2022 走看看