Udostępnij za pośrednictwem


Omówienie powiązania wyjściowego RabbitMQ dla usługi Azure Functions

Uwaga

Powiązania RabbitMQ są w pełni obsługiwane tylko w przypadku planów Premium i Dedykowanych . Użycie nie jest obsługiwane.

Użyj powiązania danych wyjściowych RabbitMQ, aby wysyłać komunikaty do kolejki RabbitMQ.

Aby uzyskać informacje na temat konfiguracji i konfiguracji, zobacz omówienie.

Przykład

Funkcję języka C# można utworzyć przy użyciu jednego z następujących trybów języka C#:

  • Model izolowanego procesu roboczego: skompilowana funkcja języka C#, która jest uruchamiana w procesie roboczym izolowanym od środowiska uruchomieniowego. Proces izolowanego procesu roboczego jest wymagany do obsługi funkcji języka C# uruchomionych w wersjach LTS i innych niż LTS platformy .NET oraz programu .NET Framework.
  • Model przetwarzania: skompilowana funkcja języka C#, która działa w tym samym procesie co środowisko uruchomieniowe usługi Functions.
  • Skrypt języka C#: używany głównie podczas tworzenia funkcji języka C# w witrynie Azure Portal.

Ważne

Wsparcie zostanie zakończone dla modelu procesu 10 listopada 2026 r. Zdecydowanie zalecamy przeprowadzenie migracji aplikacji do izolowanego modelu procesu roboczego w celu uzyskania pełnej obsługi.

[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;
}

Poniższa funkcja Java używa @RabbitMQOutput adnotacji z typów Java RabbitMQ, aby opisać konfigurację powiązania wyjściowego kolejki RabbitMQ. Funkcja wysyła komunikat do kolejki RabbitMQ po wyzwoleniu przez timerTrigger co 5 minut.

@FunctionName("RabbitMQOutputExample")
public void run(
@TimerTrigger(name = "keepAliveTrigger", schedule = "0 */5 * * * *") String timerInfo,
@RabbitMQOutput(connectionStringSetting = "rabbitMQConnectionAppSetting", queueName = "hello") OutputBinding<String> output,
final ExecutionContext context) {
    output.setValue("Some string");
}

Poniższy przykład przedstawia powiązanie wyjściowe RabbitMQ w pliku function.json i funkcję JavaScript, która używa powiązania. Funkcja odczytuje komunikat z wyzwalacza HTTP i zwraca go do kolejki RabbitMQ.

Oto dane powiązania w pliku function.json :

{
    "bindings": [
        {
            "type": "httpTrigger",
            "direction": "in",
            "authLevel": "function",
            "name": "input",
            "methods": [
                "get",
                "post"
            ]
        },
        {
            "type": "rabbitMQ",
            "name": "outputMessage",
            "queueName": "outputQueue",
            "connectionStringSetting": "rabbitMQConnectionAppSetting",
            "direction": "out"
        }
    ]
}

Oto kod JavaScript:

module.exports = async function (context, input) {
    context.bindings.outputMessage = input.body;
};

W poniższym przykładzie pokazano powiązanie wyjściowe RabbitMQ w pliku function.json i funkcję języka Python, która używa powiązania. Funkcja odczytuje komunikat z wyzwalacza HTTP i zwraca go do kolejki RabbitMQ.

Oto dane powiązania w pliku function.json :

{
    "scriptFile": "__init__.py",
    "bindings": [
        {
            "authLevel": "function",
            "type": "httpTrigger",
            "direction": "in",
            "name": "req",
            "methods": [
                "get",
                "post"
            ]
        },
        {
            "type": "http",
            "direction": "out",
            "name": "$return"
        },​​
        {
            "type": "rabbitMQ",
            "name": "outputMessage",
            "queueName": "outputQueue",
            "connectionStringSetting": "rabbitMQConnectionAppSetting",
            "direction": "out"
        }
    ]
}

W _init_.py:

import azure.functions as func

def main(req: func.HttpRequest, outputMessage: func.Out[str]) -> func.HttpResponse:
    input_msg = req.params.get('message')
    outputMessage.set(input_msg)
    return 'OK'

Atrybuty

Biblioteki języka C# procesu roboczego zarówno w procesie przetwarzania procesowego, jak i izolowanego, używają atrybutu do zdefiniowania funkcji. Zamiast tego skrypt języka C# używa pliku konfiguracji function.json.

Konstruktor atrybutu przyjmuje następujące parametry:

Parametr Opis
QueueName Nazwa kolejki, z której mają być odbierane komunikaty.
Nazwa hosta Nazwa hosta kolejki, na przykład 10.26.45.210. Ignorowane w przypadku używania polecenia ConnectStringSetting.
UserNameSetting Nazwa ustawienia aplikacji zawierającego nazwę użytkownika, aby uzyskać dostęp do kolejki, na przykład UserNameSetting: "%< UserNameFromSettings >%". Ignorowane w przypadku używania polecenia ConnectStringSetting.
PasswordSetting Nazwa ustawienia aplikacji zawierającego hasło umożliwiające dostęp do kolejki, na przykład PasswordSetting: "%< PasswordFromSettings >%". Ignorowane w przypadku używania polecenia ConnectStringSetting.
ConnectionStringSetting Nazwa ustawienia aplikacji zawierającego kolejkę komunikatów RabbitMQ parametry połączenia. Wyzwalacz nie będzie działać po określeniu parametry połączenia bezpośrednio za pomocą ustawienia aplikacji. Jeśli na przykład ustawiono ConnectionStringSetting: "rabbitMQConnection"wartość , w local.settings.json i w aplikacji funkcji potrzebne jest ustawienie takie jak "RabbitMQConnection" : "< ActualConnectionstring >".
Port Pobiera lub ustawia używany port. Wartość domyślna to 0, co wskazuje domyślne ustawienie portu klienta RabbitMQ.5672

