我第一次使用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()
msg.body 给出如下字节字符串:
b'@\x06string\x083http://schemas.microsoft.com/2003/10/Serialization/\x9ae\x0c{"PUID":"3NFLzV3cjCp8f5JLh3KSnkXDgSw1FWgM","HardDelete":null}\x01'
本来json是推进去的。 有没有办法避免额外的参数并只获取原始json?
最佳答案
该问题是由不同端使用的不同协议(protocol)引起的:C# 中的发送方使用 AMQP 或默认 .NET 序列化行为,Python 中的接收方通过 HTTP 使用 REST API。可以引用文档Using Service Bus from .NET with AMQP 1.0
和 source code Azure Python Service Bus SDK 的了解这一点,我在其他 SO 线程 Interoperability Azure Service Bus Message Queue Messages 中解释了类似的问题.
为了避免额外的参数并仅获取原始 json,您可以尝试以下两种方法。
- 使用 REST API在 C# 中通过 HTTP 发送原始 json,无需来自 AMQP 或默认 .NET 序列化行为的任何附加内容。
- 使用
python-qpid-proton
用Python封装,用AMQP接收消息,反序列化得到原始json。 - 在当前情况下,只需从消息中删除附加内容即可提取原始 json,因为每条消息都有相同的附加内容。
希望有帮助。
关于python - Azure服务总线python客户端问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44647351/