【问题标题】:NServiceBus MSMQ Send questionNServiceBus MSMQ 发送问题
【发布时间】:2010-12-09 01:06:58
【问题描述】:

我无法通过 NServiceBus 发送消息。我有一个 ASP.Net MVC Web 应用程序,在 Win7 x64 上开发,我已将我的 web.config 配置为

       <MsmqTransportConfig    InputQueue="worker"    ErrorQueue="error"    NumberOfWorkerThreads="1"    MaxRetries="5"   />

  <UnicastBusConfig>
    <MessageEndpointMappings>
      <add Messages="PricingInformation.Messages" Endpoint="worker2" />
    </MessageEndpointMappings>   </UnicastBusConfig>

在 application_start 中,我连接了以下内容:

var bus = NServiceBus.Configure.WithWeb()
            .StructureMapBuilder()
            .XmlSerializer()
            .MsmqTransport()
                .IsTransactional(false)
                .PurgeOnStartup(false)
            .UnicastBus()
                .ImpersonateSender(false)
            .CreateBus()
            .Start();

当我感兴趣的操作发生在我触发的应用中时

    public override void HandleEvent(SupplierPricingUpdatedEvent updatedEvent)
    {
        bus.Send(new ModelSupplierDetailsUpdatedMessage() {Id = updatedEvent.Id})
        return;
     }

ModelSupplierDetailsUpdatedMessage 是 PricingInformation.Messages 中使用接口标记 IMessage 并用 Serializable 属性装饰的简单类。

MSMQ 队列是设置的,不是事务性的,包括 NETWORK SERVICE 和 IIS_IUSRS 在内的每个人都可以完全控制(在单独的故障排除措施中)

log4net 显示如下:

DEBUG NServiceBus.Utils.MsmqUtilities  14 - Checking if queue exists: worker.

调试 NServiceBus.Utils.MsmqUtilities 14 - 检查队列是否存在:错误。 调试 NServiceBus.Unicast.UnicastBus Worker.15 - 在 NServiceBus.SagaPersisters.NHibernate.NHibernateMessageModule 上调用“HandleBeginMessage” INFO NServiceBus.Unicast.UnicastBus Worker.15 - 工作人员已初始化。 调试 NServiceBus.Unicast.UnicastBus Worker.15 - 在 NServiceBus.SagaPersisters.NHibernate.NHibernateMessageModule 上调用“HandleEndMessage” DEBUG NServiceBus.Unicast.UnicastBus 9 - 发送消息 PricingInformation.Messages.ModelSupplierDetailsUpdatedMessage, PricingInformation.Messages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null with ID 2c642672-1bf1-48d4-a90f- 734e2fdd726d\8267 到目标worker2。

然而,无论我尝试什么,以及我调整什么(已经三个小时),消息都不会出现在队列中。我找不到异常,我对所有内容都有调试级别的日志记录。这可能是一些简单的帮助

【问题讨论】:

    标签: msmq nservicebus


    【解决方案1】:

    问题在于,如果您手动将队列设置为非事务性的,那么它将无法正常工作。将 NServiceBus "IsTransactional" 属性设置为 false 并不意味着您可以使用非事务性队列。

    请尝试删除队列并将它们重新创建为事务性的,或者,如果您使用的是 v2.0 的测试版,请让 NServiceBus 为您创建队列。

    【讨论】:

    • 这是否意味着 NService Bus 不支持非事务队列?
    • 我们现在在 3.x 版本中提供基本支持,但您不会获得相同级别的可靠性。在 4.0 版中,我们将完善该故事的其余部分。
    猜你喜欢
    • 1970-01-01
    • 2010-10-16
    • 1970-01-01
    • 1970-01-01
    • 2011-02-18
    • 2011-03-09
    • 1970-01-01
    • 2016-09-09
    • 1970-01-01
    相关资源
    最近更新 更多