NServiceBus测试客户端未接收消息

NServiceBus测试客户端未接收消息,nservicebus,Nservicebus,我对NService Bus非常陌生,所以我正在尝试使用LearningPersistence使用一个简单的测试解决方案,显然这很快就会改变 所以我有3个项目: IceDataExtractor-发送消息的客户端 IceProcessManager-处理消息 消息-包含单个消息类消息 我使用的是NServiceBus.Bootstrap.WindowsService 2.0.1生成的标准代码 然后我修改如下 Ice数据提取器 private async Task AsyncOnStart()

我对NService Bus非常陌生,所以我正在尝试使用LearningPersistence使用一个简单的测试解决方案,显然这很快就会改变

所以我有3个项目:

IceDataExtractor-发送消息的客户端

IceProcessManager-处理消息

消息-包含单个消息类消息

我使用的是NServiceBus.Bootstrap.WindowsService 2.0.1生成的标准代码

然后我修改如下

Ice数据提取器

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);
    }
}
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;
        }
    }
}
这一切编译和运行良好,除了性能警告,我认为这并不重要

我有一个消息处理程序

TestMessageHandler

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);
    }
}
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;
        }
    }
}
使用系统;
使用System.Threading.Tasks;
使用消息、命令;
使用NServiceBus;
命名空间进程管理器
{
公共类TestMessageHandler:IHandleMessages
{
公共任务句柄(TestMessage消息、IMessageHandlerContext上下文)
{
WriteLine(“已处理的测试消息ID:{0}”,MEssage.ID);
返回Task.CompletedTask;
}
}
}
从屏幕截图中可以看到,IceProcessManager没有收到任何消息。我做错了什么?我最初认为我发送消息太早,即在ProcessManager启动并运行之前,但这不是问题所在,因为如果我让ProcessManager运行(即从资源管理器运行),然后运行提取器,则不会收到任何消息

理想情况下,我希望已经发送了大量的消息来测试这一点,但我还不熟悉异步的东西

有人能帮忙吗


Paul

如果我没有遗漏什么,那么您对两个实例都使用相同的端点名称

var endpointConfiguration=新的endpointConfiguration(“IceDataExtractor”)

将消息路由到不存在的“IceDataManager”时


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

DOH!!!!!我想如果我在复制粘贴后更改代码会有所帮助!就是这样,虽然当我更改此设置时收到多条消息时我很惊讶,但可能我的消息被保存在队列中?您是对的,在您之前每次启动端点时,消息都会被发送到队列中。