我有一個 Azure 功能專案,它向 Azure 服務總線佇列發送訊息。這行得通。我可以在 Azure 上看到進來的訊息。
我有另一個 Azure 函式專案,然后接收并使用該訊息。盡管成功觸發了服務總線觸發器,但對消費者的以下呼叫總是中斷。
啟動看起來像這樣:
namespace MassTransitTest.PushNotificationFunction
{
public class Startup : FunctionsStartup
{
private IConfigurationRoot config;
public override void Configure(IFunctionsHostBuilder builder)
{
builder.Services.AddScoped<SendPushNotification>();
builder.Services.AddMassTransitForAzureFunctions(cfg =>
{
cfg.AddConsumersFromNamespaceContaining<ConsumerNamespace>();
});
}
}
}
我的消費者看起來像這樣:
namespace MassTransitTest.PushNotificationFunction.ServiceBusTemp
{
public class EnergyBudgetExceededConsumer : IConsumer<EnergyBudgetExceeded>
{
public async Task Consume(ConsumeContext<EnergyBudgetExceeded> context)
{
LogContext.Debug?.Log("Successfully consumed message");
}
}
}
使用結構命名空間助手:
namespace MassTransitTest.PushNotificationFunction.ServiceBusTemp
{
public struct ConsumerNamespace
{
}
}
消費者使用以下介面:
namespace MassTransitTest.PushNotificationFunction.MessageModels
{
public interface EnergyBudgetExceeded
{
string TestProperty { get; }
}
}
接收器函式如下所示:
public class SendPushNotification : BaseFunction
{
private readonly IMessageReceiver _receiver;
public SendPushNotification(IMessageReceiver receiver)
{
_receiver = receiver;
}
[FunctionName("EnergyBudgetExceeded")]
public Task EnergyBudgetExceeded([ServiceBusTrigger("test-queue")]
ServiceBusReceivedMessage message, CancellationToken cancellationToken)
{
return _receiver.HandleConsumer<EnergyBudgetExceededConsumer>("test-queue", message, cancellationToken);
}
}
上面的函式成功命中,但隨后未能在“HandleConsumer”方法上呼叫消費者并拋出將訊息放入 DL 佇列的錯誤。

可以在此處查看失敗訊息的示例:
{
"messageId": "4c030000-306b-1065-1a55-08da035849d1",
"conversationId": "4c030000-306b-1065-3928-08da035849d7",
"sourceAddress": "sb://fakeurlservicebus.servicebus.windows.net/LAP16844_func_bus_joboyybopcegm7rhbdpygsnnyh?autodelete=300",
"destinationAddress": "sb://blainetestservicebus.servicebus.windows.net/test-queue",
"messageType": [
"urn:message:MassTransitTest.EnergyService.Functions:EnergyBudgetExceeded BlaineTestMessage"
],
"message": {
"testProperty": "Energy budget"
},
"sentTime": "2022-03-11T12:11:35.6792405Z",
"headers": {},
"host": {
"machineName": "LAP-16844",
"processName": "func",
"processId": 46740,
"assembly": "func",
"assemblyVersion": "3.0.3904.0",
"frameworkVersion": "3.1.20",
"massTransitVersion": "7.3.1.0",
"operatingSystemVersion": "Microsoft Windows NT 6.2.9200.0"
}
}
消費者看起來就像檔案建議的那樣在啟動時添加了它,我已經嘗試通過名稱明確參考它,但這也給出了同樣的錯誤。
我在這里遺漏了一些明顯的東西嗎?
我正在運行 Dot Net Core 3.1,并使用所有參考 MassTransit 庫的 V7.3.1。
uj5u.com熱心網友回復:
由于某種原因,您生成的訊息型別與消費者使用的訊息型別不匹配:
{
"messageType": [
"urn:message:MassTransitTest.EnergyService.Functions:EnergyBudgetExceeded BlaineTestMessage"
]
}
您生成的訊息型別是否實作了該訊息協定/介面?
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/441692.html
