0

我正在尝试通过 Python SDK 将消息列表传递给服务总线,我收到 400 响应,因为 JSON 不是必需的格式。

我正在做这样的事情,但它失败了:

messages = [Message({'id':1,'name':'bob'}),Message({'id':2,'name':'bill'})]
sb.send_queue_message_batch('queue_name', messages)

如果我这样做,它会起作用:

messages = [Message('bob'),Message('bill')]
sb.send_queue_message_batch('queue_name', messages)

或者如果我像这样单独调用 send_queue_message 它可以工作

sb.send_queue_message('queue_name', Message({'id':1,'name':'bob'}))
sb.send_queue_message('queue_name', Message({'id':2,'name':'bill'}))

查看源代码,它调用消息上的一个方法来创建批处理中预期的格式,所以不确定我应该做些什么不同的事情。不幸的是,我能找到的所有批处理示例都是简单的字符串方法。

另一端的消费者将是一个 .Net 应用程序,因此我需要确保它仍然可以反序列化。我可以在消息内容上调用 json.dump 并将其作为正文的字符串化版本传递,但这听起来不是理想的解决方案。

谢谢

批处理的 SDK 源:https ://github.com/Azure/azure-sdk-for-python/blob/587bc9a2f955f43c67b02c537521f31aa4c27555/azure-servicebus/azure/servicebus/servicebusservice.py#L892

4

1 回答 1

0

Yo 将能够使用 servicebus v7 中的 ServiceBusMessage 发送任何对象https://pypi.org/project/azure-servicebus/7.0.0/

import os
from azure.servicebus import ServiceBusClient, ServiceBusMessage


CONNECTION_STR = os.environ['SERVICE_BUS_CONNECTION_STR']
QUEUE_NAME = os.environ["SERVICE_BUS_QUEUE_NAME"]

servicebus_client = ServiceBusClient.from_connection_string(conn_str=CONNECTION_STR, logging_enable=True)
with servicebus_client:
    sender = servicebus_client.get_queue_sender(queue_name=QUEUE_NAME)
    with sender:
      sender.send_messages([ServiceBusMessage(object1), ServiceBusMessage(object2)])
于 2021-01-10T21:51:26.360 回答