分享方式:


Azure Functions 的 RabbitMQ 觸發程式概觀

注意

只有 Premium 和 Dedicated 方案才完全支援 RabbitMQ 系結。 不支援取用。

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

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

範例

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

  • 隔離的背景工作模型:在與運行時間隔離的背景工作進程中執行的已編譯 C# 函式。 需要隔離的背景工作進程,才能支援在 LTS 和非 LTS 版本 .NET 和 .NET Framework 上執行的 C# 函式。
  • 同進程模型:在與 Functions 運行時間相同的進程中執行的已編譯 C# 函式。
  • C# 文稿:主要是在 Azure 入口網站 中建立 C# 函式時使用。
[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 要接收訊息的佇列名稱。
hostName 佇列的主機名,例如 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 要接收訊息的佇列名稱。
hostName 佇列的主機名,例如 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端點的佇列和交換:

下一步