pika

Is it possible to move / merge messages between RabbitMQ queues?

落爺英雄遲暮 提交于 2019-11-28 01:31:50
问题 I'm looking to know is it possible to move / merge messages from one queue to another. For example: main-queue contains messages ['cat-1','cat-2','cat-3','cat-4','dog-1','dog-2','cat-5'] dog-queue contains messages ['dog-1, dog-2, dog-3, dog-4] So the question is, (assuming both queues are on the same cluster, vhost) it possible to move messages from dog-queue to main-queue using rabbitmqctl ? So at the end I'm looking to get something like: Ideally: main-queue : ['cat-1','cat-2','cat-3','cat

How can I recover unacknowledged AMQP messages from other channels than my connection's own?

白昼怎懂夜的黑 提交于 2019-11-27 17:58:32
It seems the longer I keep my rabbitmq server running, the more trouble I have with unacknowledged messages. I would love to requeue them. In fact there seems to be an amqp command to do this, but it only applies to the channel that your connection is using. I built a little pika script to at least try it out, but I am either missing something or it cannot be done this way (how about with rabbitmqctl?) import pika credentials = pika.PlainCredentials('***', '***') parameters = pika.ConnectionParameters(host='localhost',port=5672,\ credentials=credentials, virtual_host='***') def handle_delivery

rabbitmq消息组播

拜拜、爱过 提交于 2019-11-27 16:56:05
import pika import sys credentials = pika.PlainCredentials('alex', 'alex123') connection = pika.BlockingConnection(pika.ConnectionParameters( '192.168.14.52',credentials=credentials)) channel = connection.channel() channel.exchange_declare(exchange='direct_logs',type='direct') severity = sys.argv[1] if len(sys.argv) > 1 else 'info' #严重程度,级别 message = ' '.join(sys.argv[2:]) or 'Hello World!' channel.basic_publish(exchange='direct_logs', routing_key=severity, body=message) print(" [x] Sent %r:%r" % (severity, message)) connection.close() direct_send.py import pika import sys credentials = pika

rabbitmq消息持久化

青春壹個敷衍的年華 提交于 2019-11-27 16:54:24
可插拔式:一个插件,安装和写在不影响主程序运行 durable=True  持久,持续地 | 队列持久化 delivery_mode=2  消息持久化 import pika import time credentials = pika.PlainCredentials('alex', 'alex123') connection = pika.BlockingConnection(pika.ConnectionParameters( '192.168.14.52',credentials=credentials)) channel = connection.channel() # 声明queue channel.queue_declare(queue='task_queue',durable=True) # n RabbitMQ a message can never be sent directly to the queue, it always needs to go through an exchange. import sys message = ' '.join(sys.argv[1:]) or "Hello World! %s" % time.time() channel.basic_publish(exchange='', routing_key='task

RabbitMQ 使用详细介绍

…衆ロ難τιáo~ 提交于 2019-11-27 12:42:33
一、RabbitMQ 消息队列介绍 二、RabbitMQ基本示例.   1、Rabbitmq 安装   2、基本示例   3、RabbitMQ 消息分发轮询 三、RabbitMQ 消息持久化(durable、properties)   1、RabbitMQ 相关命令   2、消息持久化 四、RabbitMQ 广播模式(exchange)   1、fanout 纯广播、all   2、direct 有选择的接收消息   3、topic 更细致的过滤   4、RabbitMQ RPC 实现(Remote procedure call) 上节回顾 主要讲了协程、进程、异步IO多路复用。 协程和IO多路复用都是单线程的。 epoll 在linux下通过这个模块libevent .so 实现 gevent 在底层也是用了libevent .so 1 2 gevent可以理解为一个更上层的封装。 使用select或者selectors,每接收或发送数据一次都要select一次 twisted异步网络框架,强大又庞大,不支持python3 (代码量python中排top3)。几乎把所有的网络服务都重写了一遍。 一、RabbitMQ 消息队列介绍 RabbitMQ也是消息队列,那RabbitMQ和之前python的Queue有什么区别么? py 消息队列: 线程 queue

Handling long running tasks in pika / RabbitMQ

