Azure Functions 的 RabbitMQ 觸發程式概觀

注意

RabbitMQ 系結僅支援 進階版 和 Dedicated 方案。 不支援取用。

使用RabbitMQ觸發程式來回應RabbitMQ佇列中的訊息。

如需安裝和組態詳細數據的詳細資訊,請參閱概

範例

您可以使用下列其中一種 C# 模式來建立 C# 函式:

  • 隔離的背景工作模型:在與運行時間隔離的背景工作進程中執行的已編譯 C# 函式。 需要隔離的背景工作進程,才能支援在 LTS 和非 LTS 版本 .NET 和 .NET Framework 上執行的 C# 函式。
  • 同進程模型:在與 Functions 運行時間相同的進程中執行的已編譯 C# 函式。
  • C# 文稿:主要用於在 Azure 入口網站 中建立 C# 函式時使用。

重要

支援將於 2026 年 11 月 10 日結束進程模型。 強烈建議您將 應用程式移轉至隔離的背景工作模型 ,以取得完整支援。

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

下列 Java 函式會使用 @RabbitMQTrigger Java RabbitMQ 類型的註釋來描述 RabbitMQ 佇列觸發程式的組態。 函式會擷取放在佇列上的訊息,並將它新增至記錄。

@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);
}

下列範例示範function.json檔案中的RabbitMQ觸發程式系結,以及使用系結的JavaScript函式 函式會讀取並記錄RabbitMQ訊息。

以下是 function.json 檔案中的繫結資料:

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

以下是 JavaScript 腳本程式代碼:

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

下列範例示範如何透過觸發程式讀取RabbitMQ佇列訊息。

RabbitMQ 系結定義於類型設定為 RabbitMQTrigger的function.json中。

