MassTransit - 发送消息后未调用 Consume 方法
MassTransit - Consume method not called after message is sent
MyApp.Application
public class CreatePersonHandler : IConsumer<CreatePerson>
{
private readonly IUnitOfWork _unitOfWork;
private readonly IMapper _mapper;
public CreatePersonHandler(IUnitOfWork _unitOfWork, IMapper mapper)
{
_unitOfWork = unitOfWork;
_mapper = mapper;
}
public Task Consume(ConsumeContext<CreatePerson> context)
{
...
Person person = _mapper.Map<Person>(context.Message);
_unitOfWork.Persons.Add(person);
}
}
MyApp.API
Startup.cs
...
public void ConfigureServices(IServiceCollection services)
{
services.AddAutoMapper(Assembly.GetAssembly(typeof(Startup)));
services.AddScoped<IUnitOfWork, UnitOfWork >();
services.AddMassTransit(x =>
{
x.SetKebabCaseEndpointNameFormatter();
x.AddConsumer<CreatePersonHandler>();
x.UsingRabbitMq((context, cfg) =>
{
cfg.ReceiveEndpoint("persons", e =>
{
e.ConfigureConsumer<CreatePersonHandler>(context);
});
});
});
services.AddMassTransitHostedService();
}
我正在使用 IBus 从控制器发送消息
_bus.Send(new CreatePerson{ FirstName = "Bob "});
但我执行了处理程序,但无法点击 CreatePersonHandler 中的 Consume 方法 class。
我哪里做错了?
日志很棒,它们会告诉您 Send
正在抛出异常。由于您没有 destinationAddress,因此无法 Send
上车。
我建议改用 Publish
,以便代理可以为您将消息路由到消费者。
另外,查看日志。始终从日志开始。
MyApp.Application
public class CreatePersonHandler : IConsumer<CreatePerson>
{
private readonly IUnitOfWork _unitOfWork;
private readonly IMapper _mapper;
public CreatePersonHandler(IUnitOfWork _unitOfWork, IMapper mapper)
{
_unitOfWork = unitOfWork;
_mapper = mapper;
}
public Task Consume(ConsumeContext<CreatePerson> context)
{
...
Person person = _mapper.Map<Person>(context.Message);
_unitOfWork.Persons.Add(person);
}
}
MyApp.API Startup.cs ...
public void ConfigureServices(IServiceCollection services)
{
services.AddAutoMapper(Assembly.GetAssembly(typeof(Startup)));
services.AddScoped<IUnitOfWork, UnitOfWork >();
services.AddMassTransit(x =>
{
x.SetKebabCaseEndpointNameFormatter();
x.AddConsumer<CreatePersonHandler>();
x.UsingRabbitMq((context, cfg) =>
{
cfg.ReceiveEndpoint("persons", e =>
{
e.ConfigureConsumer<CreatePersonHandler>(context);
});
});
});
services.AddMassTransitHostedService();
}
我正在使用 IBus 从控制器发送消息
_bus.Send(new CreatePerson{ FirstName = "Bob "});
但我执行了处理程序,但无法点击 CreatePersonHandler 中的 Consume 方法 class。
我哪里做错了?
日志很棒,它们会告诉您 Send
正在抛出异常。由于您没有 destinationAddress,因此无法 Send
上车。
我建议改用 Publish
,以便代理可以为您将消息路由到消费者。
另外,查看日志。始终从日志开始。