2017-08-05 65 views
0

我对NService总线很陌生,所以我试图用一个简单的测试解决方案来使用LearningPersistence,显然这将很快改变!NServiceBus测试客户端没有收到消息

所以,我有3个项目:

IceDataExtractor - 客户端,它发送一个消息

IceProcessManager - 进程消息

消息 - 包含一个单一的消息类别的消息

我正在使用由NServic生成的标准代码eBus.Bootstrap.WindowsService 2.0.1

Here is page I used as to get sample

我然后修改如下

冰数据提取

private async Task AsyncOnStart() 
{ 
    try 
    { 
     var endpointConfiguration = new EndpointConfiguration("IceDataExtractor"); 
     var transport = endpointConfiguration.UseTransport<LearningTransport>(); 
     transport.Routing().RouteToEndpoint(typeof(TestMessage), "IceProcessManager"); 
     endpointConfiguration.UseSerialization<JsonSerializer>(); 
     //TODO: optionally choose a different error queue. Perhaps on a remote machine 
     // https://docs.particular.net/nservicebus/recoverability/ 
     endpointConfiguration.SendFailedMessagesTo("error"); 
     //TODO: optionally choose a different audit queue. Perhaps on a remote machine 
     // https://docs.particular.net/nservicebus/operations/auditing 
     endpointConfiguration.AuditProcessedMessagesTo("audit"); 
     endpointConfiguration.DefineCriticalErrorAction(OnCriticalError); 
     //TODO: For production use select a durable persistence. 
     // https://docs.particular.net/nservicebus/persistence/ 
     endpointConfiguration.UsePersistence<LearningPersistence>(); 

     //TODO: For production use script the installation. 
     endpointConfiguration.EnableInstallers(); 

     endpointConfiguration.Conventions() 
      .DefiningCommandsAs(t => t.Namespace != null && t.Namespace.StartsWith("Messages") && 
            t.Namespace.EndsWith("Commands")); 

     endpoint = await Endpoint.Start(endpointConfiguration) 
      .ConfigureAwait(false); 
     PerformStartupOperations(); 

     **var testMessage = new TestMessage {Id = Guid.NewGuid()}; 
     await endpoint.Send(testMessage).ConfigureAwait(false);** 
    } 
    catch (Exception exception) 
    { 
     logger.Fatal("Failed to start", exception); 
     Environment.FailFast("Failed to start", exception); 
    } 
} 

冰流程管理器

private async Task AsyncOnStart() 
{ 
    try 
    { 
     var endpointConfiguration = new EndpointConfiguration("IceDataExtractor"); 
     var transport = **endpointConfiguration.UseTransport<LearningTransport>(); 
     transport.Routing().RouteToEndpoint(typeof(TestMessage), "IceProcessManager");** 
     endpointConfiguration.UseSerialization<JsonSerializer>(); 
     //TODO: optionally choose a different error queue. Perhaps on a remote machine 
     // https://docs.particular.net/nservicebus/recoverability/ 
     endpointConfiguration.SendFailedMessagesTo("error"); 
     //TODO: optionally choose a different audit queue. Perhaps on a remote machine 
     // https://docs.particular.net/nservicebus/operations/auditing 
     endpointConfiguration.AuditProcessedMessagesTo("audit"); 
     endpointConfiguration.DefineCriticalErrorAction(OnCriticalError); 
     //TODO: For production use select a durable persistence. 
     // https://docs.particular.net/nservicebus/persistence/ 
     endpointConfiguration.UsePersistence<LearningPersistence>(); 

     //TODO: For production use script the installation. 
     endpointConfiguration.EnableInstallers(); 

     **endpointConfiguration.Conventions() 
      .DefiningCommandsAs(t => t.Namespace != null && t.Namespace.StartsWith("Messages") && 
            t.Namespace.EndsWith("Commands"));** 

     endpoint = await Endpoint.Start(endpointConfiguration) 
      .ConfigureAwait(false); 
     PerformStartupOperations(); 

     var testMessage = new TestMessage {Id = Guid.NewGuid()}; 
     await endpoint.Send(testMessage).ConfigureAwait(false); 
    } 
    catch (Exception exception) 
    { 
     logger.Fatal("Failed to start", exception); 
     Environment.FailFast("Failed to start", exception); 
    } 
} 

的TestMessage类

using System; 

namespace Messages.Commands 
{ 
    public class TestMessage 
    { 
     public Guid Id { get; set; } 
    } 
} 

这一切都可以编译和运行比,我不认为事情

Applications running fine

我有一个消息处理程序

TestMessageHandler性能警告罚款,其他

using System; 
using System.Threading.Tasks; 
using Messages.Commands; 
using NServiceBus; 

namespace IceProcessManager 
{ 
    public class TestMessageHandler : IHandleMessages<TestMessage> 
    { 
     public Task Handle(TestMessage message, IMessageHandlerContext context) 
     { 
      Console.WriteLine("Handled TEst MEssage ID:{0}", message.Id); 

      return Task.CompletedTask; 
     } 
    } 
} 

从截图中可以看到,IceProcessManager没有收到任何消息。我究竟做错了什么?我最初想的是,我发送的消息太早,即在ProcessManager启动并运行之前,但这不是问题,因为如果我离开ProcessManager运行(即从Explorer运行),则运行提取器,不会收到消息

理想情况下,我想发送大量的消息来测试这个,但我不熟悉异步的东西呢!

有人可以帮忙吗?

Paul

回答

1

如果我没有丢失你正在使用相同的端点名称为两个实例?

var endpointConfiguration = new EndpointConfiguration("IceDataExtractor");

当您将消息路由到“IceDataManager”不存在。

我猜你可能粘贴了错误的代码?

+0

DOH !!!!!如果我在复制粘贴后更改代码,我想这会有所帮助!就是这样,虽然当我改变这一点时,我惊讶地得到超过1条消息,也许我的消息被放在队列中? – Paul

+0

你是对的,每次你启动端点时,消息都会被发送到队列中。 – sp1nakr

相关问题