C# MassTransit:使用IRequestClient初始化使用者构造函数

C# MassTransit:使用IRequestClient初始化使用者构造函数,c#,.net,rabbitmq,console-application,masstransit,C#,.net,Rabbitmq,Console Application,Masstransit,1) 嗨。我正在学习使用RabbitMQ的MassTransit,但仍然坚持使用请求/响应。我读了很多文章,并尝试使用MassTransit文档编写控制台应用程序。但仍然找不到有关使用IRequestClient接口初始化使用者的任何信息。这是我的密码: static void Main(string[] args){ var serviceAddress = new Uri("loopback://localhost/notification.service");

1) 嗨。我正在学习使用RabbitMQ的MassTransit,但仍然坚持使用请求/响应。我读了很多文章,并尝试使用MassTransit文档编写控制台应用程序。但仍然找不到有关使用IRequestClient接口初始化使用者的任何信息。这是我的密码:

static void Main(string[] args){
        var serviceAddress = new Uri("loopback://localhost/notification.service");
        var requestTimeout = TimeSpan.FromSeconds(120);

        var bus = BusConfigurator.ConfigureBus((cfg, host) =>
        {
            cfg.ReceiveEndpoint(host, RabbitMqConstants.NotificationServiceQueue, e =>
            {
                e.Consumer(() => new OrderRegisteredConsumer(???));
            });
        });

        IRequestClient<ISimpleRequest, ISimpleResponse> client = new MessageRequestClient<ISimpleRequest, ISimpleResponse>(bus, serviceAddress, requestTimeout);


        bus.Start();

        Console.WriteLine("Listening for Order registered events.. Press enter to exit");
        Console.ReadLine();

        bus.Stop();
    }
2) 我还试图在sagas中找到一些关于请求/响应的信息,但不幸的是,我只找到了


如果有人在sagas中有使用此功能的示例,或者有人可以提供一些链接,我将不胜感激。您需要客户端变量可用,但客户端不需要在配置端点时准备就绪
endpoint.Consumer
不会立即实例化消费者,它只需要一个工厂委托,当消息传给该消费者时,该委托将实例化消费者

由于委托是引用类型,您可以稍后在代码中分配它

因此,这将起作用:

IRequestClient<ISimpleRequest, ISimpleResponse> client;
var bus = BusConfigurator.ConfigureBus((cfg, host) =>
{
    cfg.ReceiveEndpoint(host, RabbitMqConstants.NotificationServiceQueue, e =>
    {
        e.Consumer(() => new OrderRegisteredConsumer(client));
    });
});

client = new MessageRequestClient<ISimpleRequest, ISimpleResponse>(
    bus, serviceAddress, requestTimeout);
IRequestClient客户端;
var bus=BusConfigurator.ConfigureBus((cfg,主机)=>
{
ReceiveEndpoint(主机,RabbitMqConstants.NotificationServiceQueue,e=>
{
e、 消费者(()=>new OrderRegisteredConsumer(客户端));
});
});
client=newmessagerequestclient(
总线、服务地址、请求超时);

您需要客户端变量可用,但客户端不需要在配置端点时准备就绪
endpoint.Consumer
不会立即实例化消费者,它只需要一个工厂委托,当消息传给该消费者时,该委托将实例化消费者

由于委托是引用类型,您可以稍后在代码中分配它

因此,这将起作用:

IRequestClient<ISimpleRequest, ISimpleResponse> client;
var bus = BusConfigurator.ConfigureBus((cfg, host) =>
{
    cfg.ReceiveEndpoint(host, RabbitMqConstants.NotificationServiceQueue, e =>
    {
        e.Consumer(() => new OrderRegisteredConsumer(client));
    });
});

client = new MessageRequestClient<ISimpleRequest, ISimpleResponse>(
    bus, serviceAddress, requestTimeout);
IRequestClient客户端;
var bus=BusConfigurator.ConfigureBus((cfg,主机)=>
{
ReceiveEndpoint(主机,RabbitMqConstants.NotificationServiceQueue,e=>
{
e、 消费者(()=>new OrderRegisteredConsumer(客户端));
});
});
client=newmessagerequestclient(
总线、服务地址、请求超时);
来自状态机的请求:来自状态机的请求:
IRequestClient<ISimpleRequest, ISimpleResponse> client;
var bus = BusConfigurator.ConfigureBus((cfg, host) =>
{
    cfg.ReceiveEndpoint(host, RabbitMqConstants.NotificationServiceQueue, e =>
    {
        e.Consumer(() => new OrderRegisteredConsumer(client));
    });
});

client = new MessageRequestClient<ISimpleRequest, ISimpleResponse>(
    bus, serviceAddress, requestTimeout);