【问题标题】:MassTransit Quick Start App doesn't workMassTransit 快速启动应用程序不起作用
【发布时间】:2016-07-28 19:19:59
【问题描述】:

我正在努力学习 MassTransit。我已经通过 NuGet 安装了 MassTransit.RabbitMQ 3.3.5 版。我已经安装了 Erlang 18.0* 和 RabbitMQ 3.6.3(*Erlang 版本 19.0 与 RabbitMQ 3.6.3 不稳定)。我找到了一个“快速启动”MassTransit 程序here,在修复了一点 typeo 之后,就可以编译了。但是,当我执行程序时,处理程序不处理发布的消息“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();
        }
    }
}

【问题讨论】:

    标签: masstransit


    【解决方案1】:

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

    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)

    【讨论】:

    • 感谢您的回复,但您的代码除了构成处理程序的 llambda 表达式的样式外没有任何改变;还是不行。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2016-07-23
      • 1970-01-01
      • 2016-11-09
      • 2018-12-15
      • 1970-01-01
      • 2017-01-29
      • 1970-01-01
      • 1970-01-01
      • 2015-03-01
      相关资源
      最近更新 更多