问题标签 [qpid-proton]

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 回答
107 浏览

python - 使用 python proton 连接到 Eclipse Hono AMQP 适配器

我目前正在尝试通过 AMPQ 适配器向 Hono 沙箱发送遥测消息。尽管我接管了在Hono Noth 桥示例中看到的部分代码示例(这也适用于南桥),但我似乎对 SASL 有点挣扎。

这是我的代码

如果我运行代码,我会收到上下文条件的传输错误

'预期的 SASL 协议头:未找到协议头(连接中止)'

我还尝试使用端口 5672 导致链接错误并使用端口 15672(实际上是北桥端口) - 令我惊讶的是,这并没有导致 SASL 错误,而是让我得到了预期的“未授权”错误(如设备不允许通过北桥连接)

======= 更新=======

再次感谢您的时间。

关于a),因为一旦将代码作为问题的答案,这里的评论就相当有限。我用来模拟设备的代码如下

为了模拟服务器,我不使用 java 客户端,而是使用 python 快速入门示例中的示例代码。我还有一个客户端类,它像 python 快速启动示例中那样执行 http 调用,服务器类会做出反应并打印消息 - 所以根据我的理解,下面概述的服务器实现应该没问题:

经过一天的尝试,我找不到我做错了什么,我真的希望你能看到我错过了什么:)

br 阿明

0 投票
0 回答
80 浏览

python - Qpid Proton Python 在 on_message 中检测到一个空队列

我正在使用 Qpid Proton 使用 Python 来使用 AMQ 中队列中的消息。我正在学习这一点——我远不是这方面的专家,所以我正在寻求帮助。我有一种情况,AMQ 队列包含表示要完成的工作的消息,并且它与数据库(这需要时间)发生冲突。所以我正在从队列中接收“N 条”消息,完成工作,然后重复。问题是我想不出一种方法来知道队列是否为空......

有没有办法在最后一条消息被消费后检测代理中的队列是否为空?如果这是一个单线程消费者,那么没问题;但我可能有几个消费者反对一个队列,所以不可能确切地知道队列中有多少消息。

例如,在 on_message 方法上(这来自 Qpid Python 文档(direct_recv.py),我们有:

该片段显示当 self.received == self.expected 时,消费者将关闭。例如,假设 broker 中的一个队列有 65 条消息,调用此方法的消费者设置 self.expected = 25,则在消费 25 条消息后,这将结束;我可以做到这一点。

现在假设代码尝试使用相同的 25 条消息(self.expected = 25),但是此时队列只有 12 条消息,接收方将无限期挂起 - 直到将更多消息添加到队列中。但是在我的情况下,不会添加更多消息。

有没有办法查询队列并确定队列是否为“空”,如果是,退出?换句话说,类似:

我只是不知道如何知道队列是否为空。这甚至可能吗?

作为旁注 ,我可以通过使用 BlockingConnection 来完成这项工作。它不像使用 Receive 类那样优雅,也没有那么快。所以本质上:

  1. 创建阻塞连接
  2. 编写一个循环来接收和接受“N个”消息(或在队列为空时等待超时)
  3. 关闭阻塞连接。

任何帮助将不胜感激,谢谢!

0 投票
1 回答
18 浏览

python - 如何正确使用 proton-python 接收消息

我的配置:在主机上运行 qpidd:192.168.80.81 并进行以下交换(qpid-config exchanges):

我有多个制作人发布到主题,如amq.topic/com.product.sample1,,amq.topic/com.product.sample2你得到了模式。

我可以通过在命令行上运行来接收来自生产者的所有消息qpid-receive -b 192.168.80.81 -a amq.topic/com.product.sample1 -f

但是当涉及到使用python-qpid-proton库(版本 0.35.0)在 Python 中实现这一点时,它不会按需要工作。这是我接收特定主题消息的 python 文件:

谁能帮助我并指出我的错误在哪里?非常感谢您的帮助!