【问题标题】:Azure servicebus python - how to send a bunch of messagesAzure servicebus python - 如何发送一堆消息
【发布时间】: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


    【解决方案1】:

    Azure 服务总线 - Python: 下面的代码将让您深入了解如何发送批量消息:

    def send_batch_message(sender):
    # create a batch of messages
    batch_message = sender.create_message_batch()
    for _ in range(10):
        try:
            # add a message to the batch
            batch_message.add_message(ServiceBusMessage("Message inside a ServiceBusMessageBatch"))
        except ValueError:
            # ServiceBusMessageBatch object reaches max_size.
            # New ServiceBusMessageBatch object can be created here to send more data.
            break
    # send the batch of messages to the queue
    sender.send_messages(batch_message)
    print("Sent a batch of 10 messages")
    

    更多详细信息,您可以访问下面的微软文档,在这个链接中我们有明确的信息发送消息作为单个,列表或批量:Link

    如何查看邮件的大小:

    借助以下函数,我们可以找到消息的大小(以字节为单位):

     Import sys
     sys.getsizeof(variable_name)  #this gives us the bytes occupied by the variable.
    

    要检查批次的 max_size_in_bytes,我们可以简单地打印下面的消息

    batch_message = sender.create_message_batch() # Step1
    batch_message.add_message(ServiceBusMessage("Message we want to add")) #Step2 Add message to the batch in a loop.
    print(batch_message) #Step3 We will get the output as below as yellow after printing, below is the output:
    

    输出:

    ServiceBusMessageBatch(max_size_in_bytes=1048576, message_count=10)

    【讨论】:

      猜你喜欢
      • 2021-09-08
      • 2017-03-29
      • 1970-01-01
      • 2017-06-07
      • 2022-01-25
      • 1970-01-01
      • 2021-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多