📱

Get Our Mobile App

Take your business learning on the go!

Download on the App StoreGet it on Google Play

Брокер сообщений. RabbitMQ // Демо-занятие курса «Архитектор 1С»

OTUS IT Онлайн - образование1:01:45

Transcription

Надеюсь, все, кто хотел присоединиться, присоединились, подключились. Ещё раз всех категорически приветствую! Давайте начинать, коллеги.

Сегодня у нас будет довольно интересная тема — брокер сообщений RabbitMQ. Давайте ещё раз продублирую: видно меня, слышно? Хотелось бы сразу отметить, что трансляция примерно заедает на 10 секунд. Ну, то есть, я говорю с опережением, поэтому отклик мой будет гораздо дольше, чем хотелось бы, возможно. Поэтому учитывайте это, пожалуйста.

Также хотелось бы отметить, коллеги, кроме заедания, ну, не заедания, а такого небольшого лага в трансляции на YouTube: у меня два экрана, я могу смотреть туда и обратно. Соответственно, я вижу все вопросы в чате. У нас будут минутки для того, чтобы ответить на эти вопросы, поэтому не переживайте. Я на все вопросы отвечу, обо всём поговорим, но я дополнительно по правилам вебинара ещё это продублирую.

Давайте начнём, и для начала познакомимся, пока, может быть, кто-то ещё к нам подойдёт. Тема открытого урока у нас ещё раз — брокер сообщений RabbitMQ. Меня зовут Кузин Роман Вячеславович. Моя должность — это ведущий архитектор IT-систем, компания MTS Digital. Я СЕО продукта по автоматизации финансовой и хозяйственной деятельности компании. Мой опыт работы в 1С с 2015 года. Из них разработчиком, ведущим разработчиком я отработал около 4 лет, и архитектором, ведущим архитектором, тимлидом тоже около 4 лет. Мои профессиональные интересы — это повышение надёжности и производительности конфигурации, это повышение прозрачности разработки и внедрение DevOps и Scrum практик в командах.

Хотелось бы вам представить маршрут вебинара. Вы видите его на экране. Первое — это знакомство. Сейчас мы познакомимся со мной, уже познакомились. Мне бы хотелось познакомиться с вами. Дальше мне бы хотелось поговорить об Otus, рассказать, что такое Otus, какая мы площадка. Дальше мы перейдём уже непосредственно к теме нашего вебинара, а именно поговорим о том, что такое брокер сообщений. Возможно, там кто-то, да, ну, не знает и не работал вообще с ним.

А также мне сразу дополнительно предварительно хотелось бы отметить, что уровень у всех разный на курсе, ой, не на курсе, на открытом уроке. Поэтому, если что-то будет совсем непонятно, не переживайте, не пугайтесь. Соответственно, вы должны работать с интеграциями, должны понимать, что это. И если там тема показалась вам сложной, ничего страшного, я постараюсь отвечать на все вопросы, всё объяснять достаточно подробно.

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

Дальше мне бы хотелось рассказать про команду курса. Потом мы перейдём, вообще, переведём своё внимание на то, что это за курс, какая у нас программа обучения на курсе "Архитектор 1С". Мы поговорим про карьерную информацию о том, насколько востребованы сейчас архитекторы 1С на рынке.

И с какой основной целью вы записались на данное занятие? Пишите, пожалуйста, ответы на вопрос в чат. Можете там по отдельности, можете всё сразу. Давайте познакомимся с вами, коллеги. Жду ваших комментариев. Пока, к сожалению, не вижу. Жду ещё минутку. Если не увижу, тогда будем продолжать. Будьте активнее, коллеги, пожалуйста.

Кирилл, Тверь, более 20 лет, изучить новую тему. Здорово, Кирилл, отлично! Надеюсь, сможете там сразу же, хотелось бы, после открытого урока применять это в своей работе. У нас на нашем курсе были ученики, которые после занятий по брокеру прямо сразу шли и внедряли это в рабочий процесс. Надеюсь, буду полезен.

Александр из Карелии, в IT больше 35 лет. Ого! Цель — подробнее познакомиться с темой сегодняшнего занятия. Отлично! Надеюсь, будет полезно, и плюс я оставлю дополнительно ссылки в презентации. Сможете дополнительно почитать, ознакомиться со статьями и с репозиторием на GitHub.

Игорь, Москва, больше... Да, какие у нас мощные ребята собрались здесь! Новая тема, применительно к 1С. Отлично, прекрасно! Ну, видимо, со всеми, кто хотел высказаться, пока... А, Юрий! Вот ещё Юрий, Шахтёрск, область, больше двадцати, систематизировать знания. Отлично, отлично! Надеюсь, пригодится это занятие.

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

Правила вебинара у нас будут такие: мы активно участвуем, задаём вопросы в чат. Всё, что непонятно, задаём, не стесняемся. Я с удовольствием на них отвечу. И вопросы вижу в чате. Прошу прощения, вопросы вижу в чате и могу ответить не сразу. У меня два экрана, поэтому ещё раз напомню, поэтому могу отвечать с задержкой, когда отвечаю на, рассказываю материал.

Давайте начинать. Хотелось бы вообще рассказать об Otus. То есть, что такое и кто, что такое компания Otus. Otus специализируется на обучении в IT, и наша фишка — это продвинутые программы для специалистов с опытом и быстрый запуск курсов по новым, набирающим популярность технологиям. Наши клиенты — это партнёры, современные технологические компании. И обучение, открытые материалы привлекают специалистов разных грейдов: от джуниора до лида.

Программа у Otus имеется также образовательная лицензия, поэтому курсы являются программами повышения квалификации, профессиональной переподготовки. По завершению курса вам выдаётся, соответственно, итоговый сертификат о повышении квалификации. Направление курсов, как я уже сказал, есть для разных грейдов: от джуна до лида. Это и программирование, инфраструктура, AI/Data Science, информационная безопасность. Сегодня мы рассмотрим тему по программированию в 1С.

