无法在函数应用程序中向 Azure 队列添加多个项目
Can't add more than one item to Azure Queue in function app
我有一个 TimerTrigger 函数,它每几分钟运行一次并将多个项目添加到队列中,而 QueueTrigger 函数应该处理该队列。但是每次 QueueTrigger 函数只触发一次。
我的 TimerTrigger 函数:
def main(mytimer: func.TimerRequest, msg: func.Out[str]) -> None:
utc_timestamp = datetime.datetime.utcnow().replace(
tzinfo=datetime.timezone.utc).isoformat()
if mytimer.past_due:
logging.info('The timer is past due!')
logging.info('Python timer trigger function ran at %s', utc_timestamp)
msg.set("1")
msg.set("2")
QueueTrigger 函数:
def main(msg: func.QueueMessage) -> None:
logging.info('Python queue trigger function processed a queue item: %s',
msg.get_body().decode('utf-8'))
function.json 的 TimerTrigger:
{
"scriptFile": "__init__.py",
"bindings": [
{
"name": "mytimer",
"type": "timerTrigger",
"direction": "in",
"schedule": "0 */2 * * * *"
},
{
"name": "msg",
"type": "queue",
"direction": "out",
"queueName": "js-queue-items",
"connection": "AzureWebJobsStorage"
}
]
}
QueueTrigger 的 function.json:
{
"scriptFile": "__init__.py",
"bindings": [
{
"name": "msg",
"type": "queueTrigger",
"direction": "in",
"queueName": "js-queue-items",
"connection": "AzureWebJobsStorage"
}
]
}
local.settings.json:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "python"
}
}
我该如何解决这个问题?
没有使用 azure time 触发器连接到队列存储的固有方法,即队列存储会将时间触发器视为任何其他控制台应用程序或任何其他试图连接到存储并添加的程序留言。
因此,我们必须使用连接字符串以经典方式添加消息。
connectionstring = ""
queuename = ""
messages = ""
queueClient = QueueClient.from_connection_string(connectionString, queueName)
queueClient.send_message(message)
因此,when queue trigger在启动期间只会启动一次,并保持空闲状态,因为没有添加消息,因此不会被触发。
请参阅 timetrigger and queuetrigger and how to add message to queue using python 上的文档。
我有一个 TimerTrigger 函数,它每几分钟运行一次并将多个项目添加到队列中,而 QueueTrigger 函数应该处理该队列。但是每次 QueueTrigger 函数只触发一次。
我的 TimerTrigger 函数:
def main(mytimer: func.TimerRequest, msg: func.Out[str]) -> None:
utc_timestamp = datetime.datetime.utcnow().replace(
tzinfo=datetime.timezone.utc).isoformat()
if mytimer.past_due:
logging.info('The timer is past due!')
logging.info('Python timer trigger function ran at %s', utc_timestamp)
msg.set("1")
msg.set("2")
QueueTrigger 函数:
def main(msg: func.QueueMessage) -> None:
logging.info('Python queue trigger function processed a queue item: %s',
msg.get_body().decode('utf-8'))
function.json 的 TimerTrigger:
{
"scriptFile": "__init__.py",
"bindings": [
{
"name": "mytimer",
"type": "timerTrigger",
"direction": "in",
"schedule": "0 */2 * * * *"
},
{
"name": "msg",
"type": "queue",
"direction": "out",
"queueName": "js-queue-items",
"connection": "AzureWebJobsStorage"
}
]
}
QueueTrigger 的 function.json:
{
"scriptFile": "__init__.py",
"bindings": [
{
"name": "msg",
"type": "queueTrigger",
"direction": "in",
"queueName": "js-queue-items",
"connection": "AzureWebJobsStorage"
}
]
}
local.settings.json:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "python"
}
}
我该如何解决这个问题?
没有使用 azure time 触发器连接到队列存储的固有方法,即队列存储会将时间触发器视为任何其他控制台应用程序或任何其他试图连接到存储并添加的程序留言。
因此,我们必须使用连接字符串以经典方式添加消息。
connectionstring = ""
queuename = ""
messages = ""
queueClient = QueueClient.from_connection_string(connectionString, queueName)
queueClient.send_message(message)
因此,when queue trigger在启动期间只会启动一次,并保持空闲状态,因为没有添加消息,因此不会被触发。
请参阅 timetrigger and queuetrigger and how to add message to queue using python 上的文档。