如何将MassTransit演示分为生产者和消费者应用程序

时间:2019-04-05 19:51:06

标签: c# .net masstransit

我正在尝试将MassTransit演示(https://masstransit-project.com/MassTransit/quickstart.html)分为两个单独的应用程序,但是我的使用者应用程序未收到任何消息。

我创建了3个项目:发送,接收和消息。发送包含Send类,这是我的生产者代码;接收包含Receive类,这是我的消费者代码,而消息包含我的消息的类。

这是我的Send班:

using MassTransit;
using Messages;
using System;

namespace MassTransitTest
{
    class Send
    {
        static void Main(string[] args)
        {
            var bus = Bus.Factory.CreateUsingRabbitMq(config =>
            {
                var host = config.Host(new Uri("rabbitmq://localhost"), c =>
                {
                    c.Username("guest");
                    c.Password("guest");
                });
            });

            bus.Start();

            Console.WriteLine("Publishing message");

            bus.Publish(new TextMessage() { Text = "Testing 12345" });

            bus.Stop();

            Console.ReadLine();
        }
    }
}

这是我的Receive课:

using MassTransit;
using Messages;
using System;

namespace Receive
{
    class Receive
    {
        static void Main(string[] args)
        {
            var bus = Bus.Factory.CreateUsingRabbitMq(config =>
            {
                var host = config.Host(new Uri("rabbitmq://localhost"), c =>
                {
                    c.Username("guest");
                    c.Password("guest");
                });

                config.ReceiveEndpoint(host, "queue", endpoint =>
                {
                    endpoint.Handler<TextMessage>(context =>
                    {
                        return Console.Out.WriteLineAsync($"{context.Message.Text}");
                    });
                });
            });

            bus.Start();

            Console.WriteLine("Receive listening for messages");

            Console.ReadLine();

            bus.Stop();
        }
    }
}

最后,这是我的TextMessage课:

using System;

namespace Messages
{
    public class TextMessage
    {
        public string Text { get; set; }
    }
}

当我从Send类发送消息时,我想接收该消息并将其从我的Receive类输出到控制台。

1 个答案:

答案 0 :(得分:1)

我知道了! Publish是一个异步消息,它返回一个Task,因此我需要await然后一切正常。我的Send程序在触发该消息之前正在退出。