Мы в цифрах: это 130+ курсов для специалистов и менеджеров, 600+ преподавателей, которые делятся актуальными знаниями и реальными кейсами, 6 лет со дня основания компании, 20 000 выпускников уже прошли обучение по программам, и 430 000 IT-специалистов в нашем сообществе читают наш материал, учатся и общаются на наших площадках.

Напишите, пожалуйста, в чат цифру: если один — если уже учились у нас в компании, два — если не учились, но слышали о нас, и три — если вообще впервые знакомитесь с Otus, первый раз пришли к нам на открытый урок лично, там, может быть, даже ко мне, ну, не только ко мне, вообще на любой открытый урок в Otus. Поэтому напишите цифру, чтобы ещё поподробнее понимать контингент.

Три. Угу. Игорь, два. Отлично. Угу. Угу. Отлично. Ну, то есть, ещё пока никто не учился, но это, конечно, исправим. Давайте продолжать.

Давайте наконец-то уже перейдём к нашей теме — брокер сообщений RabbitMQ. Я сейчас постараюсь рассказать о том, что вообще это такое.

Цели вебинара у нас следующие будут: после занятия вы сможете разобраться вообще в архитектуре брокера сообщений RabbitMQ, изучить основные сущности брокера, понять, что это, для чего это используется, какие основные настройки, параметры есть, ознакомиться с основными настройками, поработать в веб-интерфейсе RabbitMQ. RabbitMQ — это приложение, у которого есть веб-интерфейс, в котором можно делать различные настройки, поэтому мы с ним сегодня поработаем в веб-интерфейсе. А также мы поработаем с "кроликом" в контексте 1С: отправим и прочитаем сообщение.

Почему я говорю слово "кролик"? RabbitMQ, "кролик" — это синонимичные понятия, поэтому я в процессе нашего открытого урока буду по-разному это называть. Так что не пугайтесь, это будет и "кролик", и Rabbit, и RMQ, чтобы просто не повторяться.

Что такое RMQ? Давайте начнём. RabbitMQ ("кролик") — это брокер сообщений, который используется для передачи и обмена сообщений между системами. То есть, стандартный обмен, все мы знаем из 1С: кто-то что-то отправляет, кто-то что-то получает. Тут, в принципе, всё понятно.

Использование RabbitMQ обеспечивает эффективный обмен данными между любыми приложениями, и это позволяет автоматизировать процессы, сократить время на разработку и эксплуатацию систем. Сейчас дальше мы вообще поговорим о том, почему этот обмен эффективный и почему RabbitMQ вообще используют не только в мире 1С, но и во всех остальных языках программирования для обмена данными.

Какие вообще есть преимущества интеграции 1С с RabbitMQ? Первое — это масштабируемость, то есть есть возможность расширения системы без изменения архитектуры системы самой 1С. Дальше — высокая надёжность: есть гарантированная доставка сообщения, обработка ошибок, то есть всё то, что было отправлено, должно быть обязательно получено.

Открытый протокол: протокол AMQP используется для обмена сообщениями, что обеспечивает совместимость с другими системами, использующими этот протокол. Есть огромное количество библиотек, использующих протокол AMQP, не только... ну, для других языков программирования. Он бесплатный. Для 1С есть и коммерческие библиотеки, и бесплатные библиотеки, поэтому все системы, которые взаимодействуют в рамках контура Rabbit, могут друг с другом обменяться довольно просто.

Гибкость — это возможность настройки системы под нужды конкретного бизнеса. То есть, RabbitMQ используются не только в таких системах, как 1С, например, Go, Python, ну, то есть, в любых корпоративных системах, которые написаны, но и в Big Data, потому что поддерживает такое количество сообщений — там больше миллиона в минуту по обмену данных. Его очень часто используют в Big Data, поэтому его можно гибко настроить там для вашего количества сообщений, которыми вы обмениваетесь.

Какие вообще есть основные компоненты системы RabbitMQ? То есть, что нужно, что используется в RabbitMQ, какие есть основные понятия? Давайте про них поговорим. Основные понятия, используемые в RabbitMQ, это очереди. То есть, сегодня мы будем о них очень много говорить. Дальше я дам пояснение и расшифровку того, что такое вообще очередь. Дальше это будет издатель (publisher), это подписчик (consumer), сообщения (messages), обменники (exchanges), протокол AMQP и расширения. То есть, это основные понятия, о которых мы будем сегодня разговаривать.

Поговорим сразу о первом из них — это издатели и подписчики. Что вообще такое издатели (publisher)? Это приложения, которые отправляют сообщения в очереди RabbitMQ. То есть, я написал какое-то приложение на Go, на .NET, неважно, и я его отправляю. Что такое вообще сообщение? То есть, это какой-то текст, который можно отправить. То есть, вот что мы понимаем под словом "сообщение": не обязательно какой-то... это может быть и стандартизированный формат, мы говорим про JSON, XML там и так далее, но и просто обыкновенный текст, который я могу засунуть в RabbitMQ и направить его получателям. То есть, издатель (publisher) — это тот, кто отправляет сообщение в брокер обмена данными.

Подписчики — это приложения, которые получают сообщения из очереди Rabbit. То есть, у меня есть приложение на Python, я отправляю моё сообщение как издатель, а подписчик в виде приложения на Go, на 1С, на C# может получить это сообщение и обработать его. Соответственно, на основании этого сообщения пойти в какую-то бизнес-логику и реализовать какой-то бизнес-процесс в зависимости от этого сообщения.

Уже существует ряд библиотек, которые помогают в несколько шагов интегрироваться с "кроликом". Я уже говорил про это, а именно это там Pika — библиотека на языке Python, RabbitMQ .NET Client — это библиотека для работы с C#, а AMQP CPP — это библиотека на C++, а Apache Qpid — это библиотека на языке Java.