孤街浪徒 提交于 2019-11-27 05:10:07
问题 We're trying to set up a basic directed queue system where a producer will generate several tasks and one or more consumers will grab a task at a time, process it, and acknowledge the message. The problem is, the processing can take 10-20 minutes, and we're not responding to messages at that time, causing the server to disconnect us. Here's some pseudo code for our consumer: #!/usr/bin/env python import pika import time connection = pika.BlockingConnection(pika.ConnectionParameters( host=

rabbitmq 消息队列

我的未来我决定 提交于 2019-11-27 02:29:13
为什么用消息队列 举例 比如在一个企业里,技术老大接到boss的任务,技术老大把这个任务拆分成多个小任务,完成所有的小任务就算搞定整个任务了。 那么在执行这些小任务的时候,可能有一个环节很费时间,并且优先级很低,推迟完成也不影响整个任务运转,那么技术老大就会将这个很费时间,且不重要的任务,丢给他的小弟去解决,自己继续完成其他任务。 转化为计算机思想 那个技术老大就是一个 程序系统,那个小弟就是消息队列。 当程序系统发现某些任务耗费时间且优先级较低,迟点完成也不影响整个任务,就把这个任务丢给消息队列。 场景 在程序系统中,例如外卖系统,订单系统,库存系统,优先级较高 发红包,发邮件,发短信,app消息推送等任务优先级很低,很适合交给消息队列去处理,以便于程序系统更快的处理其他请求。 消息队列工作流程 消息队列一般有三个角色: 队列服务端 队列生产者 队列消费者 消息队列工作流程就如同一个流水线,有产品加工,一个输送带,一个打包产品 输送带就是 不停运转的消息队列服务端 加工产品的就是 队列生产者 在传输带结尾打包产品的 就是队列消费者 队列产品 RabbitMQ Erlang编写的消息队列产品,企业级消息队列软件,支持消息负载均衡,数据持久化等。 ZeroMQ saltstack软件使用此消息,速度最快。 Redis key-value的系统,也支持队列数据结构,轻量级消息队列

How can I recover unacknowledged AMQP messages from other channels than my connection's own?

社会主义新天地 提交于 2019-11-26 19:14:25
问题 It seems the longer I keep my rabbitmq server running, the more trouble I have with unacknowledged messages. I would love to requeue them. In fact there seems to be an amqp command to do this, but it only applies to the channel that your connection is using. I built a little pika script to at least try it out, but I am either missing something or it cannot be done this way (how about with rabbitmqctl?) import pika credentials = pika.PlainCredentials('***', '***') parameters = pika

rabbitmq消息对列

三世轮回 提交于 2019-11-26 11:12:15
sender1.py 1 # -*- coding:utf-8 -*- 2 # @Author:Liu Guoyang 3 # @Time :2019/8/7 21:14 4 # @File :sender1.py 5 6 7 import pika 8 9 credentials = pika.PlainCredentials('alex', 'alex123') # 服务端创建的用户名和密码 10 connection = pika.BlockingConnection(pika.ConnectionParameters(host="192.168.150.135", credentials=credentials)) 11 # 建立了rabbit协议的通道 12 channel = connection.channel() 13 14 # 声明一个queue 15 channel.queue_declare(queue='hello') 16 17 # 发消息 18 channel.basic_publish( 19 exchange='', 20 routing_key='hello', # 把消息发给名称为hello的队列 21 body='Hello World!' # 发消息到队列,消息的内容 22 ) 23 24 print("[x] Sent 'Hello

Python 常用外部模块详解(12)

社会主义新天地 提交于 2019-11-26 08:34:49
Python 的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承.Python是纯粹的自由软件,源代码和解释器CPython遵循 GPL(GNU General Public License)协议.关于python的哲学:python崇尚:"优雅"、"明确"、"简单",Python是用最简单最优雅最明确的方法来解决问题. RabbitMQ RabbitMQ是一个在AMQP基础上完整的,可复用的企业消息系统,他遵循Mozilla Public License开源协议,MQ全称为Message Queue,消息队列(MQ)是一种应用程序对应用程序的通信方法,应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们.消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术.排队指的是应用程序通过队列来通信,队列的使用除去了接收和发送应用程序同时执行的要求,说的笼统点是queue+socket实现. ◆MQ的基础应用◆ 如果启动了多个消费者,那么他们之间是串行获取数据的,也就是说如果1号消费者收不到数据,那么MQ将默认发送给2号消费者,以此类推,如果全部消费者不在线