我有一个 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 没有错误,并且服务总线上的所有请求都成功,所以我有点迷失。我在这里做错了什么?
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.")
输出:-
发送消息后,我触发了我的 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'))
输出:-
您还可以发送消息,然后在单个代码中运行该函数:-
我的 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'))