Теперь же мы поговорим про очереди. Что такое очереди? Это механизмы хранения сообщений в RabbitMQ. Они предназначены для хранения сообщений, пока они не будут получены и обработаны приложениями-подписчиками. То есть, вспоминаем ещё раз: есть издатель — тот, кто отправляет сообщения, есть подписчик — тот, кто получает сообщения. А вот как раз-таки сущность, которая хранит сообщение, которое отправил издатель и ещё не получил подписчик, называется очередью. То есть, в очереди складируются, сохраняются, как мы видим на картинке, различные сообщения и ждут, когда подписчики вычитают их из очереди.

Теперь же мы поговорим про обменники. Что такое обменники? Обменники — это механизмы, которые принимают сообщения от издателей и маршрутизируют их в соответствующую очередь. То есть, когда издатель публикует сообщение, он отправляет его в определённый обменник, с помощью которого происходит маршрутизация в конкретную очередь, из которой вычитывает сообщение консьюмер.

А соответственно, как это работает? Есть разные виды обменников. Первый обменник — это Direct. Сообщения маршрутизируются в очереди, связанные с обменником, на основании значения ключа маршрутизации. То есть, есть какой-то, так сказать, ключ маршрутизации, и он является основным регулятором сообщения в какую-то определённую очередь. То есть, это строка, можно, если просто объяснять, используя вот... используя совпадение этого ключа, мы можем отправлять сообщения в разные очереди в зависимости от Exchange (обменника), который мы видим на экране. А именно Direct маршрутизирует в очередь в зависимости от точного совпадения ключа.

Fanout: сообщение отправляется во все очереди, связанные с обменником. То есть, нет никакой привязки к ключу маршрутизации, всё то, что привязали, туда и получили.

И соответственно, есть самый популярный, так сказать, обменник, который называется Topic. А именно в Topic сообщение маршрутизируется в очереди, связанные с обменником, на основании, как я уже сказал, ключа маршрутизации, только ключ маршрутизации шаблонизируется. А именно можно с помощью ключа, так сказать, с помощью ключа происходит совпадение, происходит частичное совпадение текста RabbitMQ, и в зависимости от этого частичного совпадения текста, вот как мы видим на... из-за этого частичного совпадения текста также сообщение маршрутизируется в определённую очередь. То есть, если у меня будет ключ маршрутизации `stock.usa`, это будет соответствовать ключам маршрутизации `stock.usd` и `stock.euro`, если мы посмотрим на картинку, то есть, которая находится справа. Сообщение Exchange отправляет напрямую сообщение Topic по ключу, а Fanout — в те очереди, к которым он привязан, и ключ игнорируется.

Надеюсь, сейчас, возможно, было немножко сложновато, поэтому хотелось бы, чтобы вы запомнили и больше разбирались в RabbitMQ. Поэтому у нас будет небольшой интерактив, а именно Live. И если вы хорошо слушали меня и обращали внимание на картинку, я предлагаю вам распределить виды обменников по порядку в соответствии с картинкой. То есть, есть на экране три вида Exchange: это Fanout, Direct, Topic. Пожалуйста, в зависимости от картинки, расположите и напишите в комментарии, какой Exchange ему соответствует. То есть, если, например, вы считаете, то, что первое — это Fanout, Direct — это два, а Topic — это три, так и напишите: 1, 2, 3 в комментарии. Я жду ваших ответов в чат. Коллеги, не переживайте, не пугайтесь, очень жду.

2 1 3. Так, 3 1 2. Так, 2 3 1. Ага, ещё минутку жду, коллеги. 2 3 1. 2 3 1. Супер! Надеюсь, все ответили. Правильный ответ, коллеги: 2 3 1. То есть, первый, давайте я отмотаю назад. Первое — это, напомню, Direct, то есть сообщение маршрутизируется ровно по ключу, который задан, то есть без шаблонизации. Fanout вообще не использует ключ. Соответственно, правильный ответ — 2 3 1. Правильный ответ — 2 3 1. Так что кто... Михаил, Александр, Кирилл, здорово, правильно ответили, верно!

Теперь давайте поподробнее и в более таких упрощённых терминах хотелось бы рассказать маршрутизацию сообщений вообще по этому ключу. Это процесс отправки сообщений в нужную очередь, используя правила, заданные в конфигурации RabbitMQ. То, что мы в веб-интерфейсе накололи, то, что задали, какие правила ключа задали, так и будет маршрутизироваться наше сообщение, наш текст, наш JSON, XML или что-то ещё.

"Кролик", и если мы посмотрим на картинку, по сути, "кролик" RabbitMQ регулирует движение пакетов из обменников (Exchange) в очереди (Queue), использует свою длинную большую палку, которая под названием "ключ маршрутизации". Вот он стоит этой палкой, регулирует наше движение сообщения, отправляя их в различные очереди, к различным потребителям. А именно, из очередей уже наши сообщения вычитывают различные приложения: на C#, на Python, на 1С и на чём угодно, в зависимости от вашего ландшафта инфраструктуры компании. Надеюсь, сейчас стало попроще.

Давайте прямо конкретный пример разберём по процессу публикации получения сообщений. Вот у меня есть продюсер, который отправляет моё сообщение. Внутри лежит сообщение, вот он, конвертик, и ключ маршрутизации будет такой: `User.Delete.Profile`. Что означает этот ключ маршрутизации? Как правило, на продуктивных системах в ключевом тексте указывается тип сообщения. Здесь мы видим его — это сообщение "User". Дальше указывается вид события системы, в конкретно данном примере, а именно "Delete", то есть, скорее всего, юзер был удалён. И дальше указывается характеристика типа сообщения, то есть, возможно, у юзера был удалён "Profile", а не весь юзер.

То есть, на этой картинке, соответственно, у нас есть четыре потребителя на наших консьюмерах, на каждую из очередей. То есть, консьюмер 1 на Q1, и так по порядку. Соответственно, каждый из этих... А, когда публикуется такое сообщение, а, когда публикуется такое сообщение с таким ключом маршрутизации, в очередь два, например, идут все. И этот Exchange является топиком, как мы видим, потому что у него есть шаблонизация, и в виде решётки мы видим то, что система 2 получает сообщение с типом сообщения "User" и с характеристикой типа сообщения "Profile", но ему абсолютно всё равно, какой вид события. То есть, это Delete, Update, Add, то есть, добавление нового юзера. То есть, система там 2, например, это логирующая какая-то система, которая получает абсолютно любые события, которые связаны с юзерами.

