Проблема с использованием 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)])
Другие вопросы по тегам