MassTransit - 在频道关闭前发布未确认

时间:2014-03-26 15:49:10

标签: rabbitmq masstransit

我正在使用MassTransit和RaabbitMQ,当我尝试发送消息时,我收到此错误:

rabbitmq://localhost/FilesVersioning => An exception was thrown during Send 

at MassTransit.Transports.Endpoint.Send[T](ISendContext`1 context) in d:\BuildAgent-02\work\aa063b4295dfc097\src\MassTransit\Transports\Endpoint.cs:line 116 
at MassTransit.Transports.Endpoint.Send[T](T message) in d:\BuildAgent-02\work\aa063b4295dfc097\src\MassTransit\Transports\Endpoint.cs:line 125 
at ServicesImplementation.DVService.<>c__DisplayClass7.b__6() in D:\MyProject\trunk\ServicesImplementation\DocVersioningService.cs:line 111 
at FileSystemIO.FileSystemTransaction.ExecutePreCommitActions() in D:\MyProject\trunk\FileSystemIO\FileSystemTransaction.cs:line 106 
at Domain.Repositories.NHibernateSessionModule.EndSession(ISession session) in D:\MyProject\trunk\Domain\Repositories\NHibernateSessionModule.cs:line 205 
at Domain.Repositories.NHibernateSessionModule.ContextEndRequest(Object sender, EventArgs e) in D:\MyProject\trunk\Domain\Repositories\NHibernateSessionModule.cs:line 137 
at System.Web.HttpApplication.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 

___________________________________ 
rabbitmq://localhost/FilesVersioning => Publisher did not confirm message 

at MassTransit.Transports.RabbitMq.OutboundRabbitMqTransport.<>c__DisplayClass3.b__0(RabbitMqConnection connection) in d:\BuildAgent-02\work\aa063b4295dfc097\src\Transports\MassTransit.Transports.RabbitMq\OutboundRabbitMqTransport.cs:line 87 
at MassTransit.Transports.ConnectionHandlerImpl`1.<>c__DisplayClass3.b__2() in d:\BuildAgent-02\work\aa063b4295dfc097\src\MassTransit\Transports\ConnectionHandlerImpl.cs:line 91 
at MassTransit.Transports.DefaultConnectionPolicy.Execute(Action callback) in d:\BuildAgent-02\work\aa063b4295dfc097\src\MassTransit\Transports\DefaultConnectionPolicy.cs:line 42 
at MassTransit.Transports.ConnectionPolicyChainImpl.Next(Action callback) in d:\BuildAgent-02\work\aa063b4295dfc097\src\MassTransit\Transports\ConnectionPolicyChainImpl.cs:line 49 
at MassTransit.Transports.ConnectOnFirstUsePolicy.Execute(Action callback) in d:\BuildAgent-02\work\aa063b4295dfc097\src\MassTransit\Transports\ConnectOnFirstUsePolicy.cs:line 34 
at MassTransit.Transports.ConnectionPolicyChainImpl.Next(Action callback) in d:\BuildAgent-02\work\aa063b4295dfc097\src\MassTransit\Transports\ConnectionPolicyChainImpl.cs:line 49 
at MassTransit.Transports.ConnectionHandlerImpl`1.Use(Action`1 callback) in d:\BuildAgent-02\work\aa063b4295dfc097\src\MassTransit\Transports\ConnectionHandlerImpl.cs:line 86 
at MassTransit.Transports.RabbitMq.OutboundRabbitMqTransport.Send(ISendContext context) in d:\BuildAgent-02\work\aa063b4295dfc097\src\Transports\MassTransit.Transports.RabbitMq\OutboundRabbitMqTransport.cs:line 50 
at MassTransit.Transports.Transport.Send(ISendContext context) in d:\BuildAgent-02\work\aa063b4295dfc097\src\MassTransit\Transports\Transport.cs:line 50 
at MassTransit.Transports.Endpoint.Send[T](ISendContext`1 context) in d:\BuildAgent-02\work\aa063b4295dfc097\src\MassTransit\Transports\Endpoint.cs:line 110 

___________________________________ 
rabbitmq://localhost/FilesVersioning => Publish not confirmed before channel closed 
___________________________________ 

我在HttpModule中的Web请求结束时发送消息。

有谁知道这个错误意味着什么?

据我所知,我不会关闭与MassTransit相关的任何内容。

修改

据我所知,它抛出了这个lamda: https://github.com/phatboyg/MassTransit/blob/master/src/Transports/MassTransit.Transports.RabbitMq/OutboundRabbitMqTransport.cs#L51

EDIT2:

我像这样初始化服务总线:

        var _bus = ServiceBusFactory.New(sbc =>
        {
            sbc.UseRabbitMq();
            sbc.ReceiveFrom("rabbitmq://localhost/queue0");
            sbc.ReceiveFrom("rabbitmq://localhost/queue1");
            sbc.ReceiveFrom("rabbitmq://localhost/queue2");
            sbc.Validate();
            sbc.Subscribe(a => a.Handler<Item0>((msg, item) => new Item0Handler().Handle(msg)));
            sbc.Subscribe(a => a.Handler<Item1>((msg, item) => new Item1Handler().Handle(msg)));
            sbc.Subscribe(a => a.Handler<Item2>((msg, item) => new Item2Handler().Handle(msg)));
        });

...我使用_bus来发送和接收消息。 我是MassTransient的初学者,所以这个配置也可能是错的......

1 个答案:

答案 0 :(得分:0)

行。问题似乎是我在一条总线上使用了很多输入队列(sbc.ReceiveFrom()内的许多ServiceBusFactory.New()次呼叫。)

最后,我创建了许多这样的公共汽车:

    var _bus = ServiceBusFactory.New(sbc =>
    {
        sbc.UseRabbitMq();
        sbc.ReceiveFrom("rabbitmq://localhost/queue0");
        sbc.Validate();
        sbc.Subscribe(a => a.Handler<Item0>((msg, item) => new Item0Handler().Handle(msg)));
        sbc.Subscribe(a => a.Handler<Item1>((msg, item) => new Item1Handler().Handle(msg)));
        sbc.Subscribe(a => a.Handler<Item2>((msg, item) => new Item2Handler().Handle(msg)));
    });

    var _bus2 = ServiceBusFactory.New(sbc =>
    {
        sbc.UseRabbitMq();
        sbc.ReceiveFrom("rabbitmq://localhost/queue1");
        sbc.Validate();
        sbc.Subscribe(a => a.Handler<Item0>((msg, item) => new Item0Handler().Handle(msg)));
        sbc.Subscribe(a => a.Handler<Item2>((msg, item) => new Item2Handler().Handle(msg)));
    });