#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