简体   繁体   中英

How to separate MassTransit demo into producer and consumer applications

I am trying to separate the MassTransit demo ( https://masstransit-project.com/MassTransit/quickstart.html ) into two separate applications, but my consumer application is not receiving any messages.

I have created 3 projects: Send, Receive, and Messages. Send contains a Send class which is my producer code, Receive contains a Receive class which is my consumer code, and Messages contains classes for my messages.

Here is my Send class:

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();
        }
    }
}

here is my Receive class:

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();
        }
    }
}

Finally, here is my TextMessage class:

using System;

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

When I send the message from my Send class I would like to receive it and output it to the console from my Receive class.

I figured it out! Publish is an asynchronous message that returns a Task , so I needed to await and then everything worked. My Send program was exiting before the message was fired off.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM