Compartilhar via


Visão geral do gatilho RabbitMQ para o Azure Functions

Use o gatilho RabbitMQ para responder às mensagens de uma fila do RabbitMQ.

Observação

As associações do RabbitMQ só têm suporte total nos planos Elastic Premium e Dedicated (Serviço de Aplicativo). Os planos Flex Consumption e Consumption ainda não são compatíveis.

Não há suporte para associações do RabbitMQ no runtime do Azure Functions v1.x.

Para obter informações sobre a instalação e detalhes de configuração, confira a visão geral.

Exemplo

Você pode criar uma função C# usando um dos seguintes modos C#:

  • Modelo de trabalho isolado: função C# compilada executada em um processo de trabalho que está isolado do runtime. Um processo de trabalho isolado é necessário para dar suporte a funções C# em execução em LTS (suporte de longo prazo) e versões não LTS para .NET e .NET Framework.
  • Modelo em processo: função C# compilada que é executada no mesmo processo que o runtime do Azure Functions.
  • Script C#: usado principalmente ao criar funções C# no portal do Azure.
[Function(nameof(RabbitMQFunction))]
[RabbitMQOutput(QueueName = "destinationQueue", ConnectionStringSetting = "RabbitMQConnection")]
public static string Run([RabbitMQTrigger("queue", ConnectionStringSetting = "RabbitMQConnection")] string item,
    FunctionContext context)
{
    var logger = context.GetLogger(nameof(RabbitMQFunction));

    logger.LogInformation(item);

    var message = $"Output message created at {DateTime.Now}";
    return message;
}

A função Java a seguir usa a anotação @RabbitMQTrigger dos @RabbitMQTrigger para descrever a configuração para um gatilho de fila do RabbitMQ. A função captura a mensagem colocada na fila e a adiciona aos logs.

@FunctionName("RabbitMQTriggerExample")
public void run(
    @RabbitMQTrigger(connectionStringSetting = "rabbitMQConnectionAppSetting", queueName = "queue") String input,
    final ExecutionContext context)
{
    context.getLogger().info("Java HTTP trigger processed a request." + input);
}

O exemplo a seguir mostra uma associação do gatilho RabbitMQ em um arquivo function.json e a função JavaScript que usa a associação. A função lê e registra uma mensagem RabbitMQ.

Aqui estão os dados de associação no arquivo function.json:

{​​
    "bindings": [
        {​​
            "name": "myQueueItem",
            "type": "rabbitMQTrigger",
            "direction": "in",
            "queueName": "queue",
            "connectionStringSetting": "rabbitMQConnectionAppSetting"
        }​​
    ]
}​​

Este é o código do script do JavaScript:

module.exports = async function (context, myQueueItem) {​​
    context.log('JavaScript RabbitMQ trigger function processed work item', myQueueItem);
}​​;

O exemplo a seguir demonstra como ler uma mensagem da fila do RabbitMQ por meio de um gatilho.

Uma associação do RabbitMQ é definida em function.json, onde tipo é definido como RabbitMQTrigger.

{​​
    "scriptFile": "__init__.py",
    "bindings": [
        {​​
            "name": "myQueueItem",
            "type": "rabbitMQTrigger",
            "direction": "in",
            "queueName": "queue",
            "connectionStringSetting": "rabbitMQConnectionAppSetting"
        }​​
    ]
}​​
import logging
import azure.functions as func

def main(myQueueItem) -> None:
    logging.info('Python RabbitMQ trigger function processed a queue item: %s', myQueueItem)

Os exemplos do PowerShell não estão disponíveis no momento.

Atributos

Tanto o processo de trabalho isolado quanto as bibliotecas C# em processo usam RabbitMQTriggerAttribute para definir a função, em que as propriedades específicas do atributo dependem da versão da extensão.

O construtor do atributo aceita estes parâmetros:

Parâmetro Descrição
Nome da Fila O nome da fila da qual receber mensagens.
HostName Esse parâmetro não tem mais suporte e é ignorado. Ele será removido em uma versão futura.
ConnectionStringSetting O nome da configuração do aplicativo que contém a cadeia de conexão do servidor RabbitMQ. Essa configuração usa apenas um nome de chave de configuração do aplicativo, não é possível definir diretamente um valor de cadeia de conexão. Para obter mais informações, consulte Conexões.
UserNameSetting Esse parâmetro não tem mais suporte e é ignorado. Ele será removido em uma versão futura.
PasswordSetting Esse parâmetro não tem mais suporte e é ignorado. Ele será removido em uma versão futura.
Porta Obtém ou define a porta utilizada. O padrão é 0, que aponta para a configuração de porta padrão do cliente RabbitMQ de 5672.

