当前位置:首页 > 开发 > 互联网 > 正文

mysql 来模拟消息队列

发表于: 2014-06-19   作者:风起云涌57   来源:转载   浏览次数:
摘要: 队列跟栈一样,是一种线性的表结构,但它是一种FIFO(先进先出)的数据结构,后断插入操作,前端删除操作。 在大数据量和高并发的WEB应用里,队列工具可以大展拳脚。 下面以社区SNS好友信息动态分发为例,讲解简单的队列在消息调度机制中的实现跟使用。 如果莫个人发布了一条动态,进行入库和网络分发的过程都需要频繁不间断的读写数据库。这样就给服务器照成了很大的压力,可以采用一种异步处理的思想来解决问
队列跟栈一样,是一种线性的表结构,但它是一种FIFO(先进先出)的数据结构,后断插入操作,前端删除操作。
在大数据量和高并发的WEB应用里,队列工具可以大展拳脚。
下面以社区SNS好友信息动态分发为例,讲解简单的队列在消息调度机制中的实现跟使用。
如果莫个人发布了一条动态,进行入库和网络分发的过程都需要频繁不间断的读写数据库。这样就给服务器照成了很大的压力,可以采用一种异步处理的思想来解决问题。消息发送很简单,动态产生以后,往DATABASE里头插入一条记录即可,消息的接受过程是采用定时轮询的机制。
  我们用数据库模拟消息队列,新建一个消息对列表,此处略去 ...只简单说明一下就行,字段是:消息生产者的UID,消息内容DATA,消息类别TOPIC,状态信息 static等等,消息队列表完毕,然后就需要一个队消息队列进行轮询调度的程序,这里通过两个存储过程跟定时器来实现。

下面就是一个消息的分发过程(存储过程实现的)
  DROP PROCEDEURE IF EXISTS 'proc_msg_rece_friend';
DELIMITER //
CREARE PROCEDURE 'pro_msg_rece_friend'()
BEGIN
//当出现SQL错误的时候,中断程序执行过程,跳出存储过程,并启用事务回滚
DECLARE CONTIUNE HANDLER FOR SQL EXCEPTION ROLLBACK;
START TRANSACTION;
INSERTINTO tablename
select *,*,*,*from(select * from * where)temp where *=*;
UPDATE tablename set * =1 where *;
COMMIT;
END //

下面就是调度程序,来实现分发策略,合适分发跟频率等。可以利用mysql 的event实现调度,比如5分钟调用一次存储过程等等,将队列 的数据进行分发。下面是消息接受后的清除器的event 。
DROP EVENT IF EXISTS 'event_msg_clean';
//ON SCHEDULE 计划任务,有两种设定计划任务的方式:
//1. AT 时间戳,用来完成单次的计划任务。
//2. EVERY 时间(单位)的数量时间单位[STARTS 时间戳] [ENDS时间戳],用来完成重复的//计划任务。
//ON COMPLETION参数表示"当这个事件不会再发生的时候",即当单次计划任务执行完毕后或
//当重复性的计划任务执行到了ENDS阶段。而PRESERVE的作用是使事件在执行完毕后不会被
//Drop掉,建议使用该参数,以便于查看EVENT具体信息。
//[ENABLE | DISABLE]
//参数Enable和Disable表示设定事件的状态。Enable表示系统将执行这个事件。Disable表示//系统不执行该事件。

CREATE EVENT 'event_msg_clean' ON SCHEDULE EVERY 1 HOUR STARTS '2014-1-1 00:00:00' ON COMPLETION NOT PRESERVE ENABLE DO delete from ens_enentqueue(表名) where status =1 //

注:当消息量特别大时,可把消息放入内存中,或进行集群分发,向金山公司的HTTPSQL集合了NOSQL技术,得到了更快的数度和更高的并发量,开源的产品有ZEROMQ,提供了丰富的API,此外,JMS也是一个简单高速,功能强大的消息队列。好,就讨论到这里。






mysql 来模拟消息队列

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
MSMQ(消息队列)续 在上一篇我简单介绍了MSMQ的相关概念,本篇将以代码说明 Message Message是MSMQ的
一 应用场景 有很多业务, 客户端和内网都要进行数据传输和交换, 现有架构中, 客户端不能直接访问内
最近在公司调研消息中间件,参考metaq设计总结了需要focus的点 1 项目背景 消息队列作为中间件核心
NetMQ 是 ZeroMQ的C#移植版本。 ZeroMQ是一个轻量级的消息内核,它是对标准socket接口的扩展。它提
ActiveMQ消息队列介绍 ActiveMQ是一个开源兼容Java Message Service (JMS) 1.1面向消息的中件间. 来
3.1 概述 消息队列结构: struct msqid_ds { struct ipc_perm msg_perm; //权限结构 struct msg *ms
MQ的基本概念: 1) 队列管理器 队列管理器是MQ系统中最上层的一个概念,由它为我们提供基于队列的消
Android是参考Windows的消息循环机制来实现Android自身的消息循环的。 Android通过Looper、Handler
Android是参考Windows的消息循环机制来实现Android自身的消息循环的。 Android通过Looper、Handler
转自:http://blog.csdn.net/yfkiss/article/details/17348693 代码案例 http://blog.csdn.net/gang
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号