`
san_yun
  • 浏览: 2639791 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

消息队列简单介绍

 
阅读更多

为什么要使用队列系统?

  • 因为一些任务需要在后台执行,让调用者不需要等待其完成就能返回。比如给用户发送邮件,短信之类的操作。
  • 还有就是一个大系统内部的通信,可能会采用队列的方式传递消息。

对队列系统有哪些要求?

  • 应对任务处理者:通常会有一些进程从队列里获取消息进行处理,而且通常这些进程都会启动很多个。所以队列需要能够处理并发的数据请求操作。
  • 原子性:队列中的元素只能被取出一次,必须保证每次读取队列中元素进行操作和删除这个元素是原子性的。
  • 快速:队列系统要能够快速地处理元素的写入和读取操作。
  • 垃圾回收能力:如果一个任务处理到一半死掉了,那么必须能有方法监测到并且将这个任务重新放入队列中。


redis VS mongoDB

对于原子性,RabbitMQ通过对consume/ack协议的支持来实现。而由于MongoDB只支持对单个文档的原子性个性,所以你可以使用其findAndModify 命令 ,简单语法如下:

db.runCommand( { findAndModify : collection, { options } } )

这里的options是一个数组,其包含下面一些元素:

 

 

其它的一些考虑

除了上面说到的速度,原子性等特性,对于一个队列系统,还是有一些其它方面需要考虑的。

  • 容错性:MongoDB的replica sets 架构提供了整体的高可用性。当其被用作队列时,也同样继承了这一我。而RabbitMQ并没有内置的支持。目前在RabbitMQ 2.6.0中有相关的支持
  • 一致性:MongoDB默认会一分钟将数据flush到磁盘,但其同时提供一个默认100ms的操作日志可以增强其单机的可靠性。可以缓解宕机时数据丢失导致不一至的情况。如果你对一致性要求非常高,你也可以使用MongoDB的getLastError 命令来保证你的每次操作都写入操作日志或者磁盘上才返回成功。
  • 扩展性:我们使用capped collection 来做消息队列,所以老数据的清除是自动的。在MongoDB中可以通过sharding 方式来实现数据的横向扩展,但是sharding并不支持用于capped collection 。你可以自己选择自己需要的应用方式。
分享到:
评论

相关推荐

    消息队列的简单介绍.pdf

    消息队列是一种在消息传输过程中保存消息的容器,它允许在两台计算机之间传送消息,这些消息可以很简单,比如只包含文本字符串,也可以很复杂,如包含嵌入对象。消息队列的作用主要是异步处理、提高系统性能、降低...

    消息队列基础知识,对消息队列的简单介绍,简单的入门知识.zip

    在这个简单的入门知识中,我们将深入探讨消息队列的基本概念、工作原理以及它在实际应用中的优势。 一、消息队列的概念 消息队列是一种基于发布/订阅或生产者/消费者模型的通信机制。它允许应用程序通过发送消息而...

    消息队列RabbitMQ介绍

    2. 扩展性:当系统需要增加新的功能模块时,原有模块和消息队列之间的依赖关系简单,可以较为容易地进行水平扩展。 3. 排序保证:消息队列可以根据消息内容或者创建时间进行排序,确保消息的处理顺序。 4. 异步通信...

    Message Queue(消息队列)介绍与应用

    ### Message Queue(消息队列)介绍与应用 #### 消息处理中的主要概念 消息队列作为一种关键的技术组件,在分布式系统中发挥着重要的作用。它主要用于处理和传递数据单元(即消息),这些消息可以在简单的文本字符串...

    进程间消息队列通信机制的使用

    本篇文章将详细介绍如何使用消息队列机制来自行编写具有一定长度(大约1K左右)的消息发送和接收程序,并通过具体的代码示例来加深理解。 #### 消息队列的概念与工作原理 消息队列是由操作系统维护的一个消息列表...

    基于消息队列-MSMQ 的开发

    【基于消息队列-MSMQ的开发】 消息队列(Message Queuing,简称MSMQ)是一种在分布式系统中实现异步通信的技术。它允许应用程序在不同的时间、速度和网络条件下发送和接收消息,确保了消息的可靠传递。在ASP.NET...

    安卓的消息队列机制

    ### 安卓的消息队列机制 #### 概述 安卓平台为了有效管理和处理各种用户界面交互及后台任务,设计了一套高效的消息队列机制。这一机制主要包括消息的发送、存储、处理以及循环处理等几个核心环节。理解这些概念...

    linux消息队列进程间通信

    《Linux环境进程间通信(三):消息队列.doc》详细阐述了消息队列的使用,包括如何创建、发送、接收和控制消息队列。《Linux环境进程间通信(五):_共享内存(上).doc》则介绍了共享内存,这是一种效率极高的通信方式,...

    消息队列通信

    下面是一个简单的消息队列通信示例程序,用于演示消息队列的基本使用。 ```c #include #include #include #include #include #include #include struct msgmbuf { long msg_type; char msg_text[512]; };...

    分布式消息队列的设计与实现.pdf

    本文详细介绍了分布式消息队列的进程通信实现,对比了分布式消息队列与传统的套接字方式,并指出分布式消息队列在性能上接近套接字方式的同时,具有更好的实用性和透明性。 关键词“分布式”指出了该技术的核心概念...

    RabbitMQ实战高效部署分布式消息队列

    《RabbitMQ实战高效部署分布式消息队列》这本书主要涵盖了RabbitMQ的使用、配置以及在分布式系统中的高效部署策略。RabbitMQ是一款开源的消息中间件,基于AMQP(Advanced Message Queuing Protocol)协议,广泛应用...

    微服务SpringBoot整合Redis基于Redis的Stream消息队列实现异步秒杀下单

    首先,文章介绍了消息队列的基本概念,它是由生产者发送消息到队列,然后由消费者从队列中取出并处理消息。消息队列的主要优点是解耦和负载均衡,它可以缓解系统间的直接依赖,提高系统的响应速度和稳定性。 接着,...

    消息队列实现C_进程间通信

    ### 消息队列实现C#进程间通信 ...以上内容详细介绍了如何在C#中使用微软消息队列(MSMQ)实现进程间通信,包括创建和操作队列、发送和接收消息等核心操作。这种机制非常适合需要异步通信、高可靠性的场景。

    C#实现进程间通信(使用消息队列实现)

    在描述中提到的"做得比较简单,但是基本实现了功能"可能意味着作者实现了一个基本的消息队列通信示例,可能包含了上述的基本步骤,但可能没有涉及更复杂的功能,如并发处理、事务支持或者错误重试机制。 综上所述,...

    C#MSMQ 消息队列工具

    本篇文章将详细介绍C#编程语言中与MSMQ相关的知识点,并结合提供的“C#MSMQ 消息队列工具”进行深入探讨。 1. **MSMQ基本概念** MSMQ是一个基于标准的消息传递协议,允许应用程序在不可靠或网络不稳定的情况下可靠...

    Android_子线程创建消息队列更新UI

    Handler通常与Looper关联,Looper是一个消息循环,负责从消息队列中取出消息并分发给相应的Handler进行处理。 接着,我们看如何在子线程中创建消息队列。默认情况下,每个Android线程都有自己的Looper,但主线程的...

    PHP中利用redis实现消息队列处理高并发请求思路详解.rar

    本篇将详细介绍如何在PHP中利用Redis这一高效内存数据结构存储服务来构建消息队列,以处理高并发请求。 首先,理解消息队列的基本概念。消息队列是一种异步处理机制,它允许应用程序将任务放入队列,而无需等待其...

    最简单的队列

    在窗口编程中,队列也常用于消息处理,每个窗口系统都会有一个消息队列,存储待处理的消息,按照FIFO原则进行处理。 通过学习和实践这个简单的队列程序,初学者能够掌握数据结构的基础知识,并逐步进阶到更复杂的...

    linux消息队列.pdf

    本知识点将会详细介绍Linux消息队列的概念、工作原理、以及如何在代码中实现一个简单的消息队列。涉及到的关键概念有互斥锁(mutex)、信号量(semaphore)和环形缓冲区(ring buffer)。 首先,消息队列可以被看作...

Global site tag (gtag.js) - Google Analytics