我试图了解队列触发器和服务总线队列触发器之间的区别以及我需要哪一个!
我有一个用于创建和调度类的 asp.net mvc 站点,该站点将表示为数据库表中的一行。课程结束后,我想向所有学生发送一封电子邮件,要求他们评价他们的老师
据我所知,最好的方法是创建一个 Azure 函数来创建和发送电子邮件,但我不知道如何在特定的日期和时间触发该函数?
我使用队列触发器还是服务总线队列触发器?两者之间有什么区别,哪一种最适合我的场景?
如果课程被取消,我需要能够取消队列中的消息。
我用Python设计了一个Azure队列触发器函数,具有以下功能。
现在我的问题是当我在本地运行时这工作正常。但是在部署函数应用程序之后,如果我将消息添加到输入队列,则该函数不会触发。
检查了一切。这是我的 function.json 供参考。
我无法在文档中找到与此相关的任何内容,并且不确定我缺少什么。
{
"scriptFile": "__init__.py",
"bindings": [
{
"name": "msg",
"type": "queueTrigger",
"direction": "in",
"queueName": "input-messages-queue",
"connection": "AzureWebJobsStorage"
},
{
"type": "queue",
"direction": "out",
"name": "outputmessage",
"queueName": "output-responses-queue",
"connection": "AzureWebJobsStorage"
}
]
}Run Code Online (Sandbox Code Playgroud)
我正在尝试在本地运行天蓝色队列触发函数。我安装了 Azure 存储模拟器并运行命令“AzureStorageEmulator.exe init”以在“(localdb)\MSSQLLocalDB”服务器上创建“AzureStorageEmulatorDb59”数据库。
在我的具有队列触发功能的azure函数项目中,我有一个local.settings.json文件。应该在该文件中添加哪些设置以及连接字符串到底应该是什么以及应该在哪里添加它?下面提到我的队列触发功能。应该添加什么来代替“QueueTrigger”属性后面提到的“my-queue”?请在这件事上给予我帮助
[FunctionName("TestQTFunction")]
public static void Run([QueueTrigger("my-queue", Connection = "AzureQueueConnectionString")]string myQueueItem, ILogger log)
{
// Do something
}
Run Code Online (Sandbox Code Playgroud) 我们如何通过服务总线队列触发函数将服务总线队列消息移动到死信中
我已将队列触发的 Azure Webjobs 迁移到 Azure Functions。根据我的测量,使用函数从队列中取出消息的等待时间是 5 到 60 倍以上(是的)。
在 Webjob 领域,我观察到 BatchSize、NewBatchThreshold 和 MaxPollingInterval 处于默认值时,队列等待时间通常为亚秒级。
使用我的函数,我看到队列等待时间经常超过 45-60 秒。队列中的项目数与等待时间之间存在相关性。如果队列中的项目数为低个位数,则等待时间过长,即。60 秒以上。尽管我尝试了 BatchSize 和 NewBatchThreshold 的许多不同组合。
一些具体细节:
为了获得一些科学测量值,我检测了我的函数来记录消息排队的时间以及从队列中检索消息的时间,以获得经过的时间。为了进一步消除变量,我创建了几个完全空的函数——也就是说,队列触发方法的主体只包含记录时间的代码。我在这里也看到了大量的等待时间。
如果我采用队列触发方法并将它们复制并粘贴到 Azure webjob 中,队列等待时间将变为 1 秒或更短。
任何指导?
我是 Azure 函数的新手。我想设置一个队列触发函数来消耗队列中的项目。其中队列是与主队列分离的并行队列。
但当我运行它时,它不断显示:
Executed 'QueueTrigger2' (Failed, Id=33e2634c-1c00-4996-a81a-fec47c088d73, Duration=163ms)
[2022-06-21T18:38:48.866Z] System.Private.CoreLib: Exception while executing function: QueueTrigger2. Microsoft.Azure.WebJobs.Host: Exception binding parameter 'myQueueItem'. System.Private.CoreLib: The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or an illegal character among the padding characters.
Run Code Online (Sandbox Code Playgroud)
这是否意味着我的队列中的消息类型不正确?但它是来自主进程队列的并行队列。所以我确信这是正确的。或者我需要在输入之前进行一些转换?
谢谢。
我正在使用 host.json 文件中的以下配置在本地使用 QueueTrigger 测试我的 Azure 功能(面向 .Net Core 的 v2)
“队列”:{“batchSize”:1,“newBatchThreshold”:0}
目的是限制每个 Function App 实例一次只能处理一个队列 msg。
如果要最大程度地减少函数应用中队列触发函数的并行执行,可以将批处理大小设置为 1。此设置仅在函数应用在单个虚拟机 (VM) 上运行时消除并发。
在 host.json 文件中,有这些配置
{ "queues": { "maxPollingInterval": 2000, "visibilityTimeout": "00:00:30", "batchSize": 16, "maxDequeueCount": 5, "newBatchThreshold": 8 } }
在我们的例子中,我不是要消除并发性,而是要确保每个函数应用实例一次只能处理一个队列 msg。然后,如果我们横向扩展函数应用程序以在多个 VM 上运行,则保证每个 VM 一次仅处理一个队列 msg。更具体地说,计划是在应用服务计划下运行azure功能,而不是消耗计划(b/c你对消耗计划的控制很少),并设置Scale Out规则来监控队列,最多N 个实例 (VM)。这种设置允许我们让每个 VM 一次运行一个 azure 函数应用程序实例,最多 N 个 VM。
当我在本地测试时,我的 azure 函数总是同时从队列中获取多个消息,即使在 host.json 文件中使用“BatchSize: 1”配置也是如此。我想知道它是否是 b/c 我正在本地 Azure 函数运行时测试它。我还没有在 Azure 中测试过这个。希望它在 Azure 中按预期工作。
我正在尝试获取 Azure Web 作业队列中当前处理消息的消息 ID。找不到任何有关如何获取它的正确文档。
public static void ProcessQueueMessage([QueueTrigger("%testingQueue%")] TestingMessageModel testMessage, TextWriter log)
{
// want to do some logging for this particular triggered message using the messageid. How to get that?
}
Run Code Online (Sandbox Code Playgroud)
添加TestingMessageModel作为参考,它没有任何指导。我想使用 azure 在将消息放入队列时创建的 GUID。
public class TestingMessageModel
{
public int FromOrg {get; set;}
public DateTime BatchDate {get; set;}
public Payments[] payments {get; set;}
}
Run Code Online (Sandbox Code Playgroud) queuetrigger ×8
c# ×5
azure ×4
.net ×1
azure-queues ×1
dead-letter ×1
function ×1
servicebus ×1
webjob ×1