NServiceBus测试客户端没有收到消息
问题描述:
我对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; }
}
}
这一切都可以编译和运行比,我不认为事情
我有一个消息处理程序
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
答
如果我没有丢失你正在使用相同的端点名称为两个实例?
var endpointConfiguration = new EndpointConfiguration("IceDataExtractor");
当您将消息路由到“IceDataManager”不存在。
我猜你可能粘贴了错误的代码?
DOH !!!!!如果我在复制粘贴后更改代码,我想这会有所帮助!就是这样,虽然当我改变这一点时,我惊讶地得到超过1条消息,也许我的消息被放在队列中? – Paul
你是对的,每次你启动端点时,消息都会被发送到队列中。 – sp1nakr