Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET核心应用程序不使用来自RabbitMQ';s队列(如果托管在IIS上)_C#_Asp.net Core_Rabbitmq_Masstransit - Fatal编程技术网

C# ASP.NET核心应用程序不使用来自RabbitMQ';s队列(如果托管在IIS上)

C# ASP.NET核心应用程序不使用来自RabbitMQ';s队列(如果托管在IIS上),c#,asp.net-core,rabbitmq,masstransit,C#,Asp.net Core,Rabbitmq,Masstransit,设置 localhost上的RabbitMQ,asp.net核心应用程序,在使用事件的IIS上使用masstransit库 问题 RabbitMQ队列中有消息,当它托管在IIS上时,我的asp.net核心应用程序不会使用它,而且在RabbitMQ管理的队列详细信息中,它作为消费者不可见。但是,当我“dotnet运行”它或在iisexpress上运行它时,它会使用消息并作为消费者可见 代码 Startup.cs片段 。。。 services.AddMassTransit(x=> { x、 AddC

设置

localhost上的RabbitMQ,asp.net核心应用程序,在使用事件的IIS上使用masstransit库

问题

RabbitMQ队列中有消息,当它托管在IIS上时,我的asp.net核心应用程序不会使用它,而且在RabbitMQ管理的队列详细信息中,它作为消费者不可见。但是,当我“dotnet运行”它或在iisexpress上运行它时,它会使用消息并作为消费者可见

代码

Startup.cs片段

。。。
services.AddMassTransit(x=>
{
x、 AddConsumer();
x、 使用RabbitMQ((上下文,cfg)=>
{
主机(“localhost”,c=>
{
c、 用户名(“用户名”);
c、 密码(“密码”);
});
ReceiveEndpoint(“队列名称”,e=>
{
e、 配置消费者(上下文);
});
});
});
services.AddMassTransitHostedService();
...
EventConsumer.cs

公共类事件消费者:IConsumer
{
专用只读ILogger\u记录器;
公共事件消费者(ILogger记录器)
{
_记录器=记录器;
}
公共异步任务使用(使用上下文)
{
var message=context.message;
}
}

提前感谢所有回复。

在IIS下运行时,
IHostedService
是否从容器中解析并启动?总线就是这样启动的,环境似乎是唯一的区别。@ChrisPatterson我应该创建类似的东西吗?如果是这样的话,为什么它在没有在IIS下运行时没有该服务就可以正常工作?我认为
services.AddMassTransitHostedService()行吗。MassTransit有自己的,您不需要创建它。我的意思是,在IIS下运行与在IIS下运行不同,导致它无法运行。似乎与某些IIS设置有关:@ChrisPatterson谢谢你,正如你所写,它与IIS设置有关。我将“Preload enabled”更改为true,它立即开始使用队列中的消息。
...
services.AddMassTransit(x =>
{
    x.AddConsumer<EventConsumer>();

    x.UsingRabbitMq((context, cfg) =>
    {
        cfg.Host("localhost", c =>
        {
            c.Username("username");
            c.Password("password");
        });
        cfg.ReceiveEndpoint("queue-name", e =>
        {
            e.ConfigureConsumer<EventConsumer>(context);
        });
    });
});

services.AddMassTransitHostedService();
...
public class EventConsumer : IConsumer<Event>
{
    private readonly ILogger<EventConsumer> _logger;
    
    public EventConsumer(ILogger<EventConsumer> logger)
    {
        _logger = logger;
    }

    public async Task Consume(ConsumeContext<Event> context)
    {
        var message = context.Message;
    }
}