一、前言

  在python中本身就是存在队列queue。一个是线程队列queue,另一个是进程multiprocessing中的队列Queue。

  线程queue:只用于线程之间的数据交互

  进程Queue:用于同一进程下父进程和子进程之间的数据交互,或者同属于一个父进程下的多个子进程之间的交互

二、RabbitMQ

  如果是多个进程间(不同的应用程序之间)、多个系统需要进行数据交互,那么就可以使用消息服务来解决这些问题。消息服务擅长于解决多系统、异构系统间的数据交换(消息通知/通讯)问题,你也可以把它用于系统间服务的相互调用(RPC)。RabbitMQ就是当前最主流的消息中间件之一。

  RabbitMQ的基础介绍:点击查看

  实现最简单的队列通信

  

  send端  

  1. # -*- coding: UTF-8 -*-
  2.  
  3. import pika
  4.  
  5. connection = pika.BlockingConnection(pika.ConnectionParameters(
  6. 'localhost'))
  7.  
  8. # 声明一个管道
  9. channel = connection.channel()
  10.  
  11. # 声明queue
  12. channel.queue_declare(queue='hello') # queue的名称
  13.  
  14. # n RabbitMQ a message can never be sent directly to the queue, it always needs to go through an exchange.
  15. channel.basic_publish(exchange='',
  16. routing_key='hello',
  17. body='Hello World!')
  18. print(" [x] Sent 'Hello World!'")
  19. connection.close()

  receive端  

  1. # -*- coding: UTF-8 -*-
  2.  
  3. import pika
  4.  
  5. connection = pika.BlockingConnection(pika.ConnectionParameters(
  6. 'localhost'))
  7. channel = connection.channel()
  8.  
  9. # You may ask why we declare the queue again ‒ we have already declared it in our previous code.
  10. # We could avoid that if we were sure that the queue already exists. For example if send.py program
  11. # was run before. But we're not yet sure which program to run first. In such cases it's a good
  12. # practice to repeat declaring the queue in both programs.
  13.  
  14. # 这个queue名称就是刚才send端中声明的,再次声明就能保证找到生产者发送的数据
  15. # 如果消费者在生产者之前先启动了,会找不到这个消息队列,就会报错
  16. channel.queue_declare(queue='hello')
  17.  
  18. def callback(ch, method, properties, body):
  19. print('--->>', ch, '\n', method, '\n', properties)
  20. print(" [x] Received %r" % body)
  21.  
  22. # ch: 声明的管道channel对象内存地址
  23. #
  24.  
  25. channel.basic_consume(callback, # 如果收到消息就调用callback函数来处理消息
  26. queue='hello',
  27. no_ack=True)
  28.  
  29. print(' [*] Waiting for messages. To exit press CTRL+C')
  30.  
  31. # 永远收下去,没有就在这卡住
  32. channel.start_consuming()

三、连接远程rabbitmq

  连接远程rabbitmq可能会有认证问题,需要输入用户名和密码

  windows下设置用户名、密码和权限:here

  linux环境下设置用户名、密码和权限:here

  基本都在最后面

  send端的设置: 

  1. # -*- conding:utf-8 -*-
  2.  
  3. import pika
  4.  
  5. # 认证信息
  6. credentials = pika.PlainCredentials('bigberg', '111111')
  7.  
  8. connection = pika.BlockingConnection(pika.ConnectionParameters(
  9. '172.16.200.109', 5672, '/', credentials))
  10.  
  11. # 声明一个管道
  12. channel = connection.channel()
  13.  
  14. # 声明queue
  15. channel.queue_declare(queue='hello') # queue的名称
  16.  
  17. # n RabbitMQ a message can never be sent directly to the queue, it always needs to go through an exchange.
  18. channel.basic_publish(exchange='',
  19. routing_key='hello',
  20. body='from remote server')
  21. print(" [x] Sent 'from remote server'")
  22. connection.close()

  

