原文:本文出自 “峰云,就她了。”  http://rfyiamcool.blog.51cto.com/1030776/1131271

为什么要使用消息队列

用我的话来说, 队列特点是先进先出,在任务调度时,有时候需要保证先进入的任务先执行,所以需要使用队列。

下面这段话来自VMWare的网站,个人觉得关于消息队列的作用的概括简明扼要,遂摘录至此:

现 代的互联网应用大量地使用了消息队列(Messaging)。消息队列不仅被用于系统内部组件之间的通信,同时也被用于系统跟其它服务之间的交互。消息队 列的使用可以增加系统的可扩展性、灵活性和用户体验。非基于消息队列的系统,其运行速度取决于系统中最慢的组件的速度(注:短板效应)。而基于消息队列可 以将系统中各组件解除耦合,这样系统就不再受最慢组件的束缚,各组件可以异步运行从而得以更快的速度完成各自的工作。

【更新2012-6-28】

刚知道原来虎扑网也使用了消息队列(RabbitMQ),来看看他们的观点:

消息队列能够将业务逻辑解耦,调用方只需要下达命令而不用等待整个逻辑执行完毕。除此之外消息队列也可以抑制性能波峰的产生,在瞬时业务增长产生时保持性能曲线的平滑

【更新2012-6-29】

博文“使用django+celery+RabbitMQ实现异步执行”中展示了一个消息队列的典型应用:

发 帖之后只需给队列发送一条消息, 告诉队列“我发帖子了”,然后把发帖的结果返回给用户。 这时另一个叫做worker的进程会取出这条消息并执行那100条INSERT查询。这样,推送通知的操作在后台异步执行, 用户就能立即看到发帖结果。更精彩的是,可以运行多个worker实现分布式,多繁重的任务都不在话下了。

在ptyhon中,可以用下ztq,这个我没有用,对于我来说还是复杂点~

ZTQ:Z Task Queue

https://github.com/everydo/ztq

在php中的应用

     入队操作

     $redis = new Redis();

     $redis->connect('127.0.0.1',6379);

     while(True){

     try{

     $value = 'value_'.date('Y-m-d H:i:s');

     $redis->LPUSH('key1',$value);

     sleep(rand()%3);

     echo $value."\n";

     }catch(Exception $e){

     echo $e->getMessage()."\n";

     }

     }

     出队操作

     $redis = new Redis();

     $redis->pconnect('127.0.0.1',6379);

     while(True){

     try{

     echo $redis->LPOP('key1')."\n";

     }catch(Exception $e){

     echo $e->getMessage()."\n";

     }

     sleep(rand()%3);

     } 

我的python应用

     入队列

     #!/usr/bin/env python  

     import time  

     from redis import Redis  

     redis = Redis(host='127.0.0.1', port=6379)  

     while True:  

     now = time.strftime("%Y/%m/%d %H:%M:%S")  

     redis.lpush('test_queue', now)  

     time.sleep(1)  
#!/usr/bin/env python  

import sys  

from redis import Redis  

redis = Redis(host='127.0.0.1', port=6379)  

while True:  

res = redis.rpop('test_queue')  

if res == None:  

pass  

else:  

print str(res) 

最新文章

  1. CentOS 安装 gcc-c++
  2. ConcurrentDictionary线程不安全么,你难道没疑惑,你难道弄懂了么?
  3. 细说Cookie
  4. adb shell使用
  5. vue 2.0
  6. SVN-Server搭建及配置
  7. jTemplate —— 基于jQuery的javascript前台模版引擎
  8. SSL协议运行机制
  9. 山东省第四届ACM省赛
  10. MySQL - 定时备份
  11. 总结Selenium自动化测试方法(四)WebDriver常用的操作
  12. Eclipse下PHP开发 插件安装
  13. Linux安装程序Anaconda分析
  14. IOC设计模式初步了解(day02)
  15. 公布windows的"Universal Apps" Unity3D游戏
  16. Android编程获取网络连接状态及调用网络配置界面
  17. 关于Class对象、类加载机制、虚拟机运行时的内存布局的全面解析和推测
  18. Spring boot配置logback
  19. C#面试题(转载)
  20. U3D学习10——关节和射线检测

热门文章

  1. php字符串算术表达式计算
  2. iOS private-api-checker私有API检测
  3. jQuery异步请求模拟IE登录网站
  4. hadoop基础学习---数据管理策略
  5. ASP.NET的用户控件
  6. Facebook开源技术识别网购评论
  7. tiny4412 linux+qtopia nfs网络文件系统的挂载
  8. Navicat无法启动,提示无法启动程序,因为计算机中丢失MSVCP140.dll
  9. 怎么下载tomcat的其他版本
  10. Maven 环境变量设置