Проблема с использованием Python Azure ServiceBus SDK для отправки пакета сообщений с телом объекта
Я пытаюсь передать список сообщений в служебную шину с помощью 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
1 ответ
Yo сможет отправить любой объект, используя ServiceBusMessage в версии 7 сервисной шины 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)])