Azure服务总线python客户端问题

时间:2017-06-20 08:07:48

标签: python json azure azureservicebus

我第一次使用azure服务总线在C#source和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?

1 个答案:

答案 0 :(得分:4)

问题是由不同方面使用的不同协议引起的:使用AMQP的C#中的发送者或使用REST API通过HTTP在Python中使用默认的.NET序列化行为和接收器。您可以参考文档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#中使用REST API通过HTTP发送原始json而不使用AMQP中的任何其他内容或默认的.NET序列化行为。
  2. 在Python中使用python-qpid-proton包接收消息,使用AMQP反序列化并获取原始json。
  3. 在当前情况下,只需删除邮件中的添加内容即可提取原始json,因为每条邮件的添加内容相同。
  4. 希望它有所帮助。