在Webjobs SDK 3.x中使用ServiceBusTrigger,Singleton属性可以使用UserProperty作为范围吗?

Using ServiceBusTrigger in the Webjobs SDK 3.x, can the Singleton attribute use a UserProperty as the scope?

我正在使用 ServiceBusTrigger 在收到消息时执行代码。我想使用 Singleton attribute 来限制哪些消息可以并行执行。此属性允许指定绑定到传入消息属性的范围,这样具有不同值的消息可以并行执行,但具有相同值的消息必须串行执行。

这在对传入消息对象(如 CorrelationId)使用顶级属性时有效。

示例

[Singleton("{CorrelationId}", SingletonScope.Function, Mode = SingletonMode.Function)]
public async Task HandleMessage(
    [ServiceBusTrigger("my-topic-name", "my-subscription-name"), ServiceBusAccount("my-account-name")]
    Message message,
    CancellationToken cancellationToken
)
{
    await Task.Yield();
}

我正在努力弄清楚的是如何使用消息上的用户属性实现相同的行为。这些存储在 Message 对象的 UserProperties 字典中。我没有看到用 Singleton 属性中的绑定语句引用这些的方法,但在将 SingletonServiceBusTrigger[ 组合时,这似乎是一个非常常见的用例=19=]

服务总线绑定在绑定表达式中公开 Message Metadata。所以,userProperties.<key> 应该可以解决问题。