在ASP.Net Core应用程序中将消息发送到MassTransit Saga

我在Asp.Net Core应用程序中有一个简单的传奇配置:

services.AddSingleton<ISagaRepository<Request>,InmemorySagaRepository<Request>>();
services.AddMassTransit(x =>
{
    x.AddSagaStateMachine<RequestStateMachine,Request>();
    x.AddRequestClient<IRequestCreated>();
    x.AddBus(provider => Bus.Factory.CreateUsingInmemory(cfg =>
    {
        cfg.UseInmemoryOutbox();
        cfg.ConfigureEndpoints(provider);
    }));
});

如果以后我通过IRequestClient<IRequestCreated>向Saga发送消息:

var client = context.RequestServices.GetService<IRequestClient<IRequestCreated>>();
var response = await client.GetResponse<RequestCreatedResponse>(new
{
    CorrelationId = Guid.NewGuid(),ClientId = 1,});

一切正常。但是,如果我在IBus上尝试相同的操作:

var mtbus = context.RequestServices.GetService<IBus>();
await mtbus.Send<IRequestCreated>(new
{
    CorrelationId = Guid.NewGuid(),});

我收到错误A convention for the message type Sample.AspNetCore.Host.Saga.IRequestCreated was not found

我想念什么?

rhrhok 回答:在ASP.Net Core应用程序中将消息发送到MassTransit Saga

在上面的示例中,由于未为请求客户端指定服务地址,因此它正在发布请求。哪个路由到消费者。

在失败的情况下,您正在使用发送,而没有地址则需要知道将消息发送到哪里。唯一的后退是没有配置的约定。老实说,如果您想要相同的行为,由于您要发布RequestCreated事件,因此也应该调用发布。

本文链接:https://www.f2er.com/3021495.html

大家都在问