W bibliotekach klas języka C# użyj atrybutu RabbitMQTrigger .

RabbitMQTrigger Oto atrybut w sygnaturze metody dla izolowanej biblioteki procesów roboczych:

[Function(nameof(RabbitMQFunction))]
[RabbitMQOutput(QueueName = "destinationQueue", ConnectionStringSetting = "RabbitMQConnection")]
public static string Run([RabbitMQTrigger("queue", ConnectionStringSetting = "RabbitMQConnection")] string item,
    FunctionContext context)
{

Adnotacje

Adnotacja RabbitMQOutput umożliwia utworzenie funkcji uruchamianej po utworzeniu komunikatu RabbitMQ.

Adnotacja obsługuje następujące ustawienia konfiguracji:

Ustawienie opis
queueName Nazwa kolejki, z której mają być odbierane komunikaty.
nazwa hosta Nazwa hosta kolejki, na przykład 10.26.45.210. Ignorowane w przypadku używania polecenia ConnectStringSetting.
userNameSetting Nazwa ustawienia aplikacji zawierającego nazwę użytkownika, aby uzyskać dostęp do kolejki, na przykład UserNameSetting: "%< UserNameFromSettings >%". Ignorowane w przypadku używania polecenia ConnectStringSetting.
passwordSetting Nazwa ustawienia aplikacji zawierającego hasło umożliwiające dostęp do kolejki, na przykład PasswordSetting: "%< PasswordFromSettings >%". Ignorowane w przypadku używania polecenia ConnectStringSetting.
connectionStringSetting Nazwa ustawienia aplikacji zawierającego kolejkę komunikatów RabbitMQ parametry połączenia. Wyzwalacz nie będzie działać po określeniu parametry połączenia bezpośrednio za pomocą ustawienia aplikacji. Jeśli na przykład ustawiono ConnectionStringSetting: "rabbitMQConnection"wartość , w local.settings.json i w aplikacji funkcji potrzebne jest ustawienie takie jak "RabbitMQConnection" : "< ActualConnectionstring >".
port Pobiera lub ustawia używany port. Wartość domyślna to 0, co wskazuje domyślne ustawienie portu klienta RabbitMQ.5672

Zobacz przykład powiązania wyjściowego, aby uzyskać więcej szczegółów.

Konfigurowanie

W poniższej tabeli opisano właściwości konfiguracji powiązania ustawione w pliku function.json .

właściwość function.json opis
type Musi być ustawiona wartość RabbitMQ.
direction Musi być ustawiona wartość out.
name Nazwa zmiennej reprezentującej kolejkę w kodzie funkcji.
queueName Nazwa kolejki do wysyłania komunikatów.
nazwa hosta Nazwa hosta kolejki, na przykład 10.26.45.210. Ignorowane w przypadku używania polecenia connectStringSetting.
userName Nazwa ustawienia aplikacji zawierającego nazwę użytkownika, aby uzyskać dostęp do kolejki, na przykład UserNameSetting: "< UserNameFromSettings >". Ignorowane w przypadku używania polecenia connectStringSetting.
hasło Nazwa ustawienia aplikacji zawierającego hasło dostępu do kolejki, takie jak UserNameSetting: "< UserNameFromSettings >". Ignorowane w przypadku używania polecenia connectStringSetting.
connectionStringSetting Nazwa ustawienia aplikacji zawierającego kolejkę komunikatów RabbitMQ parametry połączenia. Wyzwalacz nie będzie działać po określeniu parametry połączenia bezpośrednio zamiast za pomocą ustawienia aplikacji w pliku local.settings.json. Na przykład po ustawieniu connectionStringSetting: "rabbitMQConnection" zarówno w local.settings.json , jak i w aplikacji funkcji potrzebne jest ustawienie takie jak "rabbitMQConnection" : "< ActualConnectionstring >".
port Pobiera lub ustawia używany port. Wartość domyślna to 0, co wskazuje domyślne ustawienie portu klienta RabbitMQ.5672

Podczas tworzenia aplikacji lokalnie dodaj ustawienia aplikacji w pliku local.settings.json w kolekcji Values .

Zobacz sekcję Przykład, aby zapoznać się z kompletnymi przykładami.

Użycie

Typ parametru obsługiwany przez wyzwalacz RabbitMQ zależy od wersji środowiska uruchomieniowego usługi Functions, wersji pakietu rozszerzenia i używanej modalności języka C#.

Powiązania RabbitMQ obsługują obecnie tylko typy obiektów z możliwością serializacji i ciągów podczas uruchamiania w izolowanym procesie roboczym.

Pełny przykład można znaleźć w przykładzie języka C#.

Użyj następujących typów parametrów dla powiązania wyjściowego:

  • byte[] — Jeśli wartość parametru ma wartość null, gdy funkcja zakończy działanie, funkcja nie tworzy komunikatu.
  • string — Jeśli wartość parametru ma wartość null, gdy funkcja zakończy działanie, funkcja nie tworzy komunikatu.
  • POJO — Jeśli wartość parametru nie jest sformatowana jako obiekt Java, zostanie wyświetlony błąd.

Komunikat kolejki jest dostępny za pośrednictwem lokalizacji, w context.bindings.<NAME> której <NAME> jest zgodna z nazwą zdefiniowaną w function.json. Jeśli ładunek to JSON, wartość jest deserializowana do obiektu.

Zapoznaj się z przykładem języka Python.

Następne kroki