在MassTransit中从传奇发布消息时,找不到消息实体异常

问题描述 投票:0回答:1

[在将MassTransit传输设置为Azure Service Bus的情况下引发消息时,将引发以下异常,并且在错误队列上放置了一个错误:

Put token failed. status-code: 404, status-description:
The messaging entity 'sb://xxxx-prod-bus.servicebus.windows.net/Api/StateMachine-MessageEvent' could not be found.

但是,如果传奇再次运行,则消息已成功发布。在查看了试图将消息发布到的主题之后,第一次不存在该主题,但似乎随后创建了该主题,但是,将该主题的Auto Delete On Idle属性设置为5分钟,因此经过一段时间处于不活动状态时,主题消失,并且错误再次出现。enter image description here

使用接口和用于包装传奇实例状态的类型,将消息协定声明为与MassTransit文档(https://masstransit-project.com/usage/sagas/automatonymous.html#publish)完全相同:

public interface ExampleMessage
{
    Guid OrderId { get; }    
}

private class ExampleMessageEvent :
    ExampleMessage
{
    public ExampleMessageEvent(Instance instance)
    {
        SomeProp = instance.SomeProp;
    }

    public string SomeProp { get; }    
}

[其他处理程序仅订阅ExampleMessage的接口,所以我希望即使没有在concreate类型主题上进行监听的情况下,发布也可以继续进行?

避免这些问题的最佳方法是什么?我尝试使用重试来查看它是否重新创建了交换,但是重试中什么也没有创建。

似乎临时主题的默认值是从here获得5分钟。但是,我希望如果发布消息时主题不存在,它将再次被创建?

引发的完整异常消息是:

Put token failed. status-code: 404, status-description: The messaging entity 'sb://something-prod-bus.servicebus.windows.net/Something.Api/SomethingStateMachine-SomethingRequiredEvent' could not be found. To know more visit https://aka.ms/sbResourceMgrExceptions.  TrackingId:2f9c9776-08d5-41ab-81ba-3ec9011c2a90_G49, SystemTracker:something-prod-bus.servicebus.windows.Something.Api/SomethingStateMachine-SomethingRequiredEvent, Timestamp:2019-12-13T23:13:46.

以及完整堆栈跟踪:

Microsoft.Azure.ServiceBus.MessagingEntityNotFoundException:
   at Microsoft.Azure.ServiceBus.Core.MessageSender+<OnSendAsync>d__58.MoveNext (Microsoft.Azure.ServiceBus, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7e34167dcc6d6d8c)
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw (System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e)
   at Microsoft.Azure.ServiceBus.RetryPolicy+<RunOperation>d__19.MoveNext (Microsoft.Azure.ServiceBus, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7e34167dcc6d6d8c)
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw (System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e)
   at Microsoft.Azure.ServiceBus.RetryPolicy+<RunOperation>d__19.MoveNext (Microsoft.Azure.ServiceBus, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7e34167dcc6d6d8c)
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw (System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e)
   at Microsoft.Azure.ServiceBus.Core.MessageSender+<SendAsync>d__45.MoveNext (Microsoft.Azure.ServiceBus, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7e34167dcc6d6d8c)
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw (System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e)
   at MassTransit.Azure.ServiceBus.Core.Transport.ServiceBusSendTransport+SendClientPipe`1+<Send>d__5.MoveNext (MassTransit.Azure.ServiceBus.Core, Version=5.5.6.0, Culture=neutral, PublicKeyToken=b8e0e9f2f1e657fa)
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw (System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e)
   at MassTransit.Azure.ServiceBus.Core.Transport.ServiceBusSendTransport+SendClientPipe`1+<Send>d__5.MoveNext (MassTransit.Azure.ServiceBus.Core, Version=5.5.6.0, Culture=neutral, PublicKeyToken=b8e0e9f2f1e657fa)
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw (System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e)
   at GreenPipes.Agents.PipeContextSupervisor`1+<GreenPipes-IPipeContextSource<TContext>-Send>d__8.MoveNext (GreenPipes, Version=2.1.4.118, Culture=neutral, PublicKeyToken=b800c4cfcdeea87b)
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw (System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e)
   at GreenPipes.Agents.PipeContextSupervisor`1+<GreenPipes-IPipeContextSource<TContext>-Send>d__8.MoveNext (GreenPipes, Version=2.1.4.118, Culture=neutral, PublicKeyToken=b800c4cfcdeea87b)
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw (System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e)
   at GreenPipes.Agents.PipeContextSupervisor`1+<GreenPipes-IPipeContextSource<TContext>-Send>d__8.MoveNext (GreenPipes, Version=2.1.4.118, Culture=neutral, PublicKeyToken=b800c4cfcdeea87b)
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw (System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e)
   at MassTransit.Transports.PublishEndpoint+<Publish>d__17`1.MoveNext (MassTransit, Version=5.5.6.0, Culture=neutral, PublicKeyToken=b8e0e9f2f1e657fa)
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw (System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e)
   at MassTransit.Transports.PublishEndpoint+<Publish>d__17`1.MoveNext (MassTransit, Version=5.5.6.0, Culture=neutral, PublicKeyToken=b8e0e9f2f1e657fa)
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw (System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e)
   at MassTransit.Context.InMemoryOutboxConsumeContext+<ExecutePendingActions>d__10.MoveNext (MassTransit, Version=5.5.6.0, Culture=neutral, PublicKeyToken=b8e0e9f2f1e657fa)
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw (System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e)
   at MassTransit.Pipeline.Filters.InMemoryOutboxFilter`1+<Send>d__1.MoveNext (MassTransit, Version=5.5.6.0, Culture=neutral, PublicKeyToken=b8e0e9f2f1e657fa)
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw (System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e)
   at MassTransit.Pipeline.Filters.InMemoryOutboxFilter`1+<Send>d__1.MoveNext (MassTransit, Version=5.5.6.0, Culture=neutral, PublicKeyToken=b8e0e9f2f1e657fa)
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw (System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification (System.Private.CoreLib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e)
   at MassTransit.ApplicationInsights.Pipeline.ApplicationInsightsConsumeFilter`1+<Send>d__14.MoveNext (MassTransit.ApplicationInsights, Version=5.5.6.0, Culture=neutral, PublicKeyToken=b8e0e9f2f1e657fa)
azureservicebus masstransit
1个回答
1
投票

因为您正在使用实现已发布接口的类,所以需要将其发布为实际的消息接口。我猜想您的示例上面遗漏的一件事是ExampleMessageEvent类实际上是私有的(或内部的)。

在传奇中发布时,将类强制转换为接口类型,以便它不会为该类创建临时主题。

.Publish(context => (ExampleMessage)new ExampleMessageEvent(...));
© www.soinside.com 2019 - 2024. All rights reserved.