#c# #.net #masstransit
#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. Если вы посмотрите на консоль управления брокером, видите ли вы очереди и обмены, а также соответствующие привязки для типа сообщения?
2. Да, @ChrisPatterson. Но я не вижу никаких сообщений, достигающих этих обменов / очередей после вызова
bus.Publish()
Ответ №1:
Я понял это! Publish
это асинхронное сообщение, которое возвращает Task
, поэтому мне нужно было await
, и тогда все заработало. Моя Send
программа завершала работу до того, как сообщение было отправлено.