Очередь не отображается в Rabbitmq

#asp.net-core #asp.net-web-api #rabbitmq #masstransit

Вопрос:

У меня есть две отдельные службы, одна из которых называется «Учитель».API и процесс.API. Служба учителей генерирует запросы на публикацию, и там сведения об учителе будут отправлены в Службу обработки в соответствии с моими потребностями.

Вот как я настраиваю MassTrasit в обеих службах.

в Учительнице.API

 services.AddMassTransit(x =>
{
    x.UsingRabbitMq((context, config) =>
    {
        config.Host(new Uri("rabbitmq://localhost"), h =>
        {
            h.Username("guest");
            h.Password("guest");
        });
    });
});
 

и в процессе.API.

 services.AddMassTransit(x =>
{
    x.AddConsumer<TeacherConsumer>();
    x.UsingRabbitMq((context, cfg) =>
    {
        cfg.Host(new Uri("rabbitmq://localhost"), h =>
        {
            h.Username("guest");
            h.Password("guest");
        });
        cfg.ReceiveEndpoint("teacherQueue", ep =>
        {
            ep.PrefetchCount = 16;
            ep.UseMessageRetry(r => r.Interval(2, 100));
            ep.ConfigureConsumer<TeacherConsumer>(context);
        });
    });
});
 

И в контроллере учителя мой запрос на публикацию выглядит следующим образом,

 [HttpPost]
public async Task<IActionResult> Registraion(Teacher Teacher)
{
    if (Teacher != null)
    {
        Teacher.BookedOn = DateTime.Now;
        Uri uri = new Uri("rabbitmq://localhost/teacherQueue");
        var endPoint = await _bus.GetSendEndpoint(uri);
        await endPoint.Send(Teacher);
        return Ok();
    }
    return BadRequest();
}
 

здесь я создаю новую teacherQueue очередь и нажимаю на объект Учителя.

Моя проблема в том, что плагин управления RabbitMQ не отображается teacherQueue в разделе очереди, но отображается на биржах.

введите описание изображения здесь

введите описание изображения здесь

Моя потребительская часть заключается в следующем, этот потребитель также не пострадал.

 public class TeacherConsumer : IConsumer<Teacher>
{
    public Task Consume(ConsumeContext<Teacher> context)
    {
        var data = context.Message;
        return Task.CompletedTask;
    }
}
 

По какой причине? что я сделал не так?

Ответ №1:

Вам не хватает пакета AspNetCore и вызова на:

 services.AddMassTransitHostedService();
 

Что на самом деле запускает автобус.

Комментарии:

1. Да, вот в чем причина. Спасибо, что сэкономили мне время.

2. вы немного изменили мой код, могу я узнать причину?

3. Ваша конфигурация была устаревшей, основанной на более ранней версии MassTransit.

4. Это именно то, что есть в документации .

5. Спасибо за все @Chris Patterson