Сообщение система 1, например, получает только события, связанные с удалением профайла. То есть, оно забирает только сообщения, связанные с удалением юзеров и конкретно конкретной характеристикой типа сообщения с профилем. Например, это какая-то, пусть будет, система безопасности, когда профиль юзера удаляется, у него отбираются все права. То есть, система безопасности (консьюмер 1) получает из очереди 1. Сейчас я просто придумываю.

Остальные... А четвёртая система получает вообще все события, связанные с юзерами, неважно, Update, какой... какая характеристика типа сообщения, там не "Profile", а может быть какая-то ещё. То есть, всё, что связано с юзерами, она получает абсолютно все сообщения, а дальше по какой-то бизнес-логике обрабатывает их. Соответственно, на данном примере мы можем увидеть, как работает Exchange под названием Topic.

Коллеги, возможно, остались вопросы, поэтому, пожалуйста, задаём вопросы в чат. Пишите плюсиком и ставим минус, если вопросов нет. Отлично, я рад, коллеги! И мы сразу переходим к нашему новому интерактиву, который уже связан конкретно с 1С, с публикацией сообщений. Поработаем конкретно с RabbitMQ, и давайте посмотрим, с чего будет...

А, вижу вопрос. Прошу прощения. Как физически хранится очередь? Хороший вопрос, Кирилл. RabbitMQ своими алгоритмами хранит очередь. То есть, Rabbit может развернуться... Зайду издалека, если честно. Rabbit может развернуться на любой системе. Это может быть Unix, это может быть Windows, Linux. В общем, ему всё равно, он работает на любой системе. А я вам могу прямо внутренности не могу рассказать, как именно хранятся сообщения, но, скорее всего, там есть... ну, это это файлы, которые хранятся в рамках этой системы. Ну, то есть, всё у нас в любом случае хранится в файлах, и есть какая-то транзакционная, какая-то логика того, как эти сообщения хранятся, как они добавляются, как они удаляются из системы. Ну, в общем, в любом случае это будут какие-то файлы в системном каталоге RabbitMQ, который будет развёрнут там на Windows или на Linux. Надеюсь, ответил, Кирилл. Пишите, Кирилл, минус, если вопросов больше нет.

Угу, супер! Давайте тогда перейдём к нашей практике. Практическое задание у нас будет сегодня такое: мы откроем браузер и перейдём по ссылке, которую мы видим на экране, а именно `cloudamqp.com`, и зайдём в админку RMQ. Вы тоже потом можете зарегистрироваться на этом сайте. Этот сайт позволяет абсолютно бесплатно развернуть себе тестовый контур RabbitMQ, насоздавать там очередей, создать там Exchange, создать очереди, создать юзеров, подключиться и поработать с RabbitMQ. Мы сегодня этим займёмся.

Дальше мы настроим всё-таки этот Exchange, настроим очередь и используем ключ маршрутизации для маршрутизации сообщений. А именно, мы сериализуем сообщения, сериализуем их в формат JSON, опубликуем сообщения в Exchange и посмотрим, как маршрутизируются сообщения, как они отправляются в Exchange, в обменник, и принимаются в очередь. Мы прямо в реальном, в реальном времени всё это посмотрим из 1С.

Давайте начинать. Для начала я открою браузер и перейду... Я уже перешёл по ссылке, которую вы видели на презентации, это CloudAMQP. Я уже развернул себе тестовый кластер, там нет никаких сложностей в регистрации, в создании и так далее, и могу сразу перейти на закладку RabbitMQ Manager. Так и сделаем.

В момент нажатия на кнопку, зелёную кнопку RabbitMQ Manager, мне открывается как раз-таки мой RabbitMQ. И так выглядит веб-интерфейс RabbitMQ, с которым мы будем сегодня работать. Что мы видим на экране? Здесь мы видим на первой вкладке overview — это всего пакета, всего очередей. Мы можем видеть поминутно и посекундно, что происходит в очередях. Видим, сколько сообщений подтверждено. Здесь есть какие-то идентификаторы, сколько записывается на диск, сколько читается с диска, но нам сегодня особо это не нужно будет. Параметров довольно много.

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

Дальше перейдём к Exchange, куда отправляются наши сообщения. Здесь из коробки сразу созданы все Exchange, которые есть, а именно это Direct, Fanout. Здесь есть также Exchange Headers, мы сегодня на нём особо останавливаться не будем, и тот Exchange, с которым мы сегодня будем работать, а именно этот Topic. Эти Exchange создаются из коробки при создании RabbitMQ. Неважно, это было создано в Web, в где-то там в виртуализации, в вебе, вот как я это сделал на CloudAMQP, неважно, либо это развёрнуто там, вы пошли в свою локальную сеть, подняли себе RabbitMQ, там установили его и открыли в браузере — будет всё то же самое. То есть, будут заполнены вот эти Exchange.

И на закладке Queues как раз-таки будут наши очереди, в которых будут храниться сообщения, из которых потом мы будем забирать эти сообщения как получатели.

Давайте перейдём наконец-то в 1С и поработаем с обработкой, которая умеет работать с RabbitMQ. Как работает эта обработка? Сразу хотелось бы рассказать: я взял обработку от наших коллег, а именно это "Офис первого бита". У них есть своя компонента, которая называется "Pink RabbitMQ". С помощью этой компоненты, абсолютно бесплатной, и обработки, которые они также выкладывают (я продублирую ссылки наших коллег в презентации), можно подключиться как раз-таки к RabbitMQ, посмотреть методы.

