本文将使用Python(pika 0.9.8)实现从Producer到Consumer传递数据”Hello, World“。

首先复习一下上篇所学:RabbitMQ实现了AMQP定义的消息队列。它实现的功能”非常简单“:从Producer接收数据然后传递到Consumer。它能保证多并发,数据安全传递,可扩展。

和任何的Hello world一样,它们都不复杂。我们将会设计两个程序,一个发送Hello world,另一个接收这个数据并且打印到屏幕。
      整体的设计如下图:

1. 环境配置

RabbitMQ 实现了AMQP。因此,我们需要安装AMPQ的library。幸运的是对于多种编程语言都有实现。我们可以使用以下lib的任何一个:

  • py-amqplib
  • txAMQP
  • pika

在这里我们将使用pika. 可以通过 pip 包管理工具来安装:

$ sudo pip install pika==0.9.8

这个安装依赖于pip和Git-core。

  • On Ubuntu:

    $ sudo apt-get install python-pip git-core
    

  • On Debian:

    $ sudo apt-get install python-setuptools git-core
    $ sudo easy_install pip
    

  • On Windows:To install easy_install, run the MS Windows Installer for setuptools

    > easy_install pip
    > pip install pika==0.9.8
    

    2. Sending

    第一个program send.py:发送Hello world 到queue。正如我们在上篇文章提到的,你程序的第一句话就是建立连接,第二句话就是创建channel:

    #!/usr/bin/env python
    import pika  connection = pika.BlockingConnection(pika.ConnectionParameters(  'localhost'))
    channel = connection.channel() 

    创建连接传入的参数就是RabbitMQ Server的ip或者name。

    关于谁创建queue,上篇文章也讨论过:Producer和Consumer都应该去创建。

    接下来我们创建名字为hello的queue:

    channel.queue_declare(queue='hello')  

    创建了channel,我们可以通过相应的命令来list queue:

    $ sudo rabbitmqctl list_queues
    Listing queues ...
    hello    0
    ...done.  

    现在我们已经准备好了发送了。
    从架构图可以看出,Producer只能发送到exchange,它是不能直接发送到queue的。现在我们使用默认的exchange(名字是空字符)。这个默认的exchange允许我们发送给指定的queue。routing_key就是指定的queue名字。

    channel.basic_publish(exchange='',  routing_key='hello',  body='Hello World!')
    print " [x] Sent 'Hello World!'"  

    退出前别忘了关闭connection。

    connection.close()  

    3. Receiving

    第二个program receive.py 将从queue中获取Message并且打印到屏幕。

    第一步还是创建connection。第二步创建channel。第三步创建queue,name = hello:

    channel.queue_declare(queue='hello')  

    接下来要subscribe了。在这之前,需要声明一个回调函数来处理接收到的数据。

    def callback(ch, method, properties, body):  print " [x] Received %r" % (body,) 

    subscribe:

    channel.basic_consume(callback,  queue='hello',  no_ack=True)  

    最后,准备好无限循环监听吧:

    print ' [*] Waiting for messages. To exit press CTRL+C'
    channel.start_consuming() 

    4. 最终版本

    send.py:

    #!/usr/bin/env python
    import pika  connection = pika.BlockingConnection(pika.ConnectionParameters(  host='localhost'))
    channel = connection.channel()  channel.queue_declare(queue='hello')  channel.basic_publish(exchange='',  routing_key='hello',  body='Hello World!')
    print " [x] Sent 'Hello World!'"
    connection.close()  

    receive.py:

    #!/usr/bin/env python
    import pika  connection = pika.BlockingConnection(pika.ConnectionParameters(  host='localhost'))
    channel = connection.channel()  channel.queue_declare(queue='hello')  print ' [*] Waiting for messages. To exit press CTRL+C'  def callback(ch, method, properties, body):  print " [x] Received %r" % (body,)  channel.basic_consume(callback,  queue='hello',  no_ack=True)  channel.start_consuming() 

    5. 最终运行

    先运行 send.py program:

    $ python send.py
    [x] Sent 'Hello World!'

    send.py 每次运行完都会停止。注意:现在数据已经存到queue里了。接收它:

    $ python receive.py
    [*] Waiting for messages. To exit press CTRL+C
    [x] Received 'Hello World!'  

    转载anzhsoft: http://blog.csdn.NET/anzhsoft/article/details/19570187

