是否可以监听具有多个azure功能的服务总线?

bri*_*ete 1 .net c# azure azureservicebus azure-functions

我正在尝试侦听可以包含具有多种事件类型的消息的服务总线。当消息到达时,我想根据事件类型对其进行处理。我有 2 个 azure 函数来处理不同的事件类型消息,但是当一个函数接收到消息时,另一个函数不会被触发。是否可以同时触发它们并让它们决定由哪一个处理消息?

这是一些示例代码,它们位于两个独立的项目中:

[FunctionName("Function1")]
public async Task RunAsync(
    [ServiceBusTrigger("queueName", Connection = "connectionName")]
    Message message,
    MessageReceiver messageReceiver,
    ILogger log)
{
    var body = Encoding.Default.GetString(message.Body);
    var messageType = _helper.GetMessageType(body);

    if (messageType is not MessageType.Type1)
        return;

    // business logic
    await messageReceiver.CompleteAsync(message.SystemProperties.LockToken);
}

[FunctionName("Function2")]
public async Task RunAsync(
    [ServiceBusTrigger("queueName", Connection = "connectionName")]
    Message message,
    MessageReceiver messageReceiver,
    ILogger log)
{
    var body = Encoding.Default.GetString(message.Body);
    var messageType = _helper.GetMessageType(body);

    if (messageType is not MessageType.Type2)
        return;

    // business logic

    await messageReceiver.CompleteAsync(message.SystemProperties.LockToken);
}
Run Code Online (Sandbox Code Playgroud)

Gau*_*tri 7

对于 Azure 服务总线队列,这是不可能的,因为队列只能有一个使用者。

更好的方法是使用Azure Service Bus Topics and Subscriptions. 您可以将消息发送到主题,然后创建订阅过滤规则,以便消息发送到适当的订阅。

然后,您可以让 2 个 Azure Functions,每个函数监听一个单独的订阅。