Обработка компонента написана на C++ и завёрнута в COM. То есть, кто не знаком, как подключаются внешние компоненты: внешние компоненты, как правило, сохраняются в макете, подключаются в конфигурацию, или подключаются в конфигурацию, и инициализируются, подключаются извне, инициализируются, и дальше можно с помощью этой компоненты работать. У компоненты есть много различных методов, и есть уже написана обработка, которая позволяет работать с... не писать никакой код там по подключению, а сразу открыть её и поработать. Я немножко её подпилил прямо в рамках 1С для демонстрации.

Я буду использовать демонстрационное приложение от 1С, которое нам бесплатно даёт 1С, и пользуются корпоративной лицензией. Всем рекомендую, у кого ещё нет. Бесплатно даётся корпоративная... А, по-моему, не корпоративная, немножко ошибся, лицензия для разработчиков теперь есть, которая позволяет без всяких ключей, установок, без установщиков, там в два клика получить лицензию себе, установить её и работать с 1С там как в файловом варианте, так и в клиент-серверном. Нам всё что угодно разворачивать. Это очень удобно, поэтому всем рекомендую, пожалуйста, пользуйтесь.

А для начала я открою мою обработку. Вот она у меня лежит вот здесь. И изучим, как работает моя обработка. У обработки есть параметры, которые предзаполняются автоматически, потому что я их заполнил заранее. Это именно адрес, к которому будем подключаться, порт, логин, пароль и виртуальный хост.

Давайте посмотрим. Если я перейду обратно в браузер, то увижу то, что мой адрес как раз-таки и будет такой, как указано в обработке, а именно это `cloudamqp.com`. Если посмотреть сюда, да, действительно, тут такой же адрес. 5672 — стандартный, как правило, MQ идёт под портом 5672 либо 5671, если мы используем HTTPS. Мы не будем использовать HTTPS, поэтому используем 5672. А дальше нам нужно указать логин, под который мы подключаемся, пароль и виртуальный хост.

Что такое виртуальный хост? Виртуальный хост — это экземпляр, по сути, приложения, которое разворачивается на RabbitMQ. Ну, если очень утрированно говорить, это отдельная... это не поток, а отдельный, как бы, не сеанс, даже отдельный процесс, можно сказать так. Это отдельный процесс, в котором сообщения никак не могут пересечься никогда друг с другом. То есть, если мы отправляем в один виртуальный хост, то сообщения как-то хранят... могут попасть из одного Exchange там в какую-то очередь. Мы можем настроить как-то эту маршрутизацию, то, что если даже изначально там сообщения в очередь не попадают, потом они могут попасть. Если же мы создаём виртуальный хост и оперируем виртуальными хостами, то сообщения из одного виртуального хоста никак не могут попасть в сообщения в другого виртуального хоста. Это невозможно, потому что это, если очень утрированно говорить, разные экземпляры, ну, экземпляры приложений.

Соответственно, перейдём на закладку... Наш сервис CloudAMQP дал его. Вот он, я его прямо отсюда взял. И нажмём на кнопочку "Проверить подключение". Видим то, что выходит уведомление о том, что внешняя компонента успешно установлена. Внешние компоненты находятся в макете. Если мы посмотрим, вот она здесь находится, которая потом инициализируется. Нажимаем "ОК", разрешаем подключать бинарные файлы. Видим то, что подключение успешно выполнено. Давайте...

ещё раз нажмём, проверим. Отлично, подключение успешно выполнено. Мы можем работать с нашим экземпляром приложения. И если мы перейдём на закладку какого-то IP адреса, а именно это мой локальный видимый IP адрес в интернете. Вот мы можем подключиться. Так как я два раза кнопку нажал, как раз-таки вот и показывается два подключения.

Давайте теперь попробуем что-нибудь создать и что-то отправить в обработке. Мы можем, перейдя на закладку точки и очереди. Эта компонента тоже позволяет сразу создать точку обмена, имя очереди. Жмём. Точка обмена у меня будет Inc. Давайте симулируем, когда мы будем отправлять какие-либо товары из 1С, а другие потребители тут тоже пусть будут 1С либо приложения на питоне, будут их забирать из своих очередей, к которым они привязаны. То есть мы будем, мы отправляем товар из системы 1С в ряд других систем, и нам абсолютно неважно, какие-то системы, так как мы используем RabbitMQ для. И тут есть гибкая маршрутизация отправки процессов и сообщений. Мы отправляем только в один Exchange, отправили и забыли. Дальше всю маршрутизацию берёт на себя MQ, который, который я вам сейчас продемонстрирую.

Давайте нажмём на кнопочку создания точки очереди. Соответственно, у нас выйдет новая точка обмена, которая называется в по-английски. Имя очереди. Точка обмена у меня будет. Имя очереди, с которой я буду читать, это пусть будет Demo 1S, назову его так. Жму на кнопку создание точки очереди. Видим сообщение о том, что точки и очереди успешно созданы.

Давайте перейдём в веб-интерфейс, посмотрим, что-то появилось ли там что-то. Видим то, что у меня появилось новый Exchange, а именно это Inc. Ура. А Type у эксченджа, напомню, топик, мы его и создавали, это прописано в настройках обработки. А также перейдём на закладку Queue Streams и увидим то, что да, действительно, у меня создалась новая очередь под названием Demo 1S, с которой мы будем вычитывать наши сообщения.

Отлично. Теперь же, если мы будем отправлять наши сообщение, то сообщение не дойдёт. Почему? Потому что у нас есть наш кролик с палкой, который регулирует сообщение, но мы не, но наша очередь ничего не знает про Exchange, нет вот этой вот палки, по сути, которая сможет отмаршрутизировать по нашему ключу определённый тип сообщения. Именно поэтому нам нужно этот эту привязку, этот ключ добавить. Поэтому мы переходим на закладку. Наш Exchange по ключу маршрутизации, а именно я пишу здесь то, что я создаю, беру сообщение из From Exchange Inc, а ключ маршрутизации у меня будет product решётка. Напоминаю, если что такое product решётка, это значит то, что после, если я что-то напишу после, абсолютно любые символы, например, такие, например, вот такие, то у меня будет маршрутизироваться абсолютно любое сообщение. То есть какой бы ключ я не написал, такие сообщения будут маршрутизироваться.

