问题标签 [python-pika]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
320 浏览

python-3.x - 如何使用 pika 和 RabbitMQ 重新发布消息

我需要收听 RabbitMQ 消息,稍微处理每条消息,然后将其提交到另一个交换器。到目前为止,我看到的每个示例都包括以下内容:

或这个:

因为我需要接收和发送消息,我可能需要同时运行两个循环。有没有办法我可以做到这一点?

0 投票
2 回答
6055 浏览

rabbitmq - 由于身份验证错误,无法从网络上的其他客户端访问 RabbitMQ 服务器

我在 Ubuntu 14.04 上安装了 RabbitMQ,但无法从网络上的其他计算机连接到 RabbitMQ 服务器。

从安装 RabbitMQ 的机器连接到服务器没有问题,只有从网络上的其他计算机连接。

该页面声明“默认情况下,RabbitMQ 将在所有可用接口上侦听端口 5672”。

当尝试在 python 中使用 pika 从另一个服务器连接时,我收到以下错误:

我添加了一个具有权限的新用户set_permissions newuser ".*" ".*" ".*"并尝试了 URI 身份验证方法,但是我仍然收到相同的错误。

我也无法从网络上的其他计算机连接到 RabbitMQ 管理,但可以在本地 pc 上访问它。

此外,通过检查开放端口,我可以看到以下内容:

我正在使用 RabbitMQ 教程中的 python 代码:

我错过了什么?

0 投票
2 回答
7980 浏览

python - RabbitMQ 在处理长时间运行的任务时关闭连接并且超时设置产生错误

我正在使用 RabbitMQ 生产者向消费者发送长时间运行的任务(30 分钟以上)。问题是当与服务器的连接关闭并且未确认的任务重新排队时,消费者仍在处理任务。

通过研究,我了解到可以使用心跳增加连接超时 来解决此问题。这两种解决方案在尝试它们时都会引发错误。在阅读类似帖子的答案时,我还了解到,自发布答案以来,RabbitMQ 已经实现了许多更改(例如,默认心跳超时已从 RabbitMQ 3.5.5 之前的 580 更改为 60)。

指定心跳和阻塞的连接超时时:

显示以下错误:

在连接参数中指定heartbeat_interval=1000时,会显示类似的错误:TypeError: __init__() got an unexpected keyword argument 'heartbeat_interval'

同样socket_timeout = 1000显示以下错误:TypeError: __init__() got an unexpected keyword argument 'socket_timeout'

我在 Ubuntu 14.04 上运行 RabbitMQ 3.6.1、pika 0.10.0 和 python 2.7。

  1. 为什么上述方法会产生错误?
  2. 可以在长时间运行的连续任务中使用心跳方法吗?例如,在执行需要 30 多分钟的大型数据库连接时可以使用心跳吗?我赞成心跳方法,因为很多时候很难判断数据库连接等任务需要多长时间。

我已经阅读了类似问题的答案

更新:运行pika 文档中的代码会产生相同的错误。

0 投票
1 回答
526 浏览

docker - pika.BlockingConnection() 在容器内失败,在 VM 中运行良好

我正在尝试在容器中使用 rabbitmq。我安装了所需的库,然后尝试创建一个 BlockingConnection,但它失败了。当我在任何虚拟机或物理主机上尝试时,同样的事情。它仅对容器失败。以下是步骤:-

安装所需的软件包:-

接下来,我尝试创建一个 BlockingConnection,但它失败了。不过,同样的事情在虚拟机上也有效。

我不确定容器内有什么问题。我为此使用 ubuntu:15.10 图像。对此的任何反馈都会非常有帮助。

0 投票
1 回答
1062 浏览

rabbitmq - kombu 没有重新连接到 RabbitMQ

