Перестали приходить сообщения в RabbitMQ

Всем привет,

У меня есть GoLang код на клиенте который шлёт в очередь сообщение для получения данных:

ch, errCreateChannel := structs.RabbitMQ.Channel()
if errCreateChannel != nil {
    return symbols, errCreateChannel
}
defer ch.Close()

var queueName = fmt.Sprintf("%s-data", "my-custom-queue-1")
msgs, errConsume := ch.Consume(queueName, "", true, false, false, false, nil)
if errConsume != nil {
    return symbols, errConsume
}

corrId := gofakeit.UUID()

errPublish := ch.Publish("", queueName, false, false,
    amqp.Publishing{
        Type:          "Symbols",
        CorrelationId: corrId,
        ReplyTo:       queueName,
    })
if errPublish != nil {
    return symbols, errPublish
}

timer := time.NewTimer(time.Second * 5)
for {
    select {
    case <-timer.C:
        return symbols, errors.New("Ошибка получения отклика от брокера при получении символов")
    case msg := <-msgs:
        if corrId == msg.CorrelationId {
            errUnmarshal := json.Unmarshal(msg.Body, &symbols)
            return symbols, errUnmarshal
        }
    }
}

И на сервере следующий код:

_connection = factory.CreateConnection();
_channel = _connection.CreateModel();
_channel.QueueDeclare("my-custom-queue-1-data", false, false, true, null);
_channel.BasicQos(0, 1, false);
var consumer = new EventingBasicConsumer(_channel);
_channel.BasicConsume(_cmd.Rmq.Queue, false, consumer); // AutoAck disabled

consumer.Received += (_, ea) =>
{
    var response = "";
    
    try
    {
        switch (ea.BasicProperties.Type)
        {
            case "Symbols":
                Console.WriteLine("Received Symbols request");
                response = "{\"Data\":1}";
                break;
        }
    }
    catch (Exception e)
    {
        var builder = new StringBuilder();
        Utils.WriteExceptionDetails(e, builder, 0);
        Console.Error.WriteLine(DateTime.Now + " - " + "Exception during fetching of symbols from broker: " + builder);
    }
    finally
    {
        var responseBytes = Encoding.UTF8.GetBytes(response);
        var replyProps = _channel.CreateBasicProperties();
        replyProps.Type = ea.BasicProperties.Type;
        if (ea.BasicProperties.CorrelationId != "")
            replyProps.CorrelationId = ea.BasicProperties.CorrelationId;
        
        _channel.BasicPublish("", ea.BasicProperties.ReplyTo, replyProps, responseBytes);
        _channel.BasicAck(ea.DeliveryTag, false); // Acknowledge the processing
    }
};

Сейчас получается такая ситуация: При запуске RabbitMQ сообщение доходит то С# кода, отправляется, НО не доходит до получателя. После повторных запусков сообщение от Go не доходит более до C#. Для того чтобы вернуть всё на место приходится перезапускать RabbitMQ. Вопрос - что я пропустил в своем коде, чтобы он работал аналогично примеру Direct Reply-To? Вроде ничего не упустил, CorrelationId есть, раньше всё работало, но сейчас более не работает - сообщения застревают в очереди и не отправляются обратно в Go клиент.


Ответы (0 шт):