【问题标题】:NServiceBus communication between selfhost and NServiceBus.hostselfhost 和 NServiceBus.host 之间的 NServiceBus 通信
【发布时间】:2011-12-10 20:48:16
【问题描述】:

我是 NServiceBus 世界的新手。我创建了一个新的 NServiceBus 项目,其中包含一个发送/接收 NServiceBus“客户端”、一个向控制台应用程序发送消息的命令以及一个发送/接收 selfhost(控制台应用程序)。

我通过 NServiceBus.Host.exe 运行服务总线“客户端”。我可以通过以下代码提交消息:

public class OrderMessaging
{
    public IBus Bus { get; set; }

    public void SendRouteMessageReceived(LabRoutingUpdateMessage routingUpdateMessage)
    {
        Bus.Send(new RouteMessageReceived(routingUpdateMessage));
    }
}

我从客户端总线中的另一个 cs 文件发送测试消息:

class OrderManagementTest : IWantToRunAtStartup
{
    public IBus _bus { get; set; }

    public void Run()
    {
        Console.WriteLine("Press 'Enter' to send a message.To exit, Ctrl + C");

        while (Console.ReadLine() != null)
        {
            Int64 _trackNum = 999245;

            Console.WriteLine("Track Number: {0}", _trackNum.ToString());

            _labRouteMessage = new LabRoutingUpdateMessage(_trackNum);

            OrderMessaging Message = new OrderMessaging();
            Message.Bus = _bus;
            Message.SendRouteMessageReceived(_labRouteMessage);
        }
    }
}

我的 selfhost 总线初始化如下所示:

public static class Startup 
{
    static void Main(string[] args)
    {
        // Setup the bus
        BusInitializer.Init();
        Console.Clear();
        Console.ReadLine();  //need to handle messages here from the client 
    }
}

public class BusInitializer 
{
    public static IBus Bus { get; private set; }

    public static void Init()
    {
        Bus = NServiceBus.Configure.With()
            .Log4Net()
            .DefaultBuilder()
            .XmlSerializer()
            .MsmqTransport()
                .IsTransactional(false)
                .PurgeOnStartup(false)
            .UnicastBus()
                .ImpersonateSender(false)
            .CreateBus()
            .Start();
    }
}

我在 selfhost 控制台中有一个消息处理程序,它从不接收来自客户端的消息:

public class RouteMessageReceivedHandler : IHandleMessages<RouteMessageReceived>
{
    public void Handle(RouteMessageReceived message)
    {
        Trace.TraceInformation(message.GetType().Name);

        Console.Write("you received a message!!" + message.ToString());
    }
}

有人可以分享示例代码,我可以如何处理从我的客户端到我的 selfhost 控制台应用程序中的 Startup 方法的消息吗?非常感谢您!

更新: 当我从我的发送/接收 NServiceBus.Host(客户端)向我的 selfhost 总线(服务器)发送一条消息时,我会收到以下消息:

调试 NServiceBus.Unicast.UnicastBus [(null)] - 调用“HandleBeginMessage” 关于 NServiceBus.SagaPersisters.NHibernate.NHibernateMessageModule

调试 NServiceBus.Unicast.UnicastBus [(null)] - 收到 消息 SpecimenTrackBus.TrackRouteManager.InternalMessages.RouteMessageReceived, SpecimenTrackBus.TrackRouteManager.InternalMessages,版本=1.0.0.0,文化=中性, PublicKeyToken=null,ID 为 .###.. 来自发件人 OrderManagement@DavisBLptp

Debug NServiceBus.Unicast.UnicastBus [(null)] 完成处理消息。

调试 NServiceBus.Unicast.UnicastBus [(null)] - 调用“HandleEndMessage” NServiceBus.SagaPersisters.NHibernate.NHibernateMessageModule

看起来消息实际上可以被处理,但是,我的 RouteMessageReceivedHandler 永远不会被调用。我通过自己的 exe 文件启动每个应用程序。会不会是线程问题?

【问题讨论】:

    标签: c# nservicebus


    【解决方案1】:

    您的配置中缺少对 .LoadMessageHandlers() 的调用

    【讨论】:

    • 谢谢谢谢谢谢!!!!!!!!!!!!!!!!!!!!!!我只是忽略了对 .LoadMessageHandlers() 的一次调用 - 效果很好! NServiceBus 规则!!!!非常感谢您的宝贵时间。
    【解决方案2】:

    您将 msmq 传输配置保存在哪里?当使用这样的初始化代码时,您需要为 MsmqTransport 提供配置。在应用程序配置文件中,您需要添加行:

    <section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core"/>
    
    <MsmqTransportConfig 
        InputQueue="MyQueue" 
        NumberOfWorkerThreads="1" 
        MaxRetries="5"
        ErrorQueue="error" 
      />
    

    【讨论】:

    • 在我的 App.config 文件中,我有以下内容:
    猜你喜欢
    • 2014-06-15
    • 2011-08-23
    • 2017-08-13
    • 2013-10-18
    • 2011-08-08
    • 2020-12-10
    • 2011-01-25
    • 2013-05-29
    • 2014-12-23
    相关资源
    最近更新 更多