Самым достойным хвастовства в жизни должно быть не то, сколько у вас богатства (хотя это немного против вашего сердца, ха-ха), а ваша способность учиться. Скорость технологических обновлений и итераций очень высока, поэтому, как программисты, мы должны иметь сердце, чтобы принимать изменения и активно следить за ними.
Прежде чем приступить к работе с RabbitMQ, я началRedis,ElasticsearchиMongoDB, что заставляет меня чувствовать себя вызывающим и очень хорошим.
Прежде чем вы продолжите чтение, друзья, я должен заявить, что я не проводил глубоких исследований RabbitMQ, просто потому, что я хочу его использовать, я изучу его. Но как ответственный технический блогер, я тронут, после прочтения этого вводного урока мои друзья точно останутся довольны.
Конечно, когда друзья столкнутся с ошибками в статье, не будьте милосердны, вы можете сформировать группу, чтобы прийти и побить меня, но смотрите, чтобы вы не ударили себя по лицу, я боюсь обезображивания.
01. Что такое RabbitMQ
Во-первых, я знаю, что Кролик — это кролик (о боже, я не мог не похвастаться своим знанием английского), и милый образ уже возник у меня в голове. Тогда что такое МК? Это аббревиатура от Message Queue, что означает, что RabbitMQ — это система очередей сообщений с открытым исходным кодом.
Основными особенностями RabbitMQ являются его надежность, простота использования, высокая производительность, высокий уровень параллелизма, простое расширение кластера и мощная поддержка сообщества открытого исходного кода. Во всяком случае, это довольно высокомерно.
Девять лет назад, когда я занимался оптовой торговлей фьючерсами, мне тоже понадобился пуш сообщений, в то время я не знал, где найти такой готовый мидлвар, поэтому реализовал его с помощью кастомной очереди. ,Я создал много ошибок,некоторые из которых еще не доступны.Решено,это действительно незабываемое прошлое.
На следующем рисунке представлена схема модели сообщения RabbitMQ (из сети, вторжение и удаление), друзья, чтобы почувствовать это.
1) P — Producer, который представляет производителя, то есть отправителя сообщения, который может отправить сообщение X
2) X — это Exchange (почему не E, мне тоже любопытно), который представляет собой exchange, который может принимать сообщения, отправленные производителями, и отправлять сообщения в указанную очередь по маршруту.
3) Q — это Queue, то есть очередь, в которой хранятся сообщения, отправленные коммутатором
4) C — Consumer, который представляет потребителя, то есть получателя сообщения, получающего сообщение из очереди.
Слушая мое объяснение, впечатление от RabbitMQ очень конкретное? Ребята, давайте учиться!
02. Установите Эрланг
Эй, почему бы не установить RabbitMQ? Давайте сначала взглянем на официальное объяснение.
Я не очень хорошо понимаю английский, ничего страшного, я добавлю слова из двух. Сервер RabbitMQ написан на языке Erlang, и его установочный пакет не интегрирует среду Erlang, поэтому сначала необходимо установить Erlang. Не волнуйтесь, ребята, установить Erlang несложно.
Адрес загрузки Erlang выглядит следующим образом:
Последняя версия 23.0.1, я выбрал 64-битную версию, около 104М. После скачивания можно двойным щелчком запускать установку, глупо.
Надо отметить, что у меня при установке компьютер один раз перезагрузился, как будто для установки библиотеки, и забыл сохранить картинку перед перезагрузкой (извините). После перезапуска снова дважды щелкните файл otp_win64_23.0.1.exe, чтобы завершить установку Erlang.
03. Установите RabbitMQ
После успешной установки Erlang вы можете установить RabbitMQ. Адрес загрузки следующий:
woohoo.rabbitcurrent.com/install-win…
Найдите место на изображении ниже и выберите файл в красном поле для загрузки.
Размер установочного пакета составляет всего 16,5 МБ, что по-прежнему очень легко. После загрузки просто дважды щелкните, чтобы запустить exe-файл, чтобы установить его сдуру.
После успешной установки RabbitMQ можно запустить как службу Windows, а службой RabbitMQ Windows можно управлять из меню «Пуск».
Нажмите «Командная строка RabbitMQ (sbin dir)», введите командную строку, введитеrabbitmqctl.bat status
Статус запуска RabbitMQ можно подтвердить.
Вы можете увидеть некоторую информацию о статусе RabbitMQ:
- ID процесса, то есть PID 2816
- Операционная система Windows
- Текущий номер версии 3.8.4.
- Информация о конфигурации Эрланга
Интерфейс командной строки не выглядит элегантным, поэтому мы можем включить подключаемый модуль пользовательского интерфейса управления на стороне клиента, набрав:
rabbitmq-plugins enable rabbitmq_management
Когда вы увидите следующую информацию, вы можете подтвердить, что плагин успешно включен.
Введите в адресной строке браузераhttp://localhost:15672/Вы можете войти в интерфейс управления, как показано на следующем рисунке:
04. Использование RabbitMQ в Java
Некоторые друзья могут спросить: «Второй брат, я Java-программист, как я могу использовать RabbitMQ в Java?» Это хороший вопрос, вот он, вот он.
Первый шаг — добавить в проект клиентские зависимости RabbitMQ:
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.9.0</version>
</dependency>
На втором этапе смоделируем простейший сценарий: производитель отправляет сообщение в очередь, а потребитель читает сообщение из очереди и печатает его.
У официального есть очень хорошее объяснение RabbitMQ, так что я буду использовать его "справедливо". Когда я учился в старших классах, самым популярным способом общения среди одноклассников были не QQ, WeChat и даже не текстовые сообщения, а письма. Потому что смартфонов в то время не было, а в школе их запрещали во время учебы, поэтому лучшим способом выражения эмоций было письмо. Я так скучаю по этому.
Предположим, я пишу любовное письмо Girlfriend Alley следующего содержания:
в переулок Привет Аллея. Я скучаю каждый день с тех пор, как ты уехал, как Дон Кихот, я скучаю по Дасинии из Топосо каждый день. Теперь у меня появилась привычка ходить к вам каждые два или три дня, чтобы сказать то, что я не хочу говорить другим. . . . . . . Ван Эр, 20 мая
Если это любовное письмо нужно отправить в переулок, мне нужно пойти на почту, купить марки и доставить его в почтовый ящик. Если ваша девушка хочет получить это любовное письмо, почтальон должен сделать все возможное, чтобы не потерять его.
RabbitMQ похож на почтовое отделение, только обрабатывает сообщения вместо почты. Как объяснялось ранее, P — производитель, а C — потребитель.
Создайте новый класс производителей Wanger:
public class Wanger {
private final static String QUEUE_NAME = "love";
public static void main(String[] args) throws IOException, TimeoutException {
ConnectionFactory factory = new ConnectionFactory();
try (Connection connection = factory.newConnection();
Channel channel = connection.createChannel()) {
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
String message = "小巷,我喜欢你。";
channel.basicPublish("", QUEUE_NAME, null, message.getBytes(StandardCharsets.UTF_8));
System.out.println(" [王二] 发送 '" + message + "'");
}
}
}
1) QUEUE_NAME — это имя очереди, то есть сообщение, отправленное производителем, будет помещено в любовную очередь.
2) Создайте соединение с сервером:
ConnectionFactory factory = new ConnectionFactory();
try (Connection connection = factory.newConnection();
Channel channel = connection.createChannel()) {
ConnectionFactory — это очень удобный фабричный класс, который можно использовать для создания подключения по умолчанию к RabbitMQ (имя хоста «localhost»). Затем создайте канал (Channel) для отправки сообщения.
Оба класса Connection и Channel реализуют интерфейс Closeable, поэтому вы можете использовать оператор try-with-resource.Если вы не знакомы с оператором try-with-resource, вы можете проверить, что я написал ранее.Я хожустатья.
3) При отправке сообщения должно быть задано имя очереди, черезqueueDeclare()
настройки метода.
4)basicPublish()
Метод используется для публикации сообщения:
- Первый параметр — exchange, в текущей сцене он не нужен, поэтому ему присваивается пустая строка;
- Второй параметр — это ключ маршрутизации (routingKey), который временно заполняется именем очереди;
- Третий параметр — это другие параметры сообщения (BasicProperties), которые пока не будут настраиваться;
- Четвертый параметр — это тело сообщения, представляющее собой массив байтов в формате UTF-8, который может эффективно предотвратить искажение китайских символов.
Доступен класс-производитель. Далее создадим новый класс-потребитель XiaoXiang:
public class XiaoXiang {
private final static String QUEUE_NAME = "love";
public static void main(String[] args) throws IOException, TimeoutException {
ConnectionFactory factory = new ConnectionFactory();
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
channel.queueDeclare(QUEUE_NAME, false, false, false, null);
System.out.println("等待接收消息");
DeliverCallback deliverCallback = (consumerTag, delivery) -> {
String message = new String(delivery.getBody(), "UTF-8");
System.out.println(" [小巷] 接收到的消息 '" + message + "'");
};
channel.basicConsume(QUEUE_NAME, true, deliverCallback, consumerTag -> { });
}
}
1) Код для создания канала аналогичен коду производителя, за исключением того, что оператор try-with-resource не используется для автоматического закрытия соединения и канала, потому что мы хотим, чтобы потребитель сохранял соединение, пока мы принудительно не закроем его.
2) При получении сообщения необходимо задать имя очереди и установить его через метод queueDeclare().
3) Поскольку RabbitMQ будет отправлять нам сообщения асинхронно, нам нужно предоставить обратный вызов, который будет буферизовать сообщения, пока мы не будем готовы их получить.
DeliverCallback deliverCallback = (consumerTag, delivery) -> {
String message = new String(delivery.getBody(), "UTF-8");
System.out.println(" [小巷] 接收到的消息 '" + message + "'");
};
basicConsume()
Метод используется для получения сообщения:
-
Первый параметр — это имя очереди (queue), которое соответствует производителю (love).
-
Второй параметр — autoAck, если он равен true, он указывает, что сервер должен доставить сообщение за один раз. Как понимать это понятие? Перед запуском потребительского класса XiaoXiang вы можете несколько раз запустить производящий класс Wanger, чтобы отправить несколько сообщений в очередь. После запуска потребительского класса вы увидите, что несколько сообщений получены одновременно, как показано ниже.
等待接收消息
[小巷] 接收到的消息 '小巷,我喜欢你。'
[小巷] 接收到的消息 '小巷,我喜欢你。'
[小巷] 接收到的消息 '小巷,我喜欢你。'
-
Третий параметр — DeliverCallback — функция обратного вызова сообщения.
-
Четвертый параметр — CancelCallback, с которым я еще не разобрался.
Во время процесса отправки сообщения вы также можете использовать панель управления RabbitMQ для просмотра диаграммы тенденций сообщений, как показано ниже.
05. Спасибо
Ну что же, дорогие мои друзья, на этом и закончилось содержание этой статьи. Хотите попрактиковаться в RabbitMQ после прочтения? Спешите и действуйте! Если у вас возникнут проблемы в процессе обучения, пожалуйста, не стесняйтесь общаться со мной.Хотя я тоже новичок, я полон энтузиазма.
Кроме того, если вы хотите писать статьи на уровне ворот, это лучший пример.
Я Silent King Er, интересный программист. Если вы считаете, что статья полезна для вас, пожалуйста, выполните поиск по запросу "Тихий король 2"Прочтите это в первый раз, ответьте [666] Есть также обучающие видео высокой четкости 500G (по категориям), которые я тщательно подготовил для вас.
эта статьяGitHubОн был включен, и есть полные тестовые площадки для интервью на крупных заводах.Добро пожаловать в Star.
Оригинальность непроста, не просите пустой билет, пожалуйста, поставьте лайк этой статье, что будет моей сильнейшей мотивацией писать больше качественных статей.