Оглавление
1.1 Просмотр и настройка информационной панели
1.2 Интерфейс панели управления
2.1.2 Процесс аутентификации личности EMQX
2.2 Аутентификация имени пользователя
2.2.1 Данные аутентификации по умолчанию
2.2.2 Данные аутентификации управления HTTP API
2.3 Аутентификация идентификатора клиента
2.3.1 Данные аутентификации по умолчанию
2.3.2 Данные аутентификации управления HTTP API
2.4.4 Разработка службы аутентификации
3.1.2 Пахо осуществляет отправку и получение сообщений
3.2.2 MQTT.js реализует отправку и получение сообщений
4.3 Файлы журналов и смена журналов
4.4 Выходные файлы журнала для уровней журнала
4.6 Уровни журналирования и обработчики журналов
4.7 Изменение уровня журнала во время выполнения
EMQX предоставил Dashboard Облегчить пользователям управление оборудованием и мониторинг соответствующих показателей. проходить Панель мониторинга позволяет просматривать основную информацию о сервере, условия загрузки и статистические данные. Вы можете просматривать такую информацию, как состояние подключения клиента или даже отключать его. Также можно динамически загружать и выгружать определенные плагины. Кроме того, EMQ X Dashboard Он также имеет механизм правил детей и визуальный интерфейс управления, а также интегрирует простой MQTT Клиентские инструменты предоставляются для пользовательского тестирования. EMQX Dashboard Функция обеспечивается emqx-dashboard Реализация плагина, плагин включен по умолчанию, он будет EMQX Начать с динамическая нагрузка. Если вы хотите отключить Dashboard функция, вы можете data/loaded_plugins в {emqx_dashboard, true} Изменить на {emqx_dashboard, false} 。
EMQ X Dashboard это Web приложения, вы можете получить к нему доступ непосредственно через браузер без установки какого-либо дополнительного программного обеспечения. когда EMQX успешно запускается на вашем локальном компьютере и EMQX Dashboard включен по умолчанию, путем доступа http://localhost:18083 Для просмотра информационной панели имя пользователя по умолчанию: admin , пароль public 。
Если EMQX развернут на основе докер-контейнера, его можно установить в контейнер. etc/plugins/emqx_dashboard.conf Посмотреть или изменить в EMQ X Dashboard конфигурация. EMQ X Dashboard Конфигурация项МожеткточкадляПользователь по умолчаниюислушатель两индивидуальный部точка:
Пользователь по умолчанию EMQ X Dashboard Вы можете настроить несколько пользователей, но при настройке файлетолькоподдерживать Конфигурация Пользователь по умолчанию。 Важно отметить, что как только вы пройдете Dashboard Измененный пользователь по по умолчанию, пароль, но Пользователь по По умолчаниюиз сопутствующей информации Воляк Вы здесь Dashboard Последние изменения на из точны, файл конфигурации в Пользователь. по умолчанию Конфигурация Воляигнорируется。
слушатель EMQ X Dashboard поддерживать HTTP и HTTPS Два вида Прослушиватель, но по умолчанию включен только порт прослушивания 18083 из HTTP Listener。
для позволяет пользователям быстро находить и переключать текущую позицию во время работы и просмотра, EMQ X Dashboard Принята боковая навигация из режима и по умолчанию установлена на В обычных обстоятельствах Dashboard Содержит следующие элементы навигации первого уровня:
Последняя версия EMQ X Brokerиз Интерфейс панели Расположение органов управления немного другое, добавлена некоторая навигация, но по сути они одинаковы.
Users
Ты можешь Users Просмотр страниц и управление ими могут получить доступ и работать Dashboard изиспользовать Домашнее хозяйство:
Settings
в настоящий момент EMQ X Dashboard Только поддержка меняет тему и язык Два настройки вида:
EMQ X Dashboard Данные очень богаты из проекта мониторинга данных, полностью охватывающего сервер иклиент, вся эта информация находится в разделе МОНИТОРИНГ Следующие страницы разумно отображаются для использования пользователями.
Overview
Overview как Dashboard страница отображения по умолчанию, результаты EMQ X Когда передний узел содержит подробную информацию, а другой узел кластера — ключевую информацию, это помогает пользователям быстро понять состояние каждого узла.
Clients
Clients Страница отображаетсясоединять с обозначением узлов списка клиентов, поддерживаемых Client ID Непосредственный поиск клиента. Помимо просмотра основной информации о клиентизах, вы также можете просмотреть правую часть каждой записи. Kick Out Кнопка, чтобы выгнать клиента. Обратите внимание, что эта операция отключит клиент и завершит его сеанс. Clients На странице используется снимок экрана для отображения списка клиентов. Поэтому при изменении статуса клиента страница не будет обновляться автоматически, чтобы получить последние данные о клиенте.
Если вы не можете получить нужную вам информацию в списке, вы можете нажать кнопку Client ID Приходите и просмотрите детали клиента.
Наши данные о Воляклиентах разделены на различные области. соединять,сессия и индекс Третья категория, поясните каждое поле ниже:
соединять
Беседа
индекс
На странице сведений о клиенте на вкладке «Подписки» вы можете просмотреть информацию о подписке клиента, создать новую или отменить подписку:
Topics
Показать статус всех тем системы
Subscriptions
Subscriptions Страница содержит обозначение узла со всей информацией о подписке и утверждениеиспользовать пароль пользователя. Client ID Проверяйте все подписки в обозначениеклиентиз.
использовать EMQ X Механизм правил может гибко обрабатывать сообщения и события. Например, сообщение можно преобразовать в формат и сохранить в этом формате. таблицы данных или повторно отправляется в очередь сообщений и так далее. для облегчает пользователям использование механизма правил использования, EMQ X Dashboard соответствующие страницы визуальных операций, вы можете Нажмите RULE ENGINE Перемещайтесь по проекту, чтобы получить доступ к этим страницам. Ввиду сложности концепций, связанных с механизмом правил, Соответствующие операции могут занять много места, и я напишу отдельный блог, чтобы представить их позже.
в настоящий момент EMQ X Dashboard из MANAGEMENT Проект навигации в основном включает в себя плагины расширения. из Страница управления мониторингом ииспользовать на HTTP API Сертификацияиз AppID и AppSerect из Менеджмент страницы.
Plugins
Plugins Список страниц EMQ X Возможность обнаружить все плагины, в том числе EMQ X Официальный плагин и вы подписаны EMQ X Официальный стандартный плагин собственной разработки, Ты можно Эта страница позволяет вам просмотреть статус работы плагина, а также запустить или остановить плагин в любое время.
Видно, что помимо emqx-dashboard, EMQ X также по умолчанию запустит четыре плагина, включая emqx-rule-engine.
Applications
Applications Список страницкогда Создано ранееизотвечатьиспользовать,Ты можно На этой странице выполняются такие операции, как создание приложения, временный запрет прав доступа на запуск приложения и т.д. ЭМК X создаст AppID для admin ,AppSecret для publish из Значение по умолчанию должно быть удобным для пользователей, посещающих его впервые:
Вы можете нажать Нажмите Application Правый верхний угол страницы из New App кнопка для создания нового файла, где AppID и AppSecret Это обязательно параметры. После завершения создания Вы можете нажать Нажмите View кнопка для просмотра сведений о приложении, AppSecret Также показано в деталях. Ниже приводится описание соответствующих полей:
в настоящий момент EMQ X Dashboard из TOOLS Элементы навигации в основном включают в себя WebSocket страница клиентских инструментов и HTTP API Быстрая страница.
Websocket
Websocket Страница для ваших детей: простая, но эффективная WebSocket клиентинструмент,Он содержит функции подключения, подписки и публикации.,В то же время вы также можете просмотреть данные отправленных и полученных вами сообщений.,Мы надеемся, что это поможет вам быстро завершить тестовую проверку определенных сценариев:
HTTP API
HTTP API Список страниц EMQ X в настоящий моментподдерживатьизвсе HTTP API и его описание:
Сертификация личности является важной частью большинства приложений MQTT. Протокол подтвержденияиспользовать имя пользователя и пароль Сертификация, сертификация startuseidentity может эффективно предотвратить незаконное клиентское объединение. EMQ X в Сертификацияобратитесь киздакогдаодинклиентсоединятьприезжать EMQ X из-за конфигурации на стороне сервера для управления клиентсоединением разрешений сервера.
EMQ X из Сертификацияподдержки включает два уровня:
EMQ X поддерживатьделатьиспользоватьвстроенныйисточник данных(документ、Встроенная база данных)、JWT、Внешняя основная база данныхиПользовательский HTTP API какличность Сертификацияисточник данных。 соединятьисточник данных, логика сертификации реализуется через плагины, и каждый плагин соответствует своего рода методу. аутентификации,делатьиспользовать Необходимо включить передиспользовать相отвечатьизплагин。 Когда клиент подключается, плагин проверяет его username/clientid и password Является ли иобозначение источником Данные данных соответствуют требованиям для установления личности клиента. Сертификация.
EMQ X поддерживатьиз Метод аутентификации:
Встроенный источник данных
Username Сертификация Cliend ID Сертификация
Создать профили использования EMQ X Встроенная база данныхпоставлять Сертификацияисточник данных,проходить HTTP API Управление простое и легкое.
внешняя база данных
LDAP Сертификация MySQL Сертификация PostgreSQL Сертификация Redis Сертификация MongoDB Сертификация
Внешняя база данных может хранить большие объемы данных и облегчать интеграцию с внешними системами управления устройствами.
другой
HTTP Сертификация JWT Сертификация
JWT Сертификация может быть выдана массово. Информация о сертификации, HTTP. Сертификация может реализовывать сложную логику аутентификации из Сертификация.
После изменения конфигурации подключаемого модуля необходимо перезапустить его, чтобы изменения вступили в силу. Некоторые подключаемые модули аутентификации Сертификация включают функцию ACL.
Сертификациярезультат
любой вид Метод аутентификации В конце концов это будетвозвращатьсяодинрезультат:
Сертификация успешна: после сравнения Сертификация клиента успешна Сертификация не удалась: после передачи клиенту сертификация не удалась, источник Пароль не соответствует данным и когда прежний пароль игнорировать Сертификация (игнорировать): когда прежний метод В аутентификации не обнаружено данных о сертификации, и невозможно однозначно определить, является ли результат успешным или нет. Это остается на усмотрение следующего метода в цепочке сертификации. аутентификацииилианонимный Сертификация来判断
анонимный Сертификация
EMQ X Анонимная сертификация включена в конфигурации по умолчанию, и любой клиент может получить к ней доступ. EMQ Х. Нет явного разрешения/запрета (игнорирования) при запросе подключения, EMQ X Воля решает, разрешить ли клиентсоединять на основе анонимной ситуации Сертификацияоткрытьиспользовать.
Настройте переключатель анонимной сертификации:
# Входить etc/emqx.conf
## Value: true | false
allow_anonymous = true
Пожалуйста, запретите использование анонимной сертификации в производственной среде.
Примечание. Нам нужно войти в контейнер, чтобы изменить конфигурацию, а затем перезапустить службу EMQ X.
пароль Правила добавления соли и Хэш-метод
EMQ X большинство Сертификацияплагинсередина Можеткначинатьиспользовать Хэш-метод,источник данныхсерединатолько保存парользашифрованный текст,Храните данные в безопасности.
При открытии использовать Хэш-метод, каждый клиент обозначается одним соль и настройка правил соли, база данных Среднее хранилищеизпарольда按照。Правила добавления соли и Хэш-метод После обработкииззашифрованный текст。
к MySQL Сертификациядляпример:
Правила засолки и конфигурация Хэш-метода:
# Входитьetc/plugins/emqx_auth_mysql.conf
## Никакой соли, просто перемешивание
auth.mysql.password_hash = sha256
## salt префикс:делатьиспользовать sha256 шифрование salt + пароль Сращивание струн auth.mysql.password_hash = salt,sha256
## salt суффикс:делатьиспользовать sha256 шифрование пароль + salt Сращивание струн auth.mysql.password_hash = sha256,salt
## pbkdf2 with macfun iterations dklen
## macfun: md4, md5, ripemd160, sha, sha224, sha256, sha384, sha512
## auth.mysql.password_hash = pbkdf2,sha256,1000,20
Как создать информацию о сертификации
Запись данных из правил засолки и соответствующий Хэш-метод из конфигураций могут работать только нормально. Изменение Хэш-метода приведет к аннулированию существующих данных Сертификации.
Сертификацияцепь
когда同часначинатьиспользовать Несколько Метод аутентификациичас,EMQ X Сертификация цепочки воли в порядке плагинов включает:
В то же время включение только одного плагина сертификации может повысить эффективность сертификации идентификации клиента.
Username Сертификацияделатьиспользовать Конфигурациядокумент预设клиентиспользовать Имя учетной записиипароль,поддерживатьпроходить HTTP API Управление данными сертификации.
Username Сертификация не зависит от внешнего источника данных, что делает использование простым и достаточно легким. Используйте этот метод аутентификациитребуется довключатьплагин,мы можемксуществоватьDashboard里找приезжать这индивидуальныйплагин并включать。
Плагин:
emqx_auth_username
Хэш-метод
Username Сертификацияпо умолчаниюделатьиспользовать sha256 Шифрование хэша пароля можно выполнить по адресу etc/plugins/emqx_auth_username.conf Средние изменения:
После настройки Хэш-метода,Новыйиз Предустановленные данные сертификацииипроходить HTTP API Добавить данные из Сертификации. Зашифрованный хеш-текст Воляка, хранящийся в EMQ X Встроенная база данных.
Можеткпроходить Конфигурациядокумент Предустановленные данные сертификации,Отредактируйте файл конфигурации: etc/plugins/emqx_auth_username.conf.
плагинначинать动час Волячитать Предустановленные данные сертификации并加载приезжать EMQ X Встроенная база данныхсередина, на этом этапе данные на узле будут синхронизированы с кластером.
Предустановленные данные сертификациисуществовать Конфигурацияв файледелатьиспользоватьчистый текстпароль,для безопасностии Можетподдерживать性考虑отвечатькогда避免делатьиспользовать Должен Функция。
EMQ X предоставил соответствует изHTTP APIиспользоватькподдерживать Встроенный источник Данные о сертификации, мы можем добавить/просмотреть/отменить/изменить данные сертификации. 。
我们проходитьVSCodeприйти в гостиEMQ XизAPI /auth_username Полные данные сертификации связанных операций
Открыть плагин загрузки VSCode
Далее мы можем сохранить VSCode для написания кода.
Создать HTML-файл
1. Проверьте существующую Сертификацию. Используйте данные пользователя: GET api/v4/auth_username
@hostname = 192.168.200.129
@port=18083
@contentType=application/json
@userName=admin
@password=public
############Просмотр существующих данных сертификации использования домохозяйства##############
GET http://{{hostname}}:{{port}}/api/v4/auth_username HTTP/1.1 Content-Type: {{contentType}}
Authorization: Basic {{userName}}:{{password}}
возвращаться
2. Добавьте API данных сертификации. определение: POST api/v4/auth_username{ "username": "emqx_u", "password": "emqx_p"}
########добавить виспользоватьсемья Сертификацияданные##############
POST http://{{hostname}}:{{port}}/api/v4/auth_username HTTP/1.1
Content-Type: {{contentType}}
Authorization: Basic {{userName}}:{{password}}
{ "username": "user", "password": "123456" }
возвращаться
3、Изменятьобозначениеиспользовать Имя учетной записиизпарольAPI определение: PUT api/v4/auth_username/${username}{ "password": "emqx_new_p"}
обозначениеиспользовать Имя учетной записи,传递новыйпарольруководить Изменять,сновасоединятьчас需要делатьиспользоватьновыйпарольруководитьсоединять:
###########Изменятьобозначениеиспользовать Имя учетной записиизпароль#############
PUT http://{{hostname}}:{{port}}/api/v4/auth_username/user HTTP/1.1
Content-Type: {{contentType}}
Authorization: Basic {{userName}}:{{password}}
{ "password": "user" }
возвращаться
4、Проверятьобозначениеиспользовать Имя учетной записиинформацияAPI определение: GET api/v4/auth_username/${username}
обозначениеиспользовать Имя учетной записи,Проверять相关использовать Имя учетной записи、парольинформация,Обратите внимание здесьвозвращатьсяизпарольдаделатьиспользовать Конфигурациядокументобозначение Хэш-методшифрованиеназадизпароль:
###########Проверятьобозначениеиспользовать Имя учетной записиинформация#############
GET http://{{hostname}}:{{port}}/api/v4/auth_username/user HTTP/1.1
Content-Type: {{contentType}}
Authorization: Basic {{userName}}:{{password}}
возвращаться
5:удалить СертификацияданныеAPI определение: DELETE api/v4/auth_username/${username}
использоватькудалитьобозначение Сертификацияданные
###########удалитьобозначениеизиспользоватьсемьяинформация#############
DELETE http://{{hostname}}:{{port}}/api/v4/auth_username/user HTTP/1.1
Content-Type: {{contentType}}
Authorization: Basic {{userName}}:{{password}}
возвращаться
Инструмент Makeusemqttклиент проверяет имя пользователя makeuse и единый вход в систему из функции. от MQTT X: Cross-platform MQTT 5.0 Desktop Client Этот инструмент загрузки адресов соответствует операционной системе изmqttклиент.
1. Создайте новое соединение и настройте параметры следующим образом:
Введите имя пользователя и пароль в соответствующее поле ввода.,clientId здесь в настоящий момент можно ввести случайно (поскольку для основано на функции clientIdizСертификация и еще не запущено),之назад点соединять,соединятьуспех。использовать Имя учетной записиипароль Если вы допустили ошибкуиз话дасоединять不успехиз。
2. Снова создайте клиентсоединять,Можно как сообщение от подписчика,Предыдущий Сообщение от соединятькак,следующее
3. Подписчики добавляют подписки
После завершения подписки
4. Для публикации сообщения используйте издателя предыдущего клиентсоединятькак.
5. Проверьте, получил ли абонент сообщение
Client ID Сертификация предустановок профиля makeuse клиент Клиент ID ипароль,поддерживатьпроходить HTTP API Управление данными сертификации.
Client ID Сертификация не зависит от внешнего источника данных, makeuse достаточно простой и легкий, makeuse такого рода метод аутентификациичас需要включать emqx_auth_clientid Плагин можно открыть прямо в DashBoard.
Хэш-метод
Client ID Сертификацияпо умолчаниюделатьиспользовать sha256 Шифрование хэша пароля можно выполнить по адресуetc/plugins/emqx_auth_clientid.conf Средние изменения:
После настройки Хэш-метода,Новыйиз Предустановленные данные сертификацииипроходить HTTP API Добавить данные из Сертификации. Зашифрованный хеш-текст Воляка, хранящийся в EMQ X Встроенная база данных.
Можеткпроходить Конфигурациядокумент Предустановленные данные сертификации,编辑Конфигурациядокумент: etc/plugins/emqx_auth_clientid.conf
плагинначинать动час Волячитать Предустановленные данные сертификации并加载приезжать EMQ X Встроенная база данныхсередина, на этом этапе данные на узле будут синхронизированы с кластером.
Предустановленные данные сертификациисуществовать Конфигурацияв файледелатьиспользоватьчистый текстпароль,Из соображений безопасности и удобства обслуживания избегайте использования этой функции.
Мы используем VSCode для передачи EMQ XизAPI для добавления и просмотра клиента Данные IDиз Сертификации.
1. Добавьте API данных сертификации. определение: POST api/v4/auth_clientid{ "clientid": "emqx_c", "password": "emqx_p"}
####добавить вclientIdипароль#####
POST http://{{hostname}}:{{port}}/api/v4/auth_clientid HTTP/1.1
Content-Type: {{contentType}}
Authorization: Basic {{userName}}:{{password}}
{ "clientid": "emq-client1", "password": "123456" }
возвращаться
2. Просмотр добавленного API данных из Сертификация. определение: GET api/v4/auth_clientid
#############Узнайте все подробности########
ПОЛУЧИТЕ http://{{имя хоста}}:{{порт}}/api/v4/auth_clientid HTTP/1.1
Тип контента: {{contentType}}
Авторизация: базовая {{userName}}:{{пароль}}
возвращаться
3: Изменить обозначение Client ID изпарольAPI определение: PUT api/v4/auth_clientid/${clientid}{ "password": "emqx_new_p"} обозначение Client ID,传递новыйпарольруководить Изменять,сновасоединятьчас需要делатьиспользоватьновыйпарольруководитьсоединять:
#############Изменятьобозначение Client ID изпароль########
PUT http://{{hostname}}:{{port}}/api/v4/auth_clientid/emq-client1 HTTP/1.1
Content-Type: {{contentType}}
Authorization: Basic {{userName}}:{{password}}
{ "password": "654321" }
возвращаться
Инструмент Makeusemqttклиент проверяет makeuseClient IDсоединять логиниз Функция
На данный момент вам необходимо ввести его в поле имени пользователя, но вы можете заполнить его случайно!
HTTP Сертификацияделатьиспользоватьснаружи部自建 HTTP отвечатьиспользовать Сертификацияисточник данных,в соответствии с HTTP API Сертификациярезультат определения данных, способный реализовать сложную логику аутентификации из Сертификации. Kaiuse Для функции нужна Воля emqx_auth_http Запустите плагин и измените файл конфигурации плагина, в котором есть URL-адрес интерфейса HTTP-сертификации. emqx_auth_http плагин同часвозвращаться包含了ACLиз Функция,Мы пока недоступны,Судя по аннотации Воля, его запрещено использовать.
1: Открыть на панели управления emqx_auth_http плагин, в то же время, во избежание ошибок, мы можем прекратить передачу имени пользователя, clientID Создать плагин Сертификации emqx_auth_clientid , emqx_auth_username
EMQ X Используйте параметр «Когда использовать информацию, связанную с бывшим клиентом» в событии подключения устройства, чтобы инициировать запрос разрешения на запрос службы использования пользователя «Настройка сертификации». проходитьвозвращатьсяиз HTTP Код статуса ответа (HTTP statusCode) для обработки запросов на сертификацию.
HTTP API 基础запросить информацию, настроить Сертификат, заголовки запросов и правила повтора.
Правила добавления соли и Хэш-метод
HTTP существоватьпроситьсередина传递明文пароль,Правила добавления соли и Хэш-метод зависит HTTP отвечатьиспользовать。
EMQ при проведении Сертификации личности X Воля заполняет информацию об использовании когда бывший клиент и инициирует запрос конфигурации пользователя из Сертификации для запроса клиента в HTTP Серверная часть из данных сертификации.
Откройте файл конфигурации etc/plugins/emqx_auth_http.conf и измените следующее содержимое: После завершения изменения необходимо перезапустить службу EMQX.
HTTP Метод запросадля GET Когда запросить параметр Воляк URL Строка запроса передается в виде POST, PUT. Запросите затем Воля параметры запроса для отправки общей формы (content-type для x-www-form-urlencoded)。
Вы можете использовать заполнители в запросах на сертификацию при запросе EMQ X Воля автозаполнение информации для клиента:
Для использования метода GET рекомендуется использовать методы POST и PUT, пароль в виде открытого текста может быть URL-адресом. Процесс передачи фиксируется в журнале сервера.
Создадим программу на основе Springboot из следует использовать: emqx-demo
1. POM-файл
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.jie</groupId>
<artifactId>emqx-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>emqx-demo</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
2. Создайте файл конфигурации application.yml и настройте его.
server:
port: 8991
spring:
application:
name: emqx-demo
3. Создайте контроллер: com.jie.emqxdemo.mqtt.AuthController напишите следующее;
package com.jie.emqxdemo.controller.mqtt;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.PostConstruct;
import java.util.HashMap;
import java.util.Map;
/**
* @description:Принять запрос на сертификацию
* @author: jie
* @time: 2022/3/29 20:57
*/
@RestController
@RequestMapping("/mqtt")
@Slf4j
public class AuthController {
/**
* использовать для хранения данных Фактическая разработка должна храниться в базе данныхсередина */
private Map<String, String> users;
@PostConstruct
public void init() {
//действительныйизпарольотвечать Должендазашифрованный текст,mqttизhttpСертификация Компоненты передаютсяизпарольда明文,我们需要自己руководитьшифрованиепроверять
users = new HashMap<>();
users.put("user", "123456");
users.put("emq-client2", "123456");
users.put("emq-client3", "123456");
}
/**
* @description: принять сообщение Если имя атрибута не соответствует, вы можете использовать аннотацию @RequestParam для сопоставления.
* @author: jie
* @time: 2022/3/29 21:03
*/
@PostMapping("/auth")
public ResponseEntity<?> auth(@RequestParam("clientid") String clientid,
@RequestParam("username") String username,
@RequestParam("password") String password) {
log.info("emqxСертификация Настройка компонентовиспользовать Настроитьиз Сертификация服务открыть始Сертификация,clientid={},username={},password= {}", clientid, username, password);
//Здесь можно реализовать сложную логику, но мы демонстрируем ее только для облегчения фиксированной операции.
String value = users.get(username);
if (StringUtils.isEmpty(value)) {
return new ResponseEntity<Object>(HttpStatus.UNAUTHORIZED);
}
if (!value.equals(password)) {
return new ResponseEntity<Object>(HttpStatus.UNAUTHORIZED);
}
return new ResponseEntity<Object>(HttpStatus.OK);
}
}
делатьиспользоватьMQTTXклиентинструментсоединятьEMQXServiceустройство,следующее
Я не знаю, почему всегда отсутствует знак. Может кто-нибудь дать мне совет в комментариях? Спасибо!
Введите это место изClient-ID случайно,Потому что для не проверил это поле в коде подтверждения,之назад点соединять,Discovery объединит успех,Затем вы можете перейти в службу Настроитьиз Сертификация, чтобы просмотреть вывод консоли.,Доказывает, что внешний интерфейс проверки HTTP эффективен. В реальном процессе разработки проекта код проверки HTTP-интерфейса будет не таким простым.,счетипарольи тому подобноеизданные肯定会存существоватьназад端база данныхсередина, код перейдет в издатаибазу данныхвданные做校验,Проверка будет успешной только в том случае, если она пройдет успешно.,В противном случае проверка не удастся.
когда РанEMQ XПомимо поддержки, мы уже говорили о нескольких видах методов. аутентификацииснаружи,возвращатьсяподдерживатьдругойиз Метод аутентификации,например:MySQLСертификация、PostgreSQLСертификация、RedisСертификация、MongoDBСертификация,длядругой Эти Метод только включение аутентификации соответствует изEMQ X и настройте соответствующий файл конфигурации, соответствующие данные сохраняются в соответствующем источнике. данных即Может。
В реальных проектах нам необходимо завершить разработку собственной бизнес-логики, подключившись к серверу брокера сообщений MQTT, чтобы публиковать на нем сообщения, подписываться на сообщения и т. д. ЭМК Для разных языков существуют разные наборы инструментов SDK, которые можно посмотреть на официальном сайте и скачать: MQTT клиент SDK | EMQ (emqx.com)
Paho Javaклиент — это библиотека, написанная на Java и предназначенная для работы на платформах, совместимых с JVM (например, Android).
Пахо умеет не только подключаться к EMQ X Брокер также может быть подключен к серверу брокера сообщений, соответствующему спецификации протокола MQTT. настоящий моментPaho может перейти к следующей версии MQTT5.0к. Версия протокола MQTT3.3.1 в основном может удовлетворить более чем 90% сценариев доступа.
Paho Javaклиент предоставил два API:
1. Найдите проект: emqx-demo и добавьте зависимости maven.
<dependency>
<groupId>org.eclipse.paho</groupId>
<artifactId>org.eclipse.paho.client.mqttv3</artifactId>
<version>1.2.2</version>
</dependency>
2. Writeuse для загрузки ymlНастроить конфигурацию из класса конфигурации из кода: com.jie.emqxdemo.properties.Mqttproperties
package com.jie.emqxdemo.properties;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
/**
* @description:использовать для загрузки yml Настроить конфигурацию из класса конфигурации
* @author: jie
* @time: 2022/3/31 21:12
*/
@Configuration
@ConfigurationProperties(prefix = "mqtt")
@Data
public class Mqttproperties {
private String brokerUrl;
private String clientId;
private String username;
private String password;
@Override
public String toString() {
return "Mqttproperties{" +
"brokerUrl='" + brokerUrl + '\'' +
", clientId='" + clientId + '\'' +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
3. Напишите код обратного вызова сообщения: com.jie.emqxdemo.client.MessageCallback.
package com.jie.emqxdemo.client;
import jdk.nashorn.internal.parser.Token;
import lombok.extern.slf4j.Slf4j;
import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttCallback;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.springframework.stereotype.Component;
/**
* @description:Обратный вызов сообщения
* @author: jie
* @time: 2022/3/31 22:12
*/
@Slf4j
@Component
public class MessageCallback implements MqttCallback {
/**
* @description: Обратный вызов этого метода запускается после потери соединения с сервером. Здесь можно выполнить некоторую специальную обработку, например повторное подключение.
* @author: jie
* @time: 2022/3/31 22:14
*/
@Override
public void connectionLost(Throwable throwable) {
log.info("Потерян доступ к сервису изоединять");
}
/**
* @description: обратный вызов должен быть инициирован после получения сообщения.
* Этот метод синхронизируется с помощью mqttклиентиспользовать. До того, как этот метод станет правильным, сообщение подтверждения подтверждения не будет отправлено брокеру.
* Как только метод Клиент Воля выдает исключение и закрывается ненормально, при возврате к соединению все QoS1, QoS2 и клиент не подтверждаются ACK, и все сообщения отправляются; Сервер брокера снова отправляет его клиенту.
* @author: jie
* @time: 2022/3/31 22:15
*/
@Override
public void messageArrived(String s, MqttMessage mqttMessage) throws Exception {
log.info("Подписался на сообщение; theme={},messageid={},qos={},msg={}",
s,
mqttMessage.getId(),
mqttMessage.getQos(),
new String(mqttMessage.getPayload()));
}
/**
* @description: обратный вызов генерируется после завершения публикации сообщения.
* @author: jie
* @time: 2022/3/31 22:18
*/
@Override
public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
int messageId = iMqttDeliveryToken.getMessageId();
String[] topics = iMqttDeliveryToken.getTopics();
log.info("Отправка сообщения завершена,messageId={},topics={}",messageId,topics);
}
}
4. Напишите класс перечисления QOS: com.jie.emqxdemo.enums.QosEnum.
package com.jie.emqxdemo.enums;
/**
* @description:Столбец перечисления Qos
* @author: jie
* @time: 2022/3/31 21:54
*/
public enum QosEnum {
QOS0(0),QOS1(1),QOS2(2);
private final int value;
QosEnum(int value){
this.value = value;
}
/**
* @description: получить значение перечисления.
* @author: jie
* @time: 2022/3/31 21:56
*/
public int value(){
return this.value;
}
}
5. Добавьте конфигурацию Настроить в файл application.yml:
mqtt:
broker-url: tcp://192.168.58.149:1883
client-id: emq-client
username: user
password: 123456
6. Класс клиентского пакета: com.jie.emqxdemo.client.
package com.jie.emqxdemo.client;
import com.jie.emqxdemo.enums.QosEnum;
import com.jie.emqxdemo.properties.Mqttproperties;
import lombok.extern.slf4j.Slf4j;
import org.eclipse.paho.client.mqttv3.*;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import java.nio.charset.StandardCharsets;
/**
* @description:класс инкапсуляции клиента
* @author: jie
* @time: 2022/3/31 21:02
*/
@Component
@Slf4j
public class EmqClient {
private IMqttClient iMqttClient;
/**
* @description:Класс конфигурации Воли внедряется
*/
@Autowired
private Mqttproperties mqttproperties;
@Autowired
private MqttCallback mqttCallback;
/**
* @description: инициализация
* @author: jie
* @time: 2022/3/31 21:22
*/
@PostConstruct
public void init(){
//Механизм сохранения сохраняться в памяти MqttDefaultFilePersistence (постоянный для локальной файловой системы)
MqttClientPersistence mqttClientPersistence = new MemoryPersistence();
try {
iMqttClient = new MqttClient(mqttproperties.getBrokerUrl(),mqttproperties.getClientId(),mqttClientPersistence);
} catch (MqttException e) {
log.error("Инициализация объекта clientmqttClient не удалась, errormsg={} brokerurl={},clientId= {}",e.getMessage(), mqttproperties.getBrokerUrl(),mqttproperties.getClientId());
}
}
/**
* @description:соединять метод на стороне сервера
* @author: jie
* @time: 2022/3/31 21:33
*/
public void connect(String username,String password){
//соединять объект опции
MqttConnectOptions options = new MqttConnectOptions();
//Автоматически переподключаемся
options.setAutomaticReconnect(true);
options.setUserName(username);
options.setPassword(password.toCharArray());
//временная изсессия
options.setCleanSession(true);
//Обратный вызов метода
iMqttClient.setCallback(mqttCallback);
try {
iMqttClient.connect(options);
} catch (MqttException e) {
log.error("соединятьmqtt Ошибка брокера, причина ошибки: {}",e.getMessage());
}
}
/**
* @description:断открытьсоединять * @author: jie
* @time: 2022/3/31 21:48
*/
@PreDestroy
public void disConnect(){
try {
iMqttClient.disconnect();
} catch (MqttException e) {
log.error("Отключение соединения приводит к возникновению исключения, сообщения об исключении {}", e.getMessage());
}
}
/**
* @description:重новыйсоединять * @author: jie
* @time: 2022/3/31 21:51
*/
public void reConnect(){
try {
iMqttClient.reconnect();
} catch (MqttException e) {
log.error("Не удалось перезапустить, причина: {}",e.getMessage());
}
}
/**
* @description:Опубликовать сообщение тема: тема сообщение: сообщение qos:qos сохранить: сохранять ли сообщение
* @author: jie
*/
public void publish(String topic, String msg, QosEnum qos,boolean retain){
MqttMessage mqttMessage = new MqttMessage();
//Устанавливаем тело сообщения
mqttMessage.setPayload(msg.getBytes(StandardCharsets.UTF_8));
//qos
mqttMessage.setQos(qos.value());
try {
iMqttClient.publish(topic,mqttMessage);
} catch (MqttException e) {
log.error("Не удалось опубликовать сообщение, причина ошибки: {}, Topic={},msg={},qos={},retain={}",e.getMessage(),topic,msg,qos,retain ) ;
}
}
/**
* @description: Подписаться на сообщения themeFilter:Подписаться на тему qos :qos
* @author: jie
* @time: 2022/3/31 22:04
*/
public void subscribe(String topicFilter,QosEnum qos){
//подписаться на тему
try {
iMqttClient.subscribe(topicFilter,qos.value());
} catch (MqttException e) {
log.error("Не удалось подписаться на тему, errormsg={},topicFilter:{},qos:{}",e.getMessage(),topicFilter,qos);
}
}
/**
* @description:Отменить подписку
* @author: jie
* @time: 2022/3/31 22:08
*/
public void unSubscribe(String topicFilter){
try {
iMqttClient.unsubscribe(topicFilter);
} catch (MqttException e) {
log.error("Ошибка отказа от подписки,errormsg={},topicFilter={}",e.getMessage(),topicFilter);
}
}
}
7. Напишите сообщение о публикации и подписке и тесте.,существоватьначинать动类серединадобавить вследующеекод(Просто ленюсьдля)
package com.jie.emqxdemo;
import com.jie.emqxdemo.client.EmqClient;
import com.jie.emqxdemo.enums.QosEnum;
import com.jie.emqxdemo.properties.Mqttproperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import javax.annotation.PostConstruct;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.concurrent.TimeUnit;
@SpringBootApplication
public class EmqxDemoApplication {
public static void main(String[] args) {
SpringApplication.run(EmqxDemoApplication.class,аргументы);
}
@Autowired
частный EmqClient emqClient;
@Autowired
частные Mqttproperties mqttproperties;
@PostConstruct
публичная недействительная инициализация () {
//соединять Сервер emqClient.connect(mqttproperties.getUsername(),mqttproperties.getPassword());
//подписаться на тему
emqClient.subscribe("testtopic/#", QosEnum.QOS2);
//включаем новую ветку каждые пять секунд testtopic/123
new Thread(()->{
while (true){
emqClient.publish("testtopic/123","mqtt msg:"+ LocalDateTime.now().format(DateTimeFormatter.ISO_DATE_TIME),QosEnum.QOS2,false);
try {
TimeUnit.SECONDS.sleep(5);
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
}
тест: На панели мониторинга используйте имя пользователя для выполнения компонента Сертификацияиз, остановите другой компонент, а затем запустите проект для просмотра. Просто выведите консоль
MQTT.js — это клиентская библиотека JS протокола MQTT, использующая JavaScript для браузера Node.jsi, написанного на ней.
Адрес проекта на GitHub: GitHub - mqttjs/MQTT.js: The MQTT client for Node.js and the browser
Перейдем непосредственно к официальной документации, Адрес проекта на GitHub: GitHub - mqttjs/MQTT.js: The MQTT client for Node.js and the browser , а затем прокрутите вниз.
Давайте напишем HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>mqtt.jsтест</title>
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js" ></script>
<script src="https://unpkg.com/mqtt/dist/mqtt.min.js" ></script>
<style type="text/css">
div{
width: 300px;
height: 300px;
float: left;
border: red solid 1px;
}
</style>
<script type="text/javascript">
$(function (){
// соединять Параметры const options = { clean: true, // продолжать отвечать
connectTimeout: 4000, // тайм-аут
// Сертификацияинформация clientId: 'emqx_client_h5', username: 'user', password: '123456',
}
const connectUrl = "ws://192.168.58.149:8083/mqtt";
const client = mqtt.connect(connectUrl,options);
/**
* События, связанные с mqtt.Client
*/
//когда перезапустить соединение, чтобы вызвать обратный вызов
client.on('reconnect', () => {
$("#div1").text("Повторное подключение....");
});
//соединять триггеры обратного вызова после отключения
client.on("close",function () {
$("#div1").text("клиент已断открытьсоединять....."); });
//Отправляется после получения от брокера пакета данных об отключении соединения. MQTT 5.0 Особенности
client.on("disconnect",function (packet) {
$("#div1").text("Получен пакет данных об отключении соединения от брокера...."+packet);
});
//клиент оффлайн запускает обратный вызов
client.on("offline",function () {
$("#div1").text("клиент оффлайн...");
});
//когдаклиент не может вызвать обратный вызов при возникновении ошибки при подключении
client.on("error",(error) =>{
$("#div1").text("Произошла ошибка клиента.."+error);
});
//к Следующие два события отслеживаются с высокой степенью детализации //когдаклиент Генерируется при отправке любого пакета. Сюда входит пакетPublished() киMQTTиспользовать для управления подписками исоединятьиз пакета.
client.on("packetsend",(packet)=>{
$("#div1").text("клиент отправил пакет данных...."+packet);
});
//когдаклиент генерируется при получении любого пакета. Сюда входят информационные пакеты из тем подписок, используемых MQTT, для управляемых подписок исоединять. из информационного пакета
client.on("packetreceive",(packet)=>{
$("#div1").text("клиент получил пакет данных...."+packet);
});
//Запуск обратного вызова после успешного подключения
client.on("connect",function (connack) {
$("#div1").text("Обращение к серверу успешно"+new Date());
//подписаться на тему
/**
* client.subscribe(topic/topic array/topic object, [options], [callback])
* theme: строковый тип изtopic или массив тем, или это объект
* options */
client.subscribe("testtopic/#",{qos:2});
//Публикуем данные каждые 2 секунды
setInterval(publish,2000)
});
function publish() {
//Публикуем данные
/**
* client.publish(topic,message,[options], [callback])
* message: Buffer or String
* options:{
* qos:0, //По умолчанию 0
* retain:false, //по умолчанию ложь
* dup:false, //по умолчанию ложь
* properties:{}
* }
* callback:function (err){}
*/
const message = "h5 message "+Math.random()+new Date();
client.publish("testtopic/123",message,{qos:2});
$("#div2").text("клиент опубликовал данные:"+message);
}
//когдаклиент запускает обратный вызов, когда получает сообщение о публикации
/**
* тема:Получен пакет данных из темы
* сообщение: Получено из пакета данных из полезной нагрузки
* пакет: полученный пакет данных */
client.on('message', (topic, message,packet) => {
$("#div3").text("клиент получил сообщение о подписке, Topic="+topic+"; данные сообщения: "+message+"; data Пакет:"+пакет);
});
//Автоматически отключаемся при выходе со страницы подключаться
$(window).bind("beforeunload",()=>{
$("#div1").text("Окно клиента закрыть, отключить соединение");
client.disconnect();
})
})
</script>
</head>
<body>
<div id="div1"></div>
<div id="div2"></div>
<div id="div3"></div>
</body>
</html>
тест:Элемент запускав настоящий момент Воля Стартап-класс EmqxDemoApplication серединаinitметодиз Комментировать,начинать动назад访问следующееадрес Проверять网页端извыход。
EMQ X поддерживает Воля вывода журнала на консоль или в файл журнала, или делаетиспользовать и то, и другое одновременно. Доступно на emqx.conf Средняя конфигурация :
log.to = both
log.to Значение по умолчанию: оба, необязательно из значения для:
EMQ X из точек журнала 8 уровень, От низкого к высокому:
debug < info < notice < warning < error < critical < alert < emergency
EMQ X изпо умолчанию Уровень журналадля предупреждение, доступно по адресу emqx.conf Средняя модификация:
log.level = warning
Эта конфигурация будет все log handler из Настройки конфигурациидля warning。
EMQ X из Файл журнала по умолчанию «Оглавление» находится в ./log (Разархивируйте zip-архив и установите его) или /var/log/emqx (Установка бинарного пакета). Доступно в emqx.conf Средняя конфигурация:
log.dir = log
В случае файла журнала startuseiz (log.to = fifile или оба), в журнале Оглавление будут следующие файлы:
Доступно на emqx.conf Измените префикс файла журнала, по умолчанию — для. emqx.log :
log.file = emqx.log
EMQ X По умолчанию размер одного файла журнала превышает 10MB В этом случае прокручиваемые файлы журналов могут иметь до 5 Лог-файлы: Нет. 1 Файл журнала дляemqx.log.1, нет. 2 индивидуальныйдля emqx.log.2 и т. д.
Когда последний файл журнала также заполнен 10MB В это время Воля начинает перезаписывать лог-файл с наименьшим серийным номером. Ограничение размера файла и максимальное количество файлов журналов Доступно на emqx.conf Средняя модификация:
log.rotation.size = 10MB
log.rotation.count = 5
Если вы хотите записывать журналы, превышающие или равные определенному уровню, в отдельный файл, вы можете emqx.conf Средняя конфигурация log..file : Воля info и информация кначальствоиз журналы выводятся отдельно в info.log.N В файле:
log.info.file = info.log
Воля error и error кначальствоиз журналы выводятся отдельно в error.log.N в файле
log.error.file = error.log
Доступно на emqx.conf Измените максимальную длину символов одного сообщения журнала. Если длина превышает ограничение, сообщение журнала будет усечено и заменено. ... наполнение. По умолчанию ограничения длины нет:
Воля Отдельное сообщение журнала из Настройка максимальной длины символовдля 8192:
log.chars_limit = 8192
Сообщение журнала в формате для (разделенные пробелами между каждым полем)
Пример сообщения журнала
2022-04-1 16:10:03.872 [debug] <<"mqttjs_9e49354bb3">>@127.0.0.1:57105 [MQTT/WS] SEND CONNACK(Q0, R0, D0, AckFlags=0, ReasonCode=0)
Каждое поле в этом сообщении журнала:
2022-04-1 16:10:08.474 [warning] [Alarm Handler] New Alarm: system_memory_high_watermark, Alarm Info: []
Каждое поле в этом сообщении журнала:
Обратите внимание, что в этом сообщении журнала поле client_info не существует.
EMQ X Реализация многоуровневой системы журналирования в Уровень журнал, в том числе глобальный Уровень журнала (primary log level)、что каждый log hanlderиз Уровень журнала。
[Primary Level] -- global log level and filters
/ \
[Handler 1] [Handler 2] -- log levels and filters at each handler
log handler Является ли рабочий процесс ответственным за обработку и вывод журнала, который состоит из log handler id Уникально идентифицированный и ответственный за следующие задачи:
давайте посмотрим emqx Установка по умолчанию из log handlers:
emqx_ctl log handlers list
Прежде чем выводить сообщение журнала, сначала проверьте, превышает ли сообщение значение primary log уровень, сообщения журнала текут на каждый log обработчик, затем проверьте каждый handler из Уровень журнала, если сообщение журнала также выше, чем handler уровень, то соответствующий handler Выполните соответствующие условия фильтрации и выведите результат, если условия фильтрации пройдены.
Представьте себе сценарий, предположим primary log level Настройки info,log handler default (Отвечает за вывод на консоль) изуровень Настройкиdebug,log handler file (отвечает за вывод в файл) изуровень Настройки warning:
Хотя console Журнал debug уровне, но в это время console Журнал может быть выведен только info ки info киз новости, потому что для прошли праймериз level После фильтрации переходят в default и fifile из журнала осталось только info икначальствоизуровень;
emqx.log.N Файл содержит warning ки warning кначальствоизсообщение журнала。
существовать Уровень из упоминается в подразделе журнал log.level изменить глобальную ситуацию из Уровень журнал. Это включает в себя primary log level èКаждый handlersиз Уровень журнала,Все Настройки了同один值。
Первичный уровень бревна аналогичен главному выключателю водопроводной системы. После закрытия поток воды через каждый патрубок больше не будет. Этот механизм обеспечивает высокопроизводительную работу системы журналирования.
Можеткделатьиспользовать EMQ X из инструмента командной строки emqx_ctl изменено во время выполнения emqx из Уровень журнала:
Измените глобальный Уровень журнала:
Например, Воля primary log level ки Все log handlers изуровень Настройки debug:
emqx_ctl log set-level debug
Изменить основной Уровень журнала:
Например, Воля primary log level Настройки debug:
emqx_ctl log primary-level debug
Изменить журнал handlerиз Уровень журнала:
Например, Воля log handler file Настройки debug:
emqx_ctl log handlers set-level file debug
EMQ X поддерживатьпротив ClientID или Topic Фильтрация журналов и вывод в файл. При изготовлениииспользовать Отслеживание журналов Функция До,Должен Воля primary log level Настройки debug:
emqx_ctl log primary-level debug 1111
включать ClientID Отслеживание журналов,Волявсе ClientID для emq-demo из Журналы выводятся в log/my_client.log:
emqx_ctl log primary-level debug debug
emqx_ctl trace start client emq-demo log/emq-demo.log
включать Topic Отслеживание журналов, тема Воля может соответствовать 'testtopic/#' из Вывод журнала выпуска сообщений в log/topic_testtopic.log:
emqx_ctl log primary-level debug debug
emqx_ctl trace start topic 'testtopic/#' log/topic_testtopic.log trace topic testtopic/# successfully 1234512345
Совет: даже если emqx.conf середина, log.level Настройки ошибка, так что функция отслеживания сообщений все равно может распечатать определенное client или topic из debug Уровень информации. Это очень полезно в производственной среде.