我正在嘗試偵聽可以包含具有多種事件型別的訊息的服務總線。當訊息到達時,我想根據事件型別對其進行處理。我有 2 個 azure 函式來處理不同的事件型別訊息,但是當一個函式接收到訊息時,另一個函式不會被觸發。是否可以同時觸發它們并讓它們決定由哪一個處理訊息?
這是一些示例代碼,它們位于 2 個單獨的專案中:
[FunctionName("Function1")]
public async Task RunAsync(
[ServiceBusTrigger("queueName", Connection = "connectionName")]
Message message,
MessageReceiver messageReceiver,
ILogger log)
{
var body = Encoding.Default.GetString(message.Body);
var messageType = _helper.GetMessageType(body);
if (messageType is not MessageType.Type1)
return;
// business logic
await messageReceiver.CompleteAsync(message.SystemProperties.LockToken);
}
[FunctionName("Function2")]
public async Task RunAsync(
[ServiceBusTrigger("queueName", Connection = "connectionName")]
Message message,
MessageReceiver messageReceiver,
ILogger log)
{
var body = Encoding.Default.GetString(message.Body);
var messageType = _helper.GetMessageType(body);
if (messageType is not MessageType.Type2)
return;
// business logic
await messageReceiver.CompleteAsync(message.SystemProperties.LockToken);
}
uj5u.com熱心網友回復:
使用 Azure 服務總線佇列是不可能的,因為佇列只能有一個使用者。
更好的方法是使用
uj5u.com熱心網友回復:
有幾種方法,每種方法都取決于您的要求。
正如@Gaurav 所建議的那樣,主題是兩個訂閱主題(一個是函式1,另一個是函式2)的最佳解決方案,并且在大多數情況下都有效。另請記住,處理訊息是單個訂閱者,它失敗或成功僅取決于該訂閱,而不是跨訂閱。
現在,如果您仍然想堅持使用 Queue,那么還有一種方法。在這種情況下,您必須像使用型別一樣在訊息中傳遞額外的元資料。
var body = Encoding.Default.GetString(message.Body);
var messageType = _helper.GetMessageType(body);
if (messageType is MessageType.Type1)
{
// Call handler/method that process Type1 message.
}
else if (messageType is MessageType.Type2)
{
// Call handler/method that process Type2 message.
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/456305.html
上一篇:在非異步介面中添加異步