Давайте я вам сейчас сейчас это продемонстрирую. Напишем routing product решётка. Жмём на кнопочку Bind. Ура, мы привязали нашу на наш эксчендж, наш обменник нашей очереди. Теперь мы можем отправить наше сообщение из 1С и посмотреть, дойдёт ли оно до нашей очереди. Поэтому я перехожу в наш 1С, перехожу и захожу на, а, закладку Отправить сообщение и выбираю ссылку на товар. Мы будем отправлять личные товары, как я уже сказал, в нашем тестовом примере. Поэтому выбираю колбасу, которая на лету у нас с помощью простого кода, который написан вне 1С, у меня сериализуется и в JSON это сообщение. Мы будем отправлять. Как сериализуется? Давайте приведу пример, как сериализуется JSON. Мы при изменении нашего, при выборе ссылки на ссылки, при выборе ссылки создаём структуру, выбираем её и записываем эту структуру в JSON и возвращаем на форму простой код. Соответственно, вот если выберу там теперь не колбасу, а например, какой-то торт, то вот торт у меня будет вот таким.

Давайте попробуем отправить колбасу. Выбрал колбасу, на лету сериализовал сообщение. Отлично, сообщение успешно отправлено. Давайте пойдём в наш веб-интерфейс RabbitMQ и посмотрим, пришло ли наше сообщение в нашу очередь. Отлично, мы видим то, что наше сообщение находится в очереди и будет находиться в нашей очереди до того момента, пока получатель не вычитает сообщение из очереди. Регламент получения этого сообщения может быть любой. Какой-то получатель должен получать его в реальном времени, например, то есть постоянно подключён и забирает абсолютно сразу, как только получается. Кто-то, например, какая-то 1С может получать, например, раз в сутки или раз в час или раз в 30 секунд. Это всё зависит от того, как вы настроите регламент получения данного сообщения.

Отлично, сообщение наше смаршрутизировалось, а теперь потребитель в виде 1С может пойти, какая-то система 1С может пойти и получить наше сообщение. Давайте теперь я покажу о том, что если я создам какой-то ключ, ну, то есть после в нашем ключе сейчас у меня ключ был product. Если вы видите, и по ключу маршрутизации была отправка, соответственно, если сейчас у меня ключ будет product_add, как будто бы я создал нашу колбасу, то есть мой ключ, то есть момент, например, у меня сейчас понятно, что это тестовый пример, но например, при записи ссылки на товары у меня будет происходить отправка сообщений в RabbitMQ, соответственно, будет подставляться ключ add либо update в зависимости от того, это событие создания элемента или событие перезаписи уже созданного элемента. Давайте опубликуем вот такое сообщение с ключом update и посмотрим, отрут. Жму на кнопку Отправить сообщение. Перехожу в веб-интерфейс и вижу то, что ура, у меня появляется ещё одно сообщение. То есть если, то есть от того, что я сделал привязку вот конкретно вот по этому ключу через точку решётка, у меня отправляются абсолютно любые сообщения в эту очередь.

Давайте теперь изменим пример, а именно изменим ключ маршрутизации и напишем, например, просто prod. Что будет с данным сообщением? Выбираю торт, ключ маршрутизации у меня будет prod. Жму на кнопку сообщения, смотрю и можем здесь ничего не появиться. Почему? Потому что ключ маршрутизации не соответствует тому, что мы здесь написали. Если же бы мы сейчас добавили новые бинды, написали здесь prod, сделали привязку и снова отправили наше сообщение, то увидели бы то, что сообщение маршрутизируется в эту очередь. Как мы видим, видите, сообщение отмаршрутизировалось, потому что я сделал новую привязку в виде ключа маршрутизации, а именно вот так через prod.

Давайте теперь создадим ещё одну очередь, например, это будет приложение на питоне, который тоже будет получать из этой очереди наше сообщения. Давайте так, я могу прямо в веб-интерфейсе это сделать. Я перехожу, перехожу, жму на кнопку и могу здесь прямо написать о том, что моя очередь будет, пусть будет так и называться Python, моя очередь Python. Здесь какие-то настройки, мы сегодня не будем на них останавливаться, по ним больше можно прочитать в интернете, особенно или в документации к самому RabbitMQ, там всё довольно развёрнуто написано. Создаю новую очередь, которую называю Python, она у меня создалась. И теперь я из эксченджа Inc также должен отправлять, а моё сообщение по ключу product, product, пишу, точка решётка. Ой, не туда написал. Изд. Отправляю по ключу prod, точка, привязываю. И теперь давайте снова попробую отправить сообщение. Пишу тут prod.точка add, например. Жму на кнопку Отправить. Посмотрим, что же теперь у меня произойдёт. В моём я вижу то, что в очередь отмаршрутизировалось сообщение, и оно здесь одно появилось. И в очередь Demo 1S также отмаршрутизировалось сообщение. Вот он скачок, и появилось ещё одно сообщение, четвёртое. То есть, когда сообщение прилетает в Exchange, оно понимает, с каким потребителем это сообщение нужно отправить. Оно как бы клонирует на два, вот в данном случае, и отправляется в очереди. То есть прилетело одно сообщение в Exchange, в зависимости от ключа маршрутизировалось, распространилось на различные очереди, и дальше каждый из систем, который подключает, система подключается к своей очереди, может забрать эти сообщения, прочитать их, и на этом всё.

Также мы можем из, из прямо из веб-интерфейса можем посмотреть сообщения, которые у меня хранятся в данной очереди. Для этого я могу перейти на закладку. Или два последних сообщения укажу четыре, получу все четыре сообщения, которые хранятся у меня сейчас в очереди. Вот они. Вот мы колбасу отправляли, что-то ещё отправляли и так далее.