我有两台服务器,分别称为 A 和 B。B 运行 RabbitMQ,而 A 通过 Kombu 连接到 RabbitMQ。如果我在 B 上重新启动 RabbitMQ,kombu 连接会中断,并且不再传递消息。然后我必须重置 A 上的进程以重新建立连接。有没有更好的方法,即 Kombu 有没有办法自动重新连接,即使 RabbitMQ 进程重新启动?

我的基本代码实现如下,在此先感谢!:)

0 投票
1 回答
618 浏览

python - Pika 可以在 ubuntu 上连接到 RabbitMq,但不能在 Centos 上工作?

相同的代码可以在 Ubuntu 上运行,而不是在 Centos 上运行!防火墙已经关闭!

Ubuntu 16.04,python 版本 3.5.2。

Centos 7,python 版本 3.5.2。

Ubuntu和centos是virtualbox新安装的!RabbitMq 配置 tls!</p>

在 Centos 上,如果 connect rabbitmq disable ssl 是可以的,但是如果 connect rabbitmq enable ssl 失败。

你能帮助我吗?非常感谢!

这是 rabbitmq 配置:

这是代码:

这是错误消息:

这个rabbitmq服务器日志:

0 投票
1 回答
209 浏览

python-2.7 - 为什么即使我使用 global 关键字,这个全局变量也没有在 python 2.7 中更新?

我有一个回调函数,它在收到每条消息时返回 AMQP 消息的正文。我希望能够将正文的内容分配给一个全局变量,然后在我的程序中进一步使用它。

我在脚本顶部创建了一个全局变量,并在回调函数中使用了 global 关键字,我理解它应该允许我更新脚本顶部的全局变量,但是当我从另一个脚本我从回调函数中返回了'test'的原始值而不是body的当前值......

消费者.py

进口商.py

我不明白为什么 T_MSG 的值没有从回调函数中更新,因为我可以清楚地看到 print 语句正在打印 body 的正确值 - 但即使我在回调函数中将其声明为全局,当我导入 T_MSG 的值并尝试打印它,我得到了最初分配的“测试”值,而不是我期望的正文内容......

我的印象是,每次回调函数接收到一条消息并“处理”它时,应该将 body 的新值分配给 T_MSG (全局)变量,因此我应该能够将它导入到我的 importer.py 脚本中- 但这不起作用,我读过的所有内容都指向在函数中使用 global 关键字来使这个...

任何帮助深表感谢!

0 投票
0 回答
301 浏览

rabbitmq - 如何在 pika 中声明循环队列

是否可以将pika( python-pika) 中的队列声明为循环队列?如果是,如何?

我的意思是循环队列(或环)是一个队列,当一条消息被选中时,它将被重新插入到队列的末尾,而不是从队列中删除。例如,如果队列包含:msg_3, msg_2, msg_1, 那么在一个消费者 get 之后msg_1, 后者将被插入到最后, 所以队列将是: msg_1, msg_3, msg_2(而不是msg_3, msg_2)

编辑:正如IMSoP所建议的,我可以让消费者重新发布每条消费的消息(例如,在回调函数的末尾)。

0 投票
1 回答
95 浏览

docker - docker odoo 9 安装 pika 错误

我有一个想要实现的简单 docker 构建。拉取基础镜像 odoo:9 并安装 pika 库

来自 odoo:9

运行 pip 安装 pika

但无法继续,因为我收到此错误。顺便说一句,在这里输入图像描述 ,我在 Windows 环境中使用 docker。

0 投票
1 回答
4186 浏览

python - rabbitmq中的多个消费者用于多个队列

我有 2 个队列,比如 q1 和 q2,它们对应于 e1 和 e2 交换与绑定密钥 b1 和 b2。我想并行运行消费者函数,比如 c1 和 c2,它们将分别监听 q1 和 q2。我尝试了以下方法:

但是,它只监听 c1 函数和 c2 函数,并没有被执行。如何运行这两个功能?提前致谢。

编辑:我在 2 个不同的模块(文件)中有方法 c1 和 c1