消息队列概念

消息队列技术是分布式应用间交换信息的一种技术。消息队列可以驻留在内存或者磁盘上,队列存储消息直到它们被应用程序读走。通过消息队列,应用程序可以独立的执行,它们不需要知道彼此的位置,或者在继续执行前不需要等待接受程序接收此消息。

消息队列相关的概念有:

  1. 消息(Message)
    消息是MQ中最小的概念,本质上就是一段数据,它能被一个或者多个应用程序所理解,是应用程序之间传递的信息载体。
  2. 队列(Queue)
    1. 本地队列

      本地队列按照功能可划分为初始化队列,传输队列,目标队列和死信队列。

      初始化队列用作消息触发功能。

      传输队列只是暂存待传的消息,条件许可的情况下,通过管道将消息传送到其他的队列管理器。

      目标队列是消息的目的地,可以长期存放消息。

      如果消息不能送达目标队列,也不能再路由出去,则被自动放入死信队列保存。

    2. 别名队列&远程队列
      用来指定远端队列管理器的队列。使用了远程队列,程序就不需要知道目标队列的位置。
    3. 模型队列
      模型队列定义了一套本地队列的属性结合,一旦打开模型队列,队列管理器会按照这些属性动态地创建出一个本地队列。
  3. 队列管理器(Queue Manager)
    队列管理器是一个负责向应用程序提供消息服务的机构,如果把队列管理器比作数据库,那么队列就是其中一张表。
  4. 通道(Channel)
    通道是两个管理器之间的一种单向点对点的的通信连接,如果需要双向交流,可以建立一对通道。

消息队列的主要特点是松耦合。尤其是分布式环境下的应用程序,如果需要进行数据的交换,需要结合主机间和主机内部进程间的通信知识,编写大量的代码,和应用程序本身紧紧耦合在一起,此外,还要面对应用所在的不同环境的差异。而有了消息队列中间件,分布式环境下的数据传输和交换工作就完全移交给了消息队列中间件,并让他来确保数据传输的可靠性,此外还提供独有的异步传输机制,便于和异步事务处理的应用整合。

消息队列的特点有:

  1. 可靠传输:消息中间件确保不同环境下数据传输不丢失
  2. 不重复传输:断点续传
  3. 异步传输:发送和接收方不必同时在线
  4. 消息驱动:主动通知消息给接收方
  5. 支持事务

消息队列适用的场景有:

  1. 消息通道:客户端和服务器端建立一条通道,完成数据的可靠交互
  2. 消息总线:通过服务总线将不同服务串联起来,完成不同服务间的数据传输
  3. 消息路由:根据指定的规则将不同的消息路由到不同的队列中去
  4. 发布订阅:消息发布者向一个Topic发送一条消息后,所有的订阅者都会接收到它

ZeroMQ

ZeroMQ(ZMQ)号称史上最快中间件。它对socket通信进行了封装,使得我们不需要写一行socket函数调用就能完成复杂的网络通信。和一般意义上的消息队列产品不同的是,它没有消息队列服务器,而更像是一个网络通信库。使用它能够轻松的完成多个node之间的传输。

ZMQ有三个基本通信模型:

  1. 请求应答(Request-Reply): client端发起请求,server端响应请求
  2. 发布订阅(Publisher-Subscriber):发布者发布指定主题的消息,订阅端订阅感兴趣的主题
  3. Parallel Pipeline: 消息经过分发到各个节点,处理之后再进行汇总

参考资料:

【MQ消息队列】:http://blog.csdn.net/wxyfighting/article/details/8866437

【ZeroMQ的学习和研究】:http://www.searchtb.com/2012/08/zeromq-primer.html

【ZMQ官网】:http://zeromq.org