Давайте теперь попробуем прочитать наше сообщение. Я снова перейду в 1С на закладку получить сообщение и из моей очереди, которой здесь написано Demo 1S, я получу сообщение. Для этого мне нужно просто нажать на кнопку прочитать сообщение. Мы вызовем определённый метод компоненты, которые подключатся к очереди и получат мои сообщения из очереди. Давайте это как раз-таки смоделируем. Жму на кнопку Прочитать сообщение, и мы получаем одно из сообщений, которое хранилось в очереди. Последнее. Если я перейду на закладку Demo 1S, то увижу то, что одно сообщение из очереди прочитано, оно удалено из RabbitMQ, и теперь оно получено системой. Дальше я всё, конечно же, на реальных процессах и в реальных в промышленных системах происходит автоматически. Прошу прощения, происходит автоматически, и, например, это сообщение вычитывает на лету, обрабатывается и превращается, например, в какой-то элемент справочника. То есть мы читаем это сообщение из JSON, обрабатываем его, и на этом строится вся наша маршрутизация.

А коллеги, из того, что мне бы хотелось показать, я всё вроде бы показал, мы всё посмотрели, поэтому, пожалуйста, задавайте вопросы в чат. Если что-то было непонятно. Можем ли мы читать сообщения или просматривать их прямо в веб-морде? О, я уже ответил на этот вопрос. Да, Валерий, если вопросов нет, пишите, пожалуйста, минус. Если вопрос есть, пишите их в чат. Я на всё отвечу. В чём отличие решётки от звёздочки? Решётка - это абсолютно любое количество символов, а звёздочка - это единичный символ, одинарный, если мне память не изменяет, по-моему, это так.

Отлично, коллеги. Теперь мне хотелось рассказать про ключевые теги. То есть RabbitMQ - это брокер обмена данными, позволяющий обмениваться сообщениями в реальном времени. Это мы увидели с вами сегодня на вебинаре. Используется, позволяет горизонтально масштабировать систему, сделать процесс прозрачным. Вроде как я постарался показать, на это действительно прозрачный процесс. Не, ну нет таких особых сложностей, если вы знаете основные понятия того, что такое RabbitMQ, и для работы с есть огромное количество библиотек, написанных для разных систем, что позволяет обмениваться любыми корпоративными приложениями, только 1С из вашего контура.

Также мне хотелось бы, коллеги, сразу скинуть ссылку на опрос. Сейчас я его скину в чатик, о том, чтобы вы ответили, всё ли вам было понятно, всё ли было просто. Пока продолжим вебинар. Мне бы хотелось вас познакомить с командой и программой курса, которые у нас есть, и поговорить о том, как происходит процесс обучения на нашем курсе "Архитектор 1С". А именно, обучение выстроено в формате вебинаров. Онлайн-вебинары проводят по вечерам или выходные дни. Все записи занятий предоставляются. Преподавателями они сохраняются в личном кабинете и остаются доступны даже после окончания обучения. Мы задаём с моими коллегами домашние задания, которые всё то, что мы проходим на вебинарах, на всё есть домашка, э, которой вы сможете, с помощью которой вы сможете потом, пересмотрев вебинар ещё раз, а, закрепить материалы, и вам дадут развёрнутый фидбек по поводу, а-а, домашнего задания и того, как вы его выполнили. В процессе обучения вы можете задавать преподавателю вопросы по материалам лекций, домашних заданий, уточнять моменты, которые были непонятны на уроках. Это в любой момент. Также мы остаёмся после, а, вебинаров, и, э, я отвечаю на вопросы. И в чатике тоже очень часто отвечаю на вопросы житейские, так сказать, на конкретные кейсы, которые бы вы бы хотели разобрать, но не знаете, с чего начать. То есть мы всё это проходим, я даю какие-то, как мне кажется, полезные советы. Время на обучение от четырёх академических часов нужно на занятия и 4-8 часов на домашнюю работу в неделю. То есть примерно два занятия в неделю у нас происходит. А программа обучения на курсах обновляется каждый запуск в зависимости от актуальных запросов среды технологий. То есть мы редактируем программу каждый курс. А мы слушаем фидбек от наших учеников, и каждый практически не практически, а каждую программу я лично, как руководитель, редактирую, меняю. Э, там где-то мы на одном делаем упор, где-то на другом. Где-то, когда нам пишут студенты о том, что там какая-то тема не полностью раскрыта, мы раскрываем её в дальнейшем.

Давайте поэтому познакомимся с командой курса, который преподаёт. Перейдём на лендинг, на наш. Вот наш лендинг "Архитектор 1С". Занятия у нас, наши стартуют по новому потоку 30 ноября. Также здесь написано, вы можете всё с информацией ознакомиться на лендинге. Для кого этот курс, какие необходимые знания вам, у вас должны быть, что вам даст этот курс. Также вы можете ознакомиться с нашего курса. Это проектирование структуры программных продуктов, работа с PPM, мы моделируем бизнес-процессы, работаем с Git, запускаем CI/CD, проводим, объясняем, как проводить код-ревью, работаем с брокерами сообщений для обмена данными. Вот сегодня мы на нашем курсе уже поработали, работаем с ETL, настраиваем, дорабатываем ERP, создаём мобильные приложения и объясняем про то, как вообще организовывать процесс разработки, с помощью каких средств технологических можно организовать процесс разработки. А также отвечаем на все вопросы про процесс обучения. Я рассказал о том, что это около от 4 часов академических в неделю. Мы посмотрим актуальные вилки вакансий по архитектуре 1С, которые у нас есть на Hunter, и с основной программой. Мы, основную программу прошли. Здесь вы можете прямо с детальной программой ознакомиться, какие у нас есть уроки и темы занятий. Сейчас подробно не будем останавливаться на каждом из них. У нас есть выпускная работа, в которой вы используете все наши навыки, все навыки, которые вы получили на курсе. Если вы успешно выполняли домашки, нет никаких проблем, выпустить, сделать выпускную работу, и в котором мы разбираем практически каждое занятие, которое мы прошли, и вам будет выдан сертификат о получении, о повышении квалификации.

