用于会话的 Azure WebJob ServiceBusTrigger

Posted

技术标签:

【中文标题】用于会话的 Azure WebJob ServiceBusTrigger【英文标题】:Azure WebJob ServiceBusTrigger for Sessions 【发布时间】:2015-08-26 17:25:31 【问题描述】:

我知道可以从服务总线队列接收消息,例如:

public static void ProcessQueueMessage([ServiceBusTrigger("inputqueue")] string message, TextWriter logger)

但是还有一种方法可以通过触发器属性接收会话吗? ServiceBusSessionTrigger 之类的?

通常人们会接受这样的会话:

var session = queueClient.AcceptMessageSession();

但我更喜欢 WebJob SDK 来处理一次处理多个会话的方式。

编辑: 好像目前不支持这个:see github for feature request

编辑 2: 似乎他们是working on this

【问题讨论】:

嗨@Zenuka,我也有这个问题。请问你最后是怎么解决的? @JasonSteele,我不知道我用哪个博客/教程/视频来实现它,比如 'var session = queueClient.AcceptMessageSession()' 但我认为你可以以此为指导:@ 987654323@ 【参考方案1】:

3.1.0-beta3 版本中的这个 nuget Microsoft.Azure.WebJobs.Extensions.ServiceBus 支持 azure 函数中的会话。当你安装这个 nuget 时, 您将能够像下面的代码一样使用它 [ServiceBusTrigger("testsessionqueue", Connection = "serviceBusConnectionString", IsSessionsEnabled = true)]

在那里你可以找到 nuget:Nuget 这是一个 github 问题:github

请记住,它仍然是测试版

【讨论】:

那么我们可以获取属于同一会话的所有消息吗?怎么样? 这没有帮助。您可以将具有特定会话的所有消息转发到队列吗? 您需要将 sessionId 作为属性提供给您的消息,并确保您的队列或主题支持会话,然后 Azure 服务总线将使用会话功能。支持会话的 Azure 函数只是一个端点,所以它只按 FIFO 顺序抓取消息。 有关会话的更多详细信息,您可以在 msdn link 上找到它是关于 seesion 的主要句子:“在会话感知队列或订阅中,当至少有一条带有会话 SessionId 的消息时,会话就存在了. 一旦一个会话存在, 没有定义会话何时过期或消失的时间或 API. 理论上, 一个会话今天可以收到一条消息, 一年后的下一条消息, 如果 SessionId 匹配, 会话是从服务总线的角度来看也是如此。” 请注意,任何前来查看此功能现已发布且不再处于测试阶段的人。【参考方案2】:

目前您无法通过触发器属性接收会话,但有一个GitHub feature request。如果这对很多人有用,那么将其融入核心 ServiceBus 程序集就很有意义。

【讨论】:

如何遍历会话中的所有消息? 此功能现已发布github.com/Azure/azure-functions-servicebus-extension/issues/…

以上是关于用于会话的 Azure WebJob ServiceBusTrigger的主要内容,如果未能解决你的问题,请参考以下文章

Azure 触发的 Webjob - 检测 webjob 何时停止

禁用触发的 Azure WebJob

Laravel 队列和 Azure WebJob

Azure - 将 WCF 服务作为 WebJob 运行

在 azure 中创建 webjob 时出现 python 包安装错误

使用 WebJob 将 Web 应用程序发布到 Azure 时卡住