请求成功,但 Azure 服务总线中没有消息

问题描述 投票:0回答:1

我有一个 Azure 函数,它使用以下代码将消息发送到 Azure 服务总线队列:

class ServiceBusSenderClient:
    def __init__(self, fully_qualified_namespace, queue_name):
        credentials = DefaultAzureCredential()
        servicebus_client = ServiceBusClient(fully_qualified_namespace=fully_qualified_namespace, credential=credentials, logging_enable=True)
        self.sender = servicebus_client.get_queue_sender(queue_name=queue_name)
    
    async def send_single_message(self, message:str):
        message = ServiceBusMessage(message)
        await self.sender.send_messages(message)
        logging.info("Sent a message to Service Bus")

    def close(self):
        self.sender.close()

当我触发函数时,我看到传入请求,但服务总线队列中没有消息。

Azure Function 没有错误,并且服务总线上的所有请求都成功,所以我有点迷失。我在这里做错了什么?

python azure azure-functions azureservicebus
1个回答
0
投票

Azure 函数服务总线队列触发器仅在消息发送到队列后才会触发并记录消息:-

我创建了一个 Azure Functions 服务总线队列,并创建了一个文件来将消息发送到队列:-

我的

sendervicebus.py

参考链接

import os
from azure.servicebus import ServiceBusClient, ServiceBusMessage


CONNECTION_STR = 'Endpoint=sb://silicon-servicebus.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=WFsJyG1PNWXcucDyQu4+OCKMti05g3J4U+ASbM1O3qA='
QUEUE_NAME = "myqueue"


def send_single_message(sender):
    message = ServiceBusMessage("Single Message")
    sender.send_messages(message)


def send_a_list_of_messages(sender):
    messages = [ServiceBusMessage("Message in list") for _ in range(10)]
    sender.send_messages(messages)


def send_batch_message(sender):
    batch_message = sender.create_message_batch()
    for _ in range(10):
        try:
            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
    sender.send_messages(batch_message)


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:
        send_single_message(sender)
        send_a_list_of_messages(sender)
        send_batch_message(sender)

print("Send message is done.")

输出:-

enter image description here

发送消息后,我触发了我的 Azure 函数,如下所示:-

init.py:-

import logging

import azure.functions as func


def main(msg: func.ServiceBusMessage):
    logging.info('Python ServiceBus queue trigger processed message: %s',
                 msg.get_body().decode('utf-8'))

输出:-

enter image description here

您还可以发送消息,然后在单个代码中运行该函数:-

我的 init.py 发送消息并触发函数:-

import logging

import azure.functions as func

import os
from azure.servicebus import ServiceBusClient, ServiceBusMessage


CONNECTION_STR = 'Endpoint=sb://silicon-servicebus.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=xxxxxxxxM1O3qA='
QUEUE_NAME = "myqueue"


def send_single_message(sender):
    message = ServiceBusMessage("Single Message")
    sender.send_messages(message)


def send_a_list_of_messages(sender):
    messages = [ServiceBusMessage("Message in list") for _ in range(10)]
    sender.send_messages(messages)


def send_batch_message(sender):
    batch_message = sender.create_message_batch()
    for _ in range(10):
        try:
            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
    sender.send_messages(batch_message)


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:
        send_single_message(sender)
        send_a_list_of_messages(sender)
        send_batch_message(sender)

print("Send message is done.")


def main(msg: func.ServiceBusMessage):
    logging.info('Python ServiceBus queue trigger processed message: %s',
                 msg.get_body().decode('utf-8'))
© www.soinside.com 2019 - 2024. All rights reserved.