RabbitMQ消息队列(二):”Hello, World“相关推荐

  1. RabbitMQ学习系列二:.net 环境下 C#代码使用 RabbitMQ 消息队列

    上一篇已经讲了Rabbitmq如何在Windows平台安装,不懂请移步:RabbitMQ学习系列一:windows下安装RabbitMQ服务 一.理论: .net环境下,C#代码调用RabbitMQ消 ...

  2. 大数据互联网架构阶段 QuartZ定时任务+RabbitMQ消息队列

    QuartZ定时任务+RabbitMQ消息队列 一 .QuartZ定时任务解决订单系统遗留问题 情景分析: 在电商项目中 , 订单生成后 , 数据库商品数量-1 , 但是用户迟迟不进行支付操作 , 这 ...

  3. 消息队列——RabbitMQ消息队列集群

    RabbitMQ消息队列集群 消息队列/中间件 RabbitMQ详解 RabbitMQ单机部署 RabbitMQ集群部署 消息队列/中间件 一.前言 在我们秒杀抢购商品的时候,系统会提醒我们稍等排队中 ...

  4. php中rabbitmq消息乱码,PHP实现RabbitMQ消息队列(转)

    本篇文章给大家带来的内容是关于PHP和RabbitMQ实现消息队列的完整代码,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 先安装PHP对应的RabbitMQ,这里用的是 php_a ...

  5. RabbitMQ消息队列常见面试题总结

    1.什么是消息队列: 1.1.消息队列的优点: (1)解耦:将系统按照不同的业务功能拆分出来,消息生产者只管把消息发布到 MQ 中而不用管谁来取,消息消费者只管从 MQ 中取消息而不管是谁发布的.消息 ...

  6. RabbitMQ消息队列(一)《Java-2021面试谈资系列》

    RabbitMQ RabbitMQ消息队列 一.中间件 1.什么是中间件 2.中间件技术及架构概述 3.消息中间件 1.消息中间件的分布式架构 2.消息中间件使用场景 3.常见的消息中间件 4.消息中 ...

  7. RabbitMQ消息队列(十三)-VirtualHost与权限管理

    像mysql有数据库的概念并且可以指定用户对库和表等操作的权限.那RabbitMQ呢?RabbitMQ也有类似的权限管理.在RabbitMQ中可以虚拟消息服务器VirtualHost,每个Virtua ...

  8. rabbitMQ消息队列 – 面板介绍及简单demo

    首先rabbit安装好之后,运维会给一个控制面板. 默认账号密码为guest 登入以后可以看到具体界面. 在此鸣谢百度翻译给予的大力支持.. ###写一个简单的demo 编写之前..虽然说可以直接用底 ...

  9. RabbitMQ消息队列(七):适用于云计算集群的远程调用(RPC)

    在云计算环境中,很多时候需要用它其他机器的计算资源,我们有可能会在接收到Message进行处理时,会把一部分计算任务分配到其他节点来完成.那么,RabbitMQ如何使用RPC呢?在本篇文章中,我们将会 ...

  10. (四)RabbitMQ消息队列-服务详细配置与日常监控管理

    (四)RabbitMQ消息队列-服务详细配置与日常监控管理 原文:(四)RabbitMQ消息队列-服务详细配置与日常监控管理 RabbitMQ服务管理 启动服务:rabbitmq-server -de ...

最新文章

  1. 高性能IO设计中的Reactor模式与Proactor模式
  2. kmeans设置中心_kmeans聚类与支持向量机(1)
  3. 秒懂词向量Word2vec的本质
  4. 保存模型后无法训练_模型构建到部署实践
  5. Angular2项目中浏览器拦截弹出窗口的解决方法
  6. Spring AOP 五大通知类型
  7. python使用BytesIO或StringIO读写文件
  8. 【hexo】fluid中文乱码问题解决
  9. 计算机学院军训横幅,2020大学军训横幅标语句子精选100句
  10. 解决谷歌浏览器Chrome不能播放央视新闻视频的问题
  11. 串口调试软件,功能强大,侦测,拦截,逆向分析串口通汛协议
  12. biogeme-nest_logit-cnblog
  13. 计算机类核心期刊排名(国内)
  14. 定风波·莫听穿林打叶声
  15. ubuntu使用记录(3)ubuntu 防火墙开放端口(开启ssh)
  16. xshow-1. 项目简介
  17. JAVA体育用品在线商城系统-springboot【数据库设计、源码、开题报告】
  18. 使用联机搜索求解Wumpus World
  19. 01-JVM(上)-JVM与JAVA体系结构
  20. limma差异分析谁和谁比很重要吗

热门文章

  1. 性能测试应该怎么做?
  2. 用JavaScript玩转计算机图形学(二)基本光源
  3. 《Effective C++》读书笔记(第一部分)
  4. 插值法:拉格朗日插值、牛顿插值
  5. 用友互联网战略的变与不变
  6. JavaScript 实现数组的foreach
  7. Linux网络编程基础_6_应用层(下)--E-mail,WWW(大结局)
  8. JavaScript 如果拥有多线程能力会怎样?
  9. H264 Profile对比分析
  10. SDL介绍和简单实用