{​​
    "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)

屬性

進程內和隔離的背景工作進程 C# 連結庫都會使用 屬性來定義函式。 C# 文稿會改用 function.json組態檔

屬性的建構函式會採用下列參數:

參數 描述
QueueName 要接收訊息的佇列名稱。
HostName 佇列的主機名,例如 10.26.45.210。 使用 ConnectStringSetting時忽略。
UserNameSetting 包含要存取佇列之使用者名稱的應用程式設定名稱,例如 UserNameSetting: "%< UserNameFromSettings >%"。 使用 ConnectStringSetting時忽略。
PasswordSetting 包含存取佇列之密碼的應用程式設定名稱,例如 PasswordSetting: "%< PasswordFromSettings >%"。 使用 ConnectStringSetting時忽略。
ConnectionStringSetting 包含 RabbitMQ 消息佇列的應用程式設定名稱 連接字串。 當您直接透過應用程式設定指定 連接字串 時,觸發程式將無法運作。 例如,當您已設定 ConnectionStringSetting: "rabbitMQConnection"時,請在 local.settings.json 和函式應用程式中,您需要一個像是 "RabbitMQConnection" : "< ActualConnectionstring >"的設定。
通訊埠 取得或設定使用的埠。 默認為 0,這會指向 RabbitMQ 用戶端的預設埠設定 5672

C# 類別庫中,使用 RabbitMQTrigger 屬性。

以下是 RabbitMQTrigger 隔離背景工作進程連結庫的方法簽章中的屬性:

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

註釋

RabbitMQTrigger 注可讓您建立在建立RabbitMQ訊息時執行的函式。

註解支援下列組態選項:

參數 描述
queueName 要接收訊息的佇列名稱。
主機 名 佇列的主機名,例如 10.26.45.210。 使用 ConnectStringSetting時忽略。
userNameSetting 包含要存取佇列之使用者名稱的應用程式設定名稱,例如 UserNameSetting: "%< UserNameFromSettings >%"。 使用 ConnectStringSetting時忽略。
passwordSetting 包含存取佇列之密碼的應用程式設定名稱,例如 PasswordSetting: "%< PasswordFromSettings >%"。 使用 ConnectStringSetting時忽略。
connectionStringSetting 包含 RabbitMQ 消息佇列 連接字串 的應用程式設定名稱。 當您透過應用程式設定直接指定 連接字串 時,觸發程式將無法運作。 例如,當您已設定 ConnectionStringSetting: "rabbitMQConnection"時,請在 local.settings.json 和函式應用程式中,您需要一個像是 "RabbitMQConnection" : "< ActualConnectionstring >"的設定。
port 取得或設定使用的埠。 默認為 0,這會指向 RabbitMQ 用戶端的預設埠設定 5672

組態

下表說明您在 function.json 檔案中設定的繫結設定屬性。

function.json 屬性 描述
type 必須設定為 RabbitMQTrigger
direction 必須設定為 in
name 代表函式程式碼中佇列的變數名稱。
queueName 要接收訊息的佇列名稱。
主機 名 佇列的主機名,例如 10.26.45.210。 使用 connectStringSetting時忽略。
userNameSetting 包含要存取佇列之使用者名稱的應用程式設定名稱,例如 UserNameSetting: "%< UserNameFromSettings >%"。 使用 connectStringSetting時忽略。
passwordSetting 包含存取佇列之密碼的應用程式設定名稱,例如 PasswordSetting: "%< PasswordFromSettings >%"。 使用 connectStringSetting時忽略。
connectionStringSetting 包含 RabbitMQ 消息佇列的應用程式設定名稱 連接字串。 當您透過應用程式設定直接指定 連接字串 時,觸發程式將無法運作。 例如,當您已設定 connectionStringSetting: "rabbitMQConnection"時,請在 local.settings.json 和函式應用程式中,您需要一個像是 "rabbitMQConnection" : "< ActualConnectionstring >"的設定。
port 取得或設定使用的埠。 默認為 0,這會指向 RabbitMQ 用戶端的預設埠設定 5672

當您在本機開發時,請在集合中的 local.settings.json 檔案Values中新增應用程式設定。

如需完整範例, 請參閱範例一節

使用方式

RabbitMQ 觸發程式所支援的參數類型取決於所使用的 C# 形式。

RabbitMQ 系結目前僅支援在隔離進程中執行時的字串和可串行化物件類型。

如需完整的範例,請參閱 C# 範例

請參閱 Java 批注

佇列訊息可透過 context.bindings.<NAME> 符合function.json中定義的名稱來 <NAME> 取得。 如果承載為 JSON,該值會還原串行化為 物件。

請參閱 Python 範例

寄不出的信件佇列

無法從 RabbitMQ 觸發程式控制或設定寄不出的信件佇列和交換。 若要使用寄不出的信件佇列,請在 RabbitMQ 中預先設定觸發程式所使用的佇列。 請參閱RabbitMQ檔

host.json 設定

本節說明 2.x 版和更新版本中此系結可用的組態設定。 host.json檔案中的 設定 會套用至函式應用程式實例中的所有函式。 下列範例host.json檔案只包含此系結的 2.x+ 版設定。 如需 2.x 版和更新版本中函式應用程式組態設定的詳細資訊,請參閱 Azure Functions 的host.json參考。

{
    "version": "2.0",
    "extensions": {
        "rabbitMQ": {
            "prefetchCount": 100,
            "queueName": "queue",
            "connectionString": "amqp://user:password@url:port",
            "port": 10
        }
    }
}
屬性 預設 描述
prefetchCount 30 取得或設定訊息接收者可以同時要求和快取的訊息數目。
queueName n/a 要接收訊息的佇列名稱。
connectionString n/a RabbitMQ 消息佇列 連接字串。 此處直接指定 連接字串,而不是透過應用程式設定。
port 0 (如果使用 connectionString 則忽略)取得或設定使用的埠。 默認值為 0,指向 rabbitmq 用戶端的預設埠設定:5672。

本機測試

注意

connectionString 的優先順序高於 “hostName”、“userName” 和 “password”。 如果全部設定,connectionString 將會覆寫其他兩個。

如果您要在本機測試而不需 連接字串,則應該在 host.json“rabbitMQ” 區段中設定 “hostName” 設定和 “userName” 和 “password” :

{
    "version": "2.0",
    "extensions": {
        "rabbitMQ": {
            ...
            "hostName": "localhost",
            "username": "userNameSetting",
            "password": "passwordSetting"
        }
    }
}
屬性 預設 描述
hostName n/a (如果使用 connectionString 則忽略)
佇列的主機名(例如:10.26.45.210)
userName n/a (如果使用 connectionString 則忽略)
用來存取佇列的名稱
password n/a (如果使用 connectionString 則忽略)
存取佇列的密碼

啟用運行時間調整

為了讓RabbitMQ觸發程式向外延展至多個實例, 必須啟用運行時間調整監視 設定。

在入口網站中,您可以在函式應用程式的 [組態>函式運行時間設定] 下找到此設定。

VNETToggle

在 CLI 中,您可以使用下列命令來啟用 執行時間調整監視

az resource update -g <resource_group> -n <function_app_name>/config/web --set properties.functionsRuntimeScaleMonitoringEnabled=1 --resource-type Microsoft.Web/sites

監視RabbitMQ端點

若要監視特定RabbitMQ端點的佇列和交換:

下一步