【问题标题】:Azure service bus python client issueAzure 服务总线 python 客户端问题
【发布时间】:2017-11-22 15:51:38
【问题描述】:

我第一次使用 azure service bus 在 C# 源和 python 客户端之间传输消息。

我正在创建 ServiceBusService 对象并使用它从函数 receive_subscription_message 获取消息。

我得到的payload不符合预期。

我的代码如下所示。

bus_service = ServiceBusService(service_namespace="service_namespace", shared_access_key_name="All", shared_access_key_value="password")
msg = bus_service.receive_subscription_message('test', 'test', peek_lock=True)
print(msg.body)
msg.delete()

msg.body 给出一个字节字符串,如下所示: b'@\x06string\x083http://schemas.microsoft.com/2003/10/Serialization/\x9ae\x0c{"PUID":"3NFLzV3cjCp8f5JLh3KSnkXDgSw1FWgM","HardDelete":null}\x01'

原来 json 被推进去了。 有什么办法可以避免额外的参数,只获取原始的json?

【问题讨论】:

标签: python json azure azureservicebus


【解决方案1】:

该问题是由不同方使用的不同协议引起的:C# 中的发送方使用 AMQP 或默认的 .NET 序列化行为,Python 中的接收方通过 HTTP 使用 REST API。你可以参考文档Using Service Bus from .NET with AMQP 1.0和Azure Python Service Bus SDK的source code了解这一点,我已经在另一个SO线程Interoperability Azure Service Bus Message Queue Messages中解释了类似的问题。

为了避免额外的参数并只获取原始json,您可以尝试两种方法,如下所示。

  1. 在 C# 中通过 HTTP 使用 REST API 发送原始 json,而不需要来自 AMQP 的任何附加内容或默认的 .NET 序列化行为。
  2. 在 Python 中使用 python-qpid-proton 包接收带有 AMQP 的消息,以反序列化并获取原始 json。
  3. 在当前情况下,只需从消息中删除添加内容即可提取原始json,因为每条消息都有相同的添加内容。

希望对你有帮助。

【讨论】:

  • 如何使用 python-qpid-proton 反序列化?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-06
  • 1970-01-01
  • 2019-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多