RabbitMQ DefaultConsumer вызывает слишком много потребительских тегов

Вот решение с использованием регулярных выражений:

List<double> numbers = new Regex(@"(\d+)\*x").Matches(line)
                         .Cast<Match>()
                         .Select(m => double.Parse(m.Groups[1].Value))
                         .ToList();

EDIT: обновлено для анализа чисел.

0
задан guru 18 January 2019 в 21:14
поделиться

2 ответа

Я наконец нашел рабочее решение. Как подчеркнул Люк Баккен, опрос не требуется. Я просто звоню receiveMesssages() только один раз. После этого мой потребитель получает обратные вызовы, когда сообщения публикуются в очереди.

 protected LinkedBlockingQueue<Message> messages = new LinkedBlockingQueue<>();
 public void receiveMessages() {
    try {
        Message message = new Message();
        DeliverCallback deliverCallback = (consumerTag, delivery) -> {
            long deliveryTag = delivery.getEnvelope().getDeliveryTag();
            String response = new String(delivery.getBody(), "UTF-8");
            if (response != null) {
                message.setId(NUID.nextGlobal());
                message.setPayload(response);
                message.setDeliveryTag(deliveryTag);
                messages.add(message);
                logger.info("Message received: ", message.getPayload());
            };
        channel.basicConsume(queueName, false, deliverCallback, consumerTag -> { });
    } catch (Exception e) {
        logger.error("Exception while getting messages from Rabbit ", e);
    }
}

На консоли кролика теперь отображается только 1 запись тега потребления в связанной очереди.

0
ответ дан guru 18 January 2019 в 21:14
поделиться

Нормально ли видеть эти растущие потребительские теги?

Нет, в вашем коде есть ошибка. Вам нужно либо просто использовать долгосрочного потребителя, либо вы должны отменить своего потребителя, когда закончите с ним.

Я не вижу необходимости «опрашивать» receiveMessages - просто дайте ему работать самостоятельно, и он будет добавлять сообщения в синхронизированную очередь, как вы ожидаете.


ПРИМЕЧАНИЕ: команда RabbitMQ отслеживает список рассылки rabbitmq-users и только иногда отвечает на вопросы по StackOverflow.

0
ответ дан Luke Bakken 18 January 2019 в 21:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: