MassTransit快速启动应用程序无法运行

时间:2016-07-28 19:19:59

标签: masstransit

我正在尝试学习MassTransit。我已经通过NuGet安装了MassTransit.RabbitMQ版本3.3.5。我已经安装了Erlang 18.0 *和RabbitMQ 3.6.3(* Erlang版本19.0在RabbitMQ 3.6.3中不稳定)。我找到了一个快速启动" MassTransit程序here,修复了一个小型的后,得到它编译。但是,当我执行程序时,发布的消息" YourMessage"处理程序不处理! RabbitMQ管理插件UI显示有一个" test_queue"队列中有1条消息。它仍然是未经处理的。这里发生了什么?我在Windows 7上运行,RabbitMQ服务正在运行。

using MassTransit;
using System;

namespace MassTransitPOC.Trivial
{
    public class YourMessage
    {
        public string Text { get; set; }
    }

    public class Program
    {
        public static void Main()
        {
            var bus = Bus.Factory.CreateUsingRabbitMq(sbc =>
            {
                var host = sbc.Host(new Uri("rabbitmq://localhost"), h =>
                {
                    h.Username("guest");
                    h.Password("guest");
                });

                sbc.ReceiveEndpoint(host, "test_queue", ep =>
                {
                    ep.Handler<YourMessage>(context =>
                    {
                        return Console.Out.WriteLineAsync($"Received: {context.Message.Text}");
                    });
                });
            });

            bus.Start();

            bus.Publish(new YourMessage { Text = "Hi" });

            bus.Stop();
        }
    }
}

2 个答案:

答案 0 :(得分:0)

我运行了你的代码并通过替换接收端点代码使其工作:

sbc.ReceiveEndpoint(host, "test_queue", ep =>
{
    ep.Handler<YourMessage>(context =>
    {
        return Console.Out.WriteLineAsync($"Received: {context.Message.Text}");
    });
});

......以下......

sbc.ReceiveEndpoint(host, "test_queue", ep =>
{
    ep.Handler<YourMessage>(context =>
        Console.Out.WriteLineAsync($"Received: {context.Message.Text}"));
    });
}

看看它是否适合你?

(RabbitMQ:3.6.2 / Erlang:OTP 18)

答案 1 :(得分:0)

似乎我的机器上的bus.Stop()调用太快了。如果我在.Publish和.Stop之间添加以下内容,则会收到消息。但是,如果没有此代码,则不会使用已发布的消息。

Console.WriteLine("Press any key to exit");
Console.ReadKey();