Преподаватели на курсе у нас: ваш покорный слуга, я Роман Кузин, я являюсь руководителем курса по "Архитектор 1С". Это Сергей Бывальцев, у него опыт в Тусе больше 3 лет в сфере разработки 1С. Он более 15 лет работал разработчиком, архитектором, руководителем, много чем занимался и преподаёт. Это курс по DevOps и по "Архитектор 1С". Александр Свойкин, один год в Тусе. В данный момент он руководит командой программистов компании DNS. Дальше, э, у нас на курсе также есть Олег Каратаев, он является руководителем в Газпромнефти, он руководитель практики, руководитель программы проектов, автор нескольких тиражных продуктов и ведёт преподаёт на курсах не только "Архитектор 1С", но и "Бизнес-аналитик 1С". И Олег Авилов, он в профессии огромное количество лет, более 25. Сейчас работает заместителем IT-директора и руководил делами от двух до 26 сотрудников. Также преподаёт у нас на курсе "Архитектора".

Давайте вернёмся к презентации к нашей. Хотелось бы рассказать про карьерную информацию по поводу архитектора. Сейчас актуальных позиций на рынке около 481. Медианная зарплата от Junior до Senior около 180.000. И все требования, которые вы видите на экранах по вакансиям работодателей, это там бизнес-архитектор, архитектор, бизнес-архитектор. Все требования, которые закрывают, ну, которые требуются вакансии, закрываются у нас на курсе. То есть мы всё это проходим. Там глубокое знание платформы, мы это всё разбираем. Структурированный код, код-ревью, то есть всё из этого вытекает, всё это у нас на курсе. Мы проходим. Вот, например, вот в данные вакансии: роль архитектора, зуб УПП, завершённые проекты, знания архитектуры, все нотации, всё, знания архитектуры, методологии проектирования, разработки ПО, всё. Ещё раз повторюсь, знания основ работы с СУБД, с SQL. Всё мы это. А, э, например, вот опыт участия в крупных масштабных проектах по высоконагруженным комплексным системам. У нас есть занятия по высокой нагрузке, по логированию, э, по оптимизации систем. Соответственно, в, ну, также можете сами ознакомиться на Hunter.

Давайте теперь, коллеги, рефлексируем. У нас были цели вебинара такие: это разобраться в архитектуре брокера сообщения RabbitMQ, изучить основные сущности, познакомиться с основными настройками и поработать в веб-интерфейсе, а также поработать с кроликом в контексте 1С и отправить и прочитать сообщение. Поэтому, коллеги, пишите, пожалуйста, плюс в чат, если все цели были достигнуты, и минус в чат, а, если цели достигнуты не были. Плюс, если достигнуты, минус, если не достигнуты. А, и напоминаю, я в чатик скинул опрос, пожалуйста, пройдите его, дайте мне фидбек о моей работе. Плюс, плюс, коллеги, не стесняйтесь, и если не были цели достигнуты, пишите минус, пишите, почему, что было непонятно, что я не успел рассмотреть. Не будем тогда останавливаться. Ладно, надеюсь, всё было понятно. Тот, кто молчит. Список материалов для изучения. Прошу прощения, именно это ссылка на GitHub, который я показывал, и статья на Хабре, которая также показывает и рассказывает о том, что такое компонента P RabbitMQ, какая у неё скорость, как она, как с ней взаимодействовать и так далее. Можете, если интересно, почитать про это.

Возможно, получение примера приёма отправки в виде CFG. В виде, то есть вы отправляете какой-то, и другая система должна получить этот CFG. Конечно, можно. Вы что делаете? Вы берёте двоичные данные, дальше конвертируете их в Base64, а, и отправляете их в кролик. Дальше, а, после того, как, а, получатель получает это сообщение, он Base64 расшифровывает, обращает, превращает их обратно в двоичные данные, которые были зашифрованы, и превращает его в в файл с расширением CFG. Соответственно, можно отправить всё, что угодно, абсолютно, то есть любые файлы, любые сообщения, любой текст. Главное, если вы вы отправляете какой-то экзешник или что-то ещё, вам нужно его отправить. Главное, вам этот файл, если вы отправите его из 1С, конвертнуть в двоичные данные, а двоичные данные конвертнуть в Base64, а дальше на основании Base64 просто отправить и получить. Ну, то есть Base64 отправить, а со стороны приёмника или приёмников получить это сообщение. Нет таких проблем.

Курс "Архитектора 1С" у нас стартует у нас 30 ноября. 1 декабря по QR-коду вы можете ознакомиться поподробнее. Поэтому, пожалуйста, приходите на курс, буду всем рад. Спасибо, что пришли на наш открытый урок. Есть ли ограничение на размер отсылаемых? Хороший вопрос. Игоря. Да, он есть из коробки. Давайте я даже покажу, наверное, он есть из коробки. [музыка] Max Length. Вот он, 10.000, иногда 100.000. Этот, это регулируемый параметр, с помощью который можно отрегулировать. То есть, например, если у вас сообщение больше 100 МБ, были такие у нас бизнес-кейсы, когда сообщение не пролазит просто в Rabbit, то можно сделать настройку, которая позволяет увеличить размер вот этого сообщения, там поставить не 100, а 200, например. Ответил, надеюсь, на вопрос. Есть ли тут, есть какие ограничения? Да, всё. Игорь, Кирилл, одинаковые вопросы. Надеюсь, ответил на оба сразу. Ограничение есть, но оно есть в Rate, которое можно легко расширить, нет никаких проблем. Ещё раз повторюсь, старт у нас тридцатого. Приходите, если было интересно, буду всем рад. Спасибо, что пришли на наш вебинар. Ещё раз повторюсь, заполните, пожалуйста, опрос. Ссылку я прикрепил. Спасибо за внимание. Надеюсь, увидимся на занятиях. Пожалуйста, если есть ещё какие-то вопросы, задавайте. Минутку ещё две посижу и всё, будем завершаться. Пожалуйста, всё, коллеги, всего доброго. Спасибо. Надеюсь, до новых встреч.