Azure Functions 的 RabbitMQ 觸發程式概觀
注意
只有 Premium 和 Dedicated 方案才完全支援 RabbitMQ 系結。 不支援取用。
使用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 | 要接收訊息的佇列名稱。 |
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
中新增應用程式設定。
如需完整範例,請參閱範例一節。
使用方式
請參閱 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觸發程式向外延展至多個實例, 必須啟用運行時間調整監視 設定。
在入口網站中,您可以在函式應用程式的 [組態>函式運行時間設定] 下找到此設定。
在 CLI 中,您可以使用下列命令來啟用 執行時間調整監視 :
az resource update -g <resource_group> -n <function_app_name>/config/web --set properties.functionsRuntimeScaleMonitoringEnabled=1 --resource-type Microsoft.Web/sites
監視RabbitMQ端點
若要監視特定RabbitMQ端點的佇列和交換:
- 啟用 RabbitMQ 管理外掛程式
- 流覽至 http://{node-hostname}:15672,並使用您的使用者名稱和密碼登入。