问题标签 [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 回答
232 浏览

python - 如何使用 Qpid Proton Python 显式确认或取消确认消息

我有一个 Qpid Proton PythonMessageHandler接收一些触发一些处理的消息。如果处理失败,我如何拒绝消息?据我从 API 文档中可以看出,默认值为auto_accept=True. 但是,将其更改为False似乎并不能避免确认消息,因为后续接收者没有赶上失败的消息。

0 投票
1 回答
118 浏览

raspberry-pi - 如何在树莓派上安装 Qpid Proton

我想在树莓派 4 上使用 Qpid Proton,但我无法安装它。好吧,看来我可以安装它,并且可以使用 Apache 网站上的示例。

https://qpid.apache.org/releases/qpid-proton-0.33.0/proton/python/docs/tutorial.html

但是,容器的 on_sendable 回调似乎没有被执行。在做了一些研究之后,似乎我需要添加一个与 qpid-config 的主题交换,它是 qpid-tools 的一部分。

但是,这些都无法安装,无论是使用 pip 还是 apt ...

你知道如何在树莓派上安装 Qpid-Tools 吗?我需要添加存储库吗?如果是这样,我在哪里可以找到它?

0 投票
1 回答
128 浏览

java - | 警告 | 传输连接到:tcp://ip:port 失败:org.apache.activemq.transport.InactivityIOException:

我正在尝试从 java[publisher] 向活动 mq 发送消息,该消息正在活动 mq 中排队。订阅者代码是用 python[使用这个库 python-qpid-proton 0.31.0] 编写的。当没有请求发送到活动 mq 时,订阅者保持活动状态。但是,当请求发送到活动 mq 时,“活动持久主题订阅者”中的客户端在处理请求的一段时间后进入“离线持久主题订阅者”。当在 pycharm 中运行相同的代码时可以正常工作,但在 exe 上可以看到这个问题 python 接收器代码如下所示:-

0 投票
0 回答
41 浏览

amqp - Java Qpid 中的“路由键”是否与 C++ Qpid 中的“主题”相同?

自从使用 Python Proton 作为客户端和 Java 实现作为代理后,我对概念命名有点困惑。

Java 文档中,它说每条消息都包含一个“路由密钥”,该“路由密钥”与绑定密钥进行交换。

同时,C++ 代理文档对此并没有多说,但有一个类似的概念——主题也包含在消息中并影响路由逻辑。

这两个概念基本上确定的是同一件事吗?

0 投票
0 回答
81 浏览

python - Qpid Proton Python:关闭前发送多条消息

我之前使用过 RabbitMQ,了解到建立连接的成本很高,我们应该尝试保持一个连接处于活动状态来发送消息。在 Python 中,这非常简单,因为您可以将连接创建为一个可以独立于发送或消费逻辑关闭的对象。

遗憾的是,Python Qpid Proton 库没有很好的文档记录。至少对于像我这样的菜鸟来说,很难理解事情。查看网站上提供的示例代码,您需要为要发送的每条消息实例化一个 MessagingHandler 对象,其中包括连接的打开和关闭。

现在,基于此,我觉得为每条要发送的消息实例化一个处理程序有点愚蠢,因此每次都打开和关闭一个新连接。我觉得我一定错过了一些东西,因为我无法想象这是做到这一点的正确方法。

有什么建议么?

0 投票
1 回答
119 浏览

go - 在 Go 中使用 SASL EXTERNAL 使用 qpid-proton 客户端库连接到 AMQP 1.0 RabbitMQ

我正在尝试使用https://github.com/apache/qpid-proton提供的 golang 实现通过 SASL EXTERNAL 机制通过自签名证书提供的身份验证与 RabbitMQ 建立 TLS 连接。目标是无需在 URI 中指定用户名和密码即可连接到 RabbitMQ。

RabbitMQ 使用以下配置运行:

和插件:

  • rabbitmq_amqp1_0
  • rabbitmq_auth_mechanism_ssl

我已经确认我能够使用 Node.js 库 ( https://github.com/amqp/rhea ) 连接 SASL EXTERNAL,并且我已经确认在 qpid-proton 库中使用 PLAIN 和 ANONYMOUS 连接可以使用 Go但一直无法通过 Go 连接 SASL EXTERNAL。

我的客户端代码没有返回任何错误,但是 RabbitMQ 错误日志告诉我客户端关闭了 TCP 连接

我的客户端代码如下:

0 投票
0 回答
86 浏览

python - Qpid Proton Python 每分钟重新连接尝试

我是 Qpid Proton Python 和 AMQP 的新手。有一件事我有点坚持,我希望我能得到社区的一些支持。

如果从我的应用程序到消息代理 (ActiveMQ) 的连接丢失,我的应用程序要求之一是每分钟重新尝试连接。

从源代码和这个:文档(第 5.2.4 节,第 14 页)来看,似乎我可以在 on_start 事件期间调用“container.connect()”方法时为“reconnect”参数创建一个自定义 Backoff 实例。

所以我为我的自定义 Backoff 实例做了这样的事情:

在 on_start 期间:

问题:

  1. 我可以知道如何测试这是否真的可以正常工作吗?我在自定义 Backoff 实例的“next()”方法中放置了打印语句,并断开了我的 Wifi 以模拟断开连接,但是,重新连接尝试似乎不起作用。
  2. 当容器运行时,如何捕获断开事件并尝试重新连接?

任何建议将不胜感激,谢谢!

0 投票
1 回答
115 浏览

azureservicebus - Qpid(JMS) - Azure 服务总线 - 需要会话的实体不可能创建非会话消息接收器

我们使用 qpid-jms-client-0.57.0 从 Azure ServiceBus 发布和接收消息。ServiceBus 提供了从会话接收消息以维护消息顺序的功能。请参阅此处了解更多详细信息 - https://docs.microsoft.com/en-us/azure/service-bus-messaging/message-sessions

我可以使用 JMXGroupId 发布消息,但无法从启用会话的队列中接收消息。出现错误 - javax.jms.JMSException:需要会话的实体无法创建非会话消息接收器。TrackingId:*, SystemTracker:mule-intr-sbus-test-standard:Queue:test-order, Timestamp:2021-07-28T11:07:49 TrackingId:**, SystemTracker:gateway7, Timestamp:2021-07-28T11: 07:49 [条件 = amqp:不允许]

您能否建议从启用会话的队列中接收消息?

示例代码

错误堆栈跟踪

0 投票
0 回答
27 浏览

cmake - Yocto 中的 CMake 配置文件包 - 安装 Qpid Proton 时出现问题

我想知道 CMake 配置文件包应该如何在 Yocto 下工作。我在尝试安装Qpid Proton 库时偶然发现了这个问题,该库在安装过程中会生成一个配置文件包 ( ProtonCppConfig.cmake)。我的应用程序可以找到配置文件,但包含的路径是错误的。这是它的样子:

它将硬编码的绝对路径设置为/usr/lib/. 显然这是行不通的,因为实际上该库安装在 Yocto 工作目录中的某个位置,而不是/usr/lib我的构建主机中。

但是它应该使用什么路径呢?Proton 配方将其工件安装在<proton-workdir>/sysroot-destdir/.... 我的应用程序在<myapp-workdir>/recipe-sysroot/.... 通过硬链接,这两个目录树在物理上碰巧是相同的,但从配方的角度来看,路径是不同的。

我想这一定是一个问题ProtonCppConfig.cmake,但我看不出该文件应该是什么样子。

这如何与其他食谱一起使用?有人可以向我展示另一个提供配置文件包的库的好例子吗?那里的安装路径是硬编码的吗?

0 投票
0 回答
104 浏览

c++ - qpid proton API 是否应该与 qpid C++ 代理一起使用?

我正在研究 Apache Qpid 中的 C++ AMQP 实现。

我已经安装了C++ 代理,我可以通过以下方式简单地启动它:

创建客户端代码的明显库选择是具有一些示例的质子 API。运行以下命令时:

我得到:

amqp:connection:framing-error: Expected SASL protocol header got: Pre standard AMQP connection ['AMQP\x01\x01\x00\x0a']

当我修改示例以从连接选项中删除 SASL 时,

错误变为:

amqp:connection:framing-error: Expected AMQP protocol header got: Unknown protocol ['AMQP\x01\x01\x00\x0a']

据我了解,质子 API 需要 AMQP 协议的“版本 10”,并且(如错误所示)返回“1.1”。是这样吗?我可以克服这个错误吗?

qpidd有一个选项--protocols,但我不知道如何指定版本 10(传递“AMQP 10”之类的字符串会导致“错误未指定协议”)。质子示例中包含的代理示例确实可以使用,simple_send但我的目的不是重写代理,而是使用工业实力的代理,例如Qpid C++ broker.