【发布时间】:2021-10-08 20:18:07
【问题描述】:
为了避免在我必须发送一组大于最大大小的消息时出错,我编写了一个用于发送一组消息的类。
首先,如果有人可以向我展示一个解释如何避免此问题的示例,那就太好了。
尝试自己解决问题时,我发现很难理解消息的大小 (ServiceBusMessage)。
sb_msg.message.get_message_encoded_size() 方法是我需要的最接近的东西。
你知道如何计算消息大小吗?
def send_as_json(self, msg, id_field=None, size_in_bytes=262144):
if isinstance(msg, list):
payload = self.topic_sender.create_message_batch(size_in_bytes)
for m in msg:
try:
# add a message to the batch
sb_msg = ServiceBusMessage(json.dumps(m), message_id=m.get(id_field, uuid.uuid4()), content_type='application/json')
total_size = payload.size_in_bytes + sb_msg.message.get_message_encoded_size()
if total_size > size_in_bytes:
_log.info(f'sending partial batch of {payload.size_in_bytes} bytes')
self.send_service_bus_message(payload)
payload = self.topic_sender.create_message_batch(size_in_bytes)
payload.add_message(sb_msg)
except ValueError as e:
# ServiceBusMessageBatch object reaches max_size.
# New ServiceBusMessageBatch object can be created here to send more data.
raise Exception('', e)
self.send_service_bus_message(payload)
else:
sb_msg = ServiceBusMessage(json.dumps(msg), message_id=msg.get(id_field, uuid.uuid4()), content_type = 'application/json')
self.send_service_bus_message(sb_msg)
【问题讨论】:
标签: python azureservicebus azure-servicebus-topics