使用rabbitmq消息队列的更多相关文章

  1. RabbitMQ消息队列(一): Detailed Introduction 详细介绍

     http://blog.csdn.net/anzhsoft/article/details/19563091 RabbitMQ消息队列(一): Detailed Introduction 详细介绍 ...

  2. RabbitMQ消息队列1: Detailed Introduction 详细介绍

    1. 历史 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有 ...

  3. (转)RabbitMQ消息队列(九):Publisher的消息确认机制

    在前面的文章中提到了queue和consumer之间的消息确认机制:通过设置ack.那么Publisher能不到知道他post的Message有没有到达queue,甚至更近一步,是否被某个Consum ...

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

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

  5. (转)RabbitMQ消息队列(六):使用主题进行消息分发

    在上篇文章RabbitMQ消息队列(五):Routing 消息路由 中,我们实现了一个简单的日志系统.Consumer可以监听不同severity的log.但是,这也是它之所以叫做简单日志系统的原因, ...

  6. (转)RabbitMQ消息队列(四):分发到多Consumer(Publish/Subscribe)

    上篇文章中,我们把每个Message都是deliver到某个Consumer.在这篇文章中,我们将会将同一个Message deliver到多个Consumer中.这个模式也被成为 "pub ...

  7. RabbitMQ消息队列应用

    RabbitMQ消息队列应用 消息通信组件Net分布式系统的核心中间件之一,应用与系统高并发,各个组件之间解耦的依赖的场景.本框架采用消息队列中间件主要应用于两方面:一是解决部分高并发的业务处理:二是 ...

  8. RabbitMQ消息队列(四):分发到多Consumer(Publish/Subscribe)

    上篇文章中,我们把每个Message都是deliver到某个Consumer.在这篇文章中,我们将会将同一个Message deliver到多个Consumer中.这个模式也被成为 "pub ...

  9. RabbitMQ消息队列(九):Publisher的消息确认机制

    在前面的文章中提到了queue和consumer之间的消息确认机制:通过设置ack.那么Publisher能不到知道他post的Message有没有到达queue,甚至更近一步,是否被某个Consum ...

  10. 使用EasyNetQ组件操作RabbitMQ消息队列服务

    RabbitMQ是一个由erlang开发的AMQP(Advanved Message Queue)的开源实现,是实现消息队列应用的一个中间件,消息队列中间件是分布式系统中重要的组件,主要解决应用耦合, ...

随机推荐

  1. python怎么安装requests、beautifulsoup4等第三方库

    零基础学习python最大的难题之一就是安装所有需要的软件,下面来简单介绍一下如何安装用pip安装requests.beautifulsoup4等第三方库:   方法/步骤     点击开始,在运行里 ...

  2. Kafka安装之二 在CentOS 7上安装Kafka

    一.简介 Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写.Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据. 这 ...

  3. 15 分钟用 ML 破解一个验证码系统

    人人都恨验证码——那些恼人的图片,显示着你在登陆某网站前得输入的文本.设计验证码的目的是,通过验证你是真实的人来避免电脑自动填充表格.但是随着深度学习和计算机视觉的兴起,现在验证码常常易被攻破. 我拜 ...

  4. [leetcode-811-Subdomain Visit Count]

    A website domain like "discuss.leetcode.com" consists of various subdomains. At the top le ...

  5. 补充的css知识点

    1.文字一行显示   超出的用...表示 .ellipsis{ overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

  6. 2017软工第十周个人PSP

    11.17--11.23本周例行报告 1.PSP(personal software process )个人软件过程. C(类别) C(内容) ST(开始时间) ET(结束时间) INT(间隔时间) ...

  7. web登录密码加密

    文章:如何实现登录页面密码加密 文章:用RSA加密实现Web登录密码加密传输 文章:web登录用户名密码加密 知乎文章:Web前端密码加密是否有意义? 文章:记录一次黑客模拟攻击 成功拿到淘宝账号和密 ...

  8. lintcode-451-两两交换链表中的节点

    451-两两交换链表中的节点 给一个链表,两两交换其中的节点,然后返回交换后的链表. 样例 给出 1->2->3->4, 你应该返回的链表是 2->1->4->3. ...

  9. lintcode-201-线段树的构造

    201-线段树的构造 线段树是一棵二叉树,他的每个节点包含了两个额外的属性start和end用于表示该节点所代表的区间.start和end都是整数,并按照如下的方式赋值: 根节点的 start 和 e ...

  10. 数据挖掘聚类算法(DBSCAN、Kmeans)Java实现

    学习聚类算法时,参考算法说明随手写的java实现,代码很简单,不多做说明啦,有需要的童鞋可以看看,自己也做个备录. http://files.cnblogs.com/files/yuananyun/% ...