Anotações

A anotação RabbitMQTrigger permite que você crie uma função que é executada quando uma mensagem do RabbitMQ é criada.

A anotação dá suporte às seguintes opções de configuração:

Parâmetro Descrição
queueName O nome da fila da qual receber mensagens.
connectionStringSetting O nome da configuração do aplicativo que contém a cadeia de conexão do servidor RabbitMQ. Essa configuração usa apenas um nome de chave de configuração do aplicativo, não é possível definir diretamente um valor de cadeia de conexão. Para obter mais informações, consulte Conexões.
disableCertificateValidation Valor booliano que pode ser definido como indicando que a true validação do certificado deve ser desabilitada. O valor padrão é false. Não recomendado para produção. Não se aplica quando o SSL está desabilitado.

Configuração

A tabela a seguir explica as propriedades de configuração de associação que você define no arquivo function.json.

Propriedade function.json Descrição
tipo Deve ser definido como RabbitMQTrigger.
direção Deve ser definido como in.
nome O nome da variável que representa a fila no código de função.
queueName O nome da fila da qual receber mensagens.
connectionStringSetting O nome da configuração do aplicativo que contém a cadeia de conexão do servidor RabbitMQ. Essa configuração usa apenas um nome de chave de configuração do aplicativo, não é possível definir diretamente um valor de cadeia de conexão. Para obter mais informações, consulte Conexões.
disableCertificateValidation Valor booliano que pode ser definido como indicando que a true validação do certificado deve ser desabilitada. O valor padrão é false. Não recomendado para produção. Não se aplica quando o SSL está desabilitado.

Quando você estiver desenvolvendo localmente, adicione as configurações do aplicativo no arquivo local.settings.json na coleção Values.

Consulte a Seção de exemplo para obter exemplos completos.

Uso

O tipo de parâmetro compatível com o gatilho RabbitMQ depende da modalidade C# usada.

Atualmente, as vinculações RabbitMQ são compatíveis apenas com tipos de objeto serializáveis e de cadeia de caracteres ao executar em um processo isolado.

A mensagem da fila está disponível por meio de context.bindings.<NAME>, em que <NAME> corresponde ao nome definido em function.json. Se o conteúdo for JSON, o valor será desserializado em um objeto.

Conexões

Importante

A associação RabbitMQ não dá suporte à autenticação e identidades gerenciadas do Microsoft Entra. Você pode usar o Azure Key Vault para gerenciar centralmente suas cadeias de conexão do RabbitMQ. Para saber mais, consulte Gerenciar conexões.

A partir da versão 2.x da extensão, hostNameuserNameSettingpasswordSetting não há mais suporte para definir uma conexão com o servidor RabbitMQ. Em vez disso, você deve usar connectionStringSetting.

A connectionStringSetting propriedade só pode aceitar o nome de um par chave-valor nas configurações do aplicativo. Você não pode definir diretamente um valor de cadeia de conexão na associação.

Por exemplo, quando você definiu connectionStringSettingrabbitMQConnection como em sua definição de associação, seu aplicativo de funções deve ter uma configuração de aplicativo nomeada rabbitMQConnection que retorna um valor de conexão como amqp://myuser:***@contoso.rabbitmq.example.com:5672 ou uma referência do Azure Key Vault.

Ao executar localmente, você também deve ter o valor da chave para connectionStringSetting definido em seu arquivo local.settings.json . Caso contrário, seu aplicativo não poderá se conectar ao serviço do computador local e ocorrerá um erro.

Filas de mensagens mortas

As filas e as trocas de mensagens mortas não podem ser controladas ou configuradas no gatilho RabbitMQ. Para usar filas de mensagens mortas, pré-configure a fila usada pelo gatilho em RabbitMQ. Consulte a documentação RabbitMQ.

Habilitar dimensionamento de tempo de execução

Para que o gatilho RabbitMQ escale várias instâncias, a configuração de monitoramento de escala de tempo de execução deve ser habilitada.

No portal, essa configuração pode ser encontrada em Configuração>Configurações de tempo de execução da função para o aplicativo de funções.

VNETToggle

Na CLI do Azure, você pode habilitar o Monitoramento de Escala de Runtime usando este comando:

az resource update -resource-group <RESOURCE_GROUP> -name <APP_NAME>/config/web \
    --set properties.functionsRuntimeScaleMonitoringEnabled=1 \
    --resource-type Microsoft.Web/sites

Monitorando um ponto de extremidade RabbitMQ

Para monitorar as filas e trocas para um determinado ponto de extremidade RabbitMQ:

Artigo relacionado