WedX - журнал о программировании и компьютерных науках

rabbitmq/java - получать сообщения по желанию, а не по подписке

Я пишу потребителя для rabbitmq и мне нужно получать сообщения не по подписке. Мне нужно получить его, поработать с ним, а после работы получить следующее сообщение. Это что-то вроде

   while(true){
        String message = consumer.getNext();
        .......
   }

В google я нашел много примеров того, что мне нужно с QueueingConsumer, как это

    while (true) {
      QueueingConsumer.Delivery delivery = consumer.nextDelivery();
      String message = new String(delivery.getBody());

      System.out.println(" [x] Consumer : received '" + message + "'");
      doWork(message);

      channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);
    }

Но QueueingConsumer устарел и удален из последней java-библиотеки rabbitmq. Я нашел только учебники с такой подпиской https://www.rabbitmq.com/tutorials/tutorial-one-java.html

Скажите пожалуйста, где найти свежий пример java-кода с нужным мне функционалом?

05.05.2018

Ответы:


1

Поскольку вы находитесь в стране Java, насколько вы готовы попробовать spring-boot?

У них также есть стартеры AMQP, если вам нужна помощь в начальной загрузке.

https://projects.spring.io/spring-amqp/

1) Создаем воркера, который будет подписан на очередь

package hello;

import java.util.concurrent.CountDownLatch;
import org.springframework.stereotype.Component;

@Component
public class Receiver {

    private CountDownLatch latch = new CountDownLatch(1);

    public void receiveMessage(String message) {
        System.out.println("Received <" + message + ">");
        latch.countDown();
    }

    public CountDownLatch getLatch() {
        return latch;
    }

}

2) Затем свяжите рабочий компонент с очередью в соответствии с вашей топологией.

package hello;

// imports omitted for brevity

@SpringBootApplication
public class Application {
    // code omitted for brevity 

    @Bean
    MessageListenerAdapter listenerAdapter(Receiver receiver) {
        return new MessageListenerAdapter(receiver, "receiveMessage");
    }

    public static void main(String[] args) throws InterruptedException {
        SpringApplication.run(Application.class, args).close();
    }

}

Если вы новичок в Spring, он предоставляет контейнер IoC. Spring-boot упрощает конфигурацию/настройку Spring Framework (по мнению некоторых).

Вот руководство по началу работы: https://spring.io/guides/gs/messaging-rabbitmq/

05.05.2018

2

Я не Java-парень, поэтому у меня нет кода. Но если вы установите ограничение предварительной выборки (QoS) на 1, вы получите только одно сообщение за раз. Как только вы вручную подтвердите сообщение, вы сразу же получите другое.

На вашем канале установите предварительную выборку на 1.

channel.basicQos(1);

Таким образом, у вас не будет петли. Просто стандартный потребительский подход к обработке событий, но вы можете гарантировать, что будете обрабатывать сообщения последовательно.

11.05.2018
Новые материалы

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

ИИ в аэрокосмической отрасли
Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


Для любых предложений по сайту: [email protected]