2

我正在尝试掌握 NSerivceBus,虽然它大部分进展顺利,但我正在努力了解如何配置 EndPointName。

因此,例如,在遵循几个示例之后,我设法提出了以下内容,但是我更改端点名称的任何尝试都失败了。

所以 myServer 队列目前是它的名字,我认为是从这里的命名空间中获取的:

  namespace MyServer
{
    class EndPointConfig : IConfigureThisEndpoint, AsA_Server
    {
    }
}

但是当我放置 [EndpointName("AnotherQueue")] 时,没有任何变化(除了它没有填充 myServer 队列。

我还尝试更改 Global.ASAX:

public static IBus Bus { get; set; }
        void Application_Start(object sender, EventArgs e)
        {
            Bus = NServiceBus.Configure.With()
                .Log4Net()
                .DefaultBuilder()
                .DefineEndpointName("AnotherQueue")
                .XmlSerializer()
                .MsmqTransport()
                    .IsTransactional(false)
                    .PurgeOnStartup(false)
                .UnicastBus()
                    .ImpersonateSender(false)
                .CreateBus()
                .Start();
        }

但同样,它没有工作。

我正在通过查看 mmc 并检查在那里排队的消息来测试它。

最后我尝试改变 web.config

<configSections>
        <section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NserviceBus.Core"/>
        <section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core"/>
    </configSections>

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

    <UnicastBusConfig>
        <MessageEndpointMappings>
            <add Messages="MyMessage" Endpoint="AnotherQueue"></add>
        </MessageEndpointMappings>
    </UnicastBusConfig>

仍然一无所有。

有人能帮忙吗?我仍在努力解决这个问题(这对我来说是一项新技术),所以如果我问得不好这个问题,我很抱歉。

提前感谢莱克斯

4

1 回答 1

6

几件事:

我不是 100% 确定,但如果您在 Web 应用程序中托管,我认为您不想使用 IConfigureThisEndpoint 和 AsA_Server。我相信您在 Application_Start 中拥有的配置代码就是您所需要的。另一种配置方式是当您在 NSB 自己的进程中托管时(作为 Windows 服务或控制台)。

尝试将DefineEndPointName("AnotherQueue")作为第一个命令放在NServiceBus.Configure.With(). 这就是我设置它的方式并且它可以工作,我相信 With() 之后的命令顺序确实很重要,并且可以静默失败(我认为这将在未来的版本中解决)。

根据您要完成的任务,您可能根本不需要 unicastbus 配置。这用于在客户端定义端点——换句话说,使用它来定义您的应用程序想要与之通信的端点。

最后,在运行 Web 应用程序时使用它的调试窗口来查找可能出现问题的线索。NSB 在调试模式下会产生很多非常有用的日志信息,所有这些都应该发送到调试窗口。可能是您的应用程序没有创建队列的权限,或者类似的东西。一旦我弄清楚了这一点,解决许多“学习曲线问题”就变得容易多了。

于 2013-01-18T19:24:48.487 回答