Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.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# 域.Net核心的RabbitMQ开放通道e返回消息_C#_.net Core_Rabbitmq - Fatal编程技术网

C# 域.Net核心的RabbitMQ开放通道e返回消息

C# 域.Net核心的RabbitMQ开放通道e返回消息,c#,.net-core,rabbitmq,C#,.net Core,Rabbitmq,我正在使用RabbitMQ,并希望进行以下配置 打开一个频道,接收信息并返回我的BLL处理,但保持此频道打开 为此,我有一个服务类,其中我有publisher和consumer的方法,我的bll使用这些方法 我最大的问题是在自动确认中,我希望能够从bll控制它,但我需要在我的服务中创建的通道实例 有什么正确的方法吗 我可以将实例与消息一起返回吗 public Task<List<string>> ConsumerRabbitMQ(string queeue, bool i

我正在使用RabbitMQ,并希望进行以下配置

打开一个频道,接收信息并返回我的BLL处理,但保持此频道打开

为此,我有一个服务类,其中我有publisher和consumer的方法,我的bll使用这些方法

我最大的问题是在自动确认中,我希望能够从bll控制它,但我需要在我的服务中创建的通道实例

有什么正确的方法吗

我可以将实例与消息一起返回吗

public Task<List<string>> ConsumerRabbitMQ(string queeue, bool isWork)
{
    try
    {
        var message = new List<string>();
        
        var factory = new ConnectionFactory() { HostName = "localhost" };
        using (var connection = factory.CreateConnection())
        using (var channel = connection.CreateModel())
        {
            channel.QueueDeclare(queue: queeue,
                                 durable: false,
                                 exclusive: false,
                                 autoDelete: false,
                                 arguments: null);

            var consumer = new EventingBasicConsumer(channel);
           
            consumer.Received += (model, ea) =>
            {
                try
                {
                    var body = ea.Body.Span;
                    message.Add(Encoding.UTF8.GetString(body));

                    channel.BasicAck(ea.DeliveryTag, false);
                }
                catch (Exception ex)
                {
                    var ff = channel;
                    CreateConnection();
                 
                    channel.BasicNack(ea.DeliveryTag, false, true);
                }
            };

            channel.BasicConsume(queue: queeue,
                                 autoAck: false,
                                 consumer: consumer);

           
        }                           

        return Task.FromResult(message);
    }
    catch (Exception)
    {
        return null;

        throw;
    }
}
public Task ConsumerRabbitMQ(字符串queue,bool-isWork)
{
尝试
{
var message=新列表();
var factory=new ConnectionFactory(){HostName=“localhost”};
使用(var connection=factory.CreateConnection())
使用(var channel=connection.CreateModel())
{
channel.QueueDeclare(队列:queue,
持久性:错误,
独家:假,,
自动删除:false,
参数:null);
var消费者=新事件基本消费者(渠道);
消费者.已接收+=(型号,ea)=>
{
尝试
{
var body=ea.body.Span;
Add(Encoding.UTF8.GetString(body));
channel.BasicAck(ea.DeliveryTag,false);
}
捕获(例外情况除外)
{
var ff=信道;
CreateConnection();
channel.BasicNack(ea.DeliveryTag,false,true);
}
};
channel.BasicConsume(队列:queue,
自动确认:错误,
消费者:消费者),;
}                           
返回Task.FromResult(消息);
}
捕获(例外)
{
返回null;
投掷;
}
}
这是我的消费者类,我将队列中的所有项目存储在一个列表中,并在最后返回我的BLL,我这样做对吗