Azure 服务总线 python 客户端问题

Nir*_*yan 4 python json azure azureservicebus

我第一次使用 azure 服务总线在 C# 源和 python 客户端之间传输消息。

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

我得到的有效载荷不符合预期。

我的代码如下所示。

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()
Run Code Online (Sandbox Code Playgroud)

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

本来是把json推进去的。有没有办法避免额外的参数并只获取原始json?

Pet*_*Pan 5

该问题是由不同端使用的不同协议引起的:C# 中的发送者使用 AMQP 或默认的 .NET 序列化行为和 Python 中的接收者使用 REST API 通过 HTTP。你可以参考Azure Python Service Bus SDK的文档Using Service Bus from .NET with AMQP 1.0源代码就知道了,我在另一个SO线程互操作性Azure服务总线消息队列消息中解释了类似的问题。

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

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

希望能帮助到你。