首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >selfhost与NServiceBus.host之间的NServiceBus通信

selfhost与NServiceBus.host之间的NServiceBus通信
EN

Stack Overflow用户
提问于 2011-12-11 04:48:17
回答 2查看 935关注 0票数 1

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

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

代码语言:javascript
复制
public class OrderMessaging
{
    public IBus Bus { get; set; }

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

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

代码语言:javascript
复制
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总线初始化如下所示:

代码语言:javascript
复制
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控制台中有一个消息处理程序,它从不从客户端接收消息:

代码语言:javascript
复制
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 (客户机)向我的自主机总线(服务器)发送消息时,我收到以下消息:

Debug NServiceBus.Unicast.UnicastBus (null) <> -在NServiceBus.SagaPersisters.NHibernate.NHibernateMessageModule上调用'HandleBeginMessage‘

SpecimenTrackBus.TrackRouteManager.InternalMessages.RouteMessageReceived,SpecimenTrackBus.TrackRouteManager.InternalMessages,NServiceBus.Unicast.UnicastBus (null) <> -已收到消息Debug version=1.0.0.0,Culture=neutral,PublicKeyToken=null,ID为.###。发件人OrderManagement@DavisBLptp

Debug NServiceBus.Unicast.UnicastBus (null) <>已完成对消息的处理。

Debug NServiceBus.Unicast.UnicastBus (null) <> -在NServiceBus.SagaPersisters.NHibernate.NHibernateMessageModule上调用'HandleEndMessage‘

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-11 17:35:14

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

票数 2
EN

Stack Overflow用户

发布于 2011-12-11 07:18:36

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

代码语言:javascript
复制
<section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core"/>

<MsmqTransportConfig 
    InputQueue="MyQueue" 
    NumberOfWorkerThreads="1" 
    MaxRetries="5"
    ErrorQueue="error" 
  />
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8459753

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档