消息队列ZeroMQ的更多相关文章

  1. zeromq的安装,部署(号称最快的消息队列,消息中间件)

    1:Storm作为一个实时处理的框架,产生的消息需要快速的进行处理,比如存在消息队列ZeroMQ里面. 由于消息队列ZeroMQ是C++写的,而我们的程序是运行在JVM虚拟机里面的.所以需要jzmq这 ...

  2. 消息队列性能对比——ActiveMQ、RabbitMQ与ZeroMQ(译文)

    Dissecting Message Queues 概述: 我花了一些时间解剖各种库执行分布式消息.在这个分析中,我看了几个不同的方面,包括API特性,易于部署和维护,以及性能质量..消息队列已经被分 ...

  3. 消息队列RabbitMq、ActiveMq、ZeroMq、kafka之间的比较

    MQ框架非常之多,比较流行的有RabbitMq.ActiveMq.ZeroMq.kafka.这几种MQ到底应该选择哪个?要根据自己项目的业务场景和需求.下面我列出这些MQ之间的对比数据和资料. 第一部 ...

  4. 消息队列&Celery&RabbitMQ&zeromq

    一.消息队列 什么是消息队列? “消息队列”是在消息的传输过程中保存消息的容器. “消息”是在两台计算机间传送的数据单位.消息可以非常简单,例如只包含文本字符串:也可以更复杂,可能包含嵌入对象. 消息 ...

  5. 消息队列库——ZeroMQ

    消息队列库——ZeroMQ ZeroMQ(简称ZMQ)是一个基于消息队列的多线程网络库,其对套接字类型.连接处理.帧.甚至路由的底层细节进行抽象,提供跨越多种传输协议的套接字. ZMQ是网络通信中新的 ...

  6. 关于消息队列的使用----ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ

    一.消息队列概述消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构.目前使用较多的消息队列有ActiveMQ,RabbitM ...

  7. RabbitMQ,Apache的ActiveMQ,阿里RocketMQ,Kafka,ZeroMQ,MetaMQ,Redis也可实现消息队列,RabbitMQ的应用场景以及基本原理介绍,RabbitMQ基础知识详解,RabbitMQ布曙

    消息队列及常见消息队列介绍 2017-10-10 09:35操作系统/客户端/人脸识别 一.消息队列(MQ)概述 消息队列(Message Queue),是分布式系统中重要的组件,其通用的使用场景可以 ...

  8. Netty构建分布式消息队列(AvatarMQ)设计指南之架构篇

    目前业界流行的分布式消息队列系统(或者可以叫做消息中间件)种类繁多,比如,基于Erlang的RabbitMQ.基于Java的ActiveMQ/Apache Kafka.基于C/C++的ZeroMQ等等 ...

  9. Redis 做消息队列

    一般来说,消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式.利用redis这两种场景的消息队列都能够实现.定义: 生产者消费者模式:生产者生产消息放到队列里,多个消费者同时监听队列, ...

随机推荐

  1. 记开发个人图书收藏清单小程序开发(十)DB开发——新增图书信息

    昨晚完成了Web端新增图书信息的功能,现在就差DB的具体实现了. 因为我把Book相关的信息拆分的比较多,所以更新有点小麻烦. 首先,我需要创建一个Book Type的Matter: 然后,将图片路径 ...

  2. HTML--<frameset>標簽

    <html><frameset rows="20,80"> <frame src="/example/html/frame_a.html&q ...

  3. [翻译] M13ProgressSuite

    M13ProgressSuite https://github.com/Marxon13/M13ProgressSuite A set of classes used to display progr ...

  4. POST请求的forHTTPHeaderField

    POST请求的forHTTPHeaderField 也许你的iOS项目中使用了AFNetworking2.0,或者是ASIHTTPRequest,对于http中POST请求的操作,你用了他们提供的现成 ...

  5. 定制选择范围的按钮RangeButton

    定制选择范围的按钮RangeButton 效果: 源码: RangeButton.h 与 RangeButton.m // // RangeButton.h // PulsingView // // ...

  6. Microsoft Teams 版本与语音落地介绍

    我亲爱的小伙伴们,失踪人口回归啦~~ 今天和大家聊的是Microsoft Teams,Teams作为协作的集大成者,可以实现skype for Business的所有功能,还可以在teams里集合Of ...

  7. 我的Java之旅——答答租车系统的改进

    之前的答答租车系统虽然可以实现项目的要求,但是没有用Java面向对象,今天用面向对象的三大特性封装.继承和多态来改进原来的代码.题目和之前的代码参考上篇博客,这里不再述说. 改进后的代码: Vehic ...

  8. arcgis 10.1 导入数据到oracle 发布地图服务

    机器配置说明 数据库服务器 系统:linux 软件:oracle 11G 64位 Arcgis server服务器 系统:win7 专业版 软件:arcgis server 10.1.win64_11 ...

  9. kukubeadm 1.6.1 + docker1.2.6 安装问题

    kubeadm init --apiserver-advertise-address=192.168.20.229 --pod-network-cidr=10.244.0.0/16 kubelet: ...

  10. Python自动化之django orm之Q对象

    Python自动化之django orm之Q对象 什么是Q对象? Encapsulates filters as objects that can then be combined logically ...