Иногда мы используем его в наших проектахобмен мгновенными сообщениями
Функция,Например, функция чата службы поддержки клиентов в системе электронной коммерции.,Также в процессе оплаты,Когда пользователь успешно платит,Сторонний платежный сервис перезвонит нам через интерфейс обратного вызова.,На этом этапе нам нужно уведомить фронтенд об успешном совершении платежа.。недавно обнаруженRabbitMQМожет быть легко реализованобмен мгновенными сообщениями
Функция,Если у вас нет особых деловых потребностей,Вам даже не нужно писать внутренний код,Сегодня я расскажу вам, как им пользоваться.RabbitMQосознатьобмен мгновенными сообщениями
!
MQTT(Message Queuing Telemetry Transport,Транспортный протокол телеметрии очереди сообщений),является издательской базой/подписка(publish/subscribe)шаблонлегкий
Протокол связи,Этот протокол построен наTCP/IP
по соглашению。MQTTСамым большим преимуществом является,С минимальным кодом и ограниченной пропускной способностью,Предоставляйте надежные услуги обмена сообщениями в режиме реального времени для подключения удаленных устройств.
QoS 0
、QoS 1
、QoS 2
три уровня,Давайте представим их отдельно ниже:RabbitMQ включает функцию MQTT, вам необходимо установить, а затем включить плагин.
rabbitmq-plugins enable rabbitmq_mqtt
1883
Порт работает。Это может быть полезный для вас проект с открытым исходным кодом.,Проект торгового центра представляет собой комплекс SpringBoot3 + JDK 17 + Vue выполнитьиз Система электронной коммерции(Звезда Github 60 тыс.),Развертывание с использованием Docker-контейнеров,Серверная часть поддерживает многомодульную и микросервисную архитектуру. Включая внешний проект торгового центра и внутреннюю систему управления.,Может поддерживать полную Заказпроцесс!Охватываемая продукция、Заказ、корзина、Разрешения、Купон、член、Оплата и другие функции!
Демонстрация проекта:
Мы можем использовать MQTT-клиент для тестирования обмена MQTT. мгновенными сообщениями Функция,Здесь используется
MQTTBox
Этот клиентский инструмент。
MQTTBox
,Адрес загрузки: http://workswithweb.com/mqttbox.html.Create MQTT Client
кнопка для созданияMQTT-клиент;testTopicA
эта тема,Мы отправим сообщение в эту тему;теперь это
MQTTBox
Клиент может напрямую пройтиRabbitMQвыполнитьобмен мгновенными сообщениями, можем ли мы напрямую использовать интерфейсные технологии для достижения обмена мгновенными сообщениями?Ответ: да!Ниже мы пройдемсяhtml+javascript
выполнитьпростойизчат Функция,Реально обеспечьте обмен мгновенными сообщениями, не написав ни единой строки внутреннего кода!
rabbitmq-plugins enable rabbitmq_web_mqtt
15675
Порт работает;MQTT.js
из Библиотека,Адрес проекта: https://github.com/mqttjs/MQTT.js<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div>
<label>ЦельTopic:<input id="targetTopicInput" type="text"></label><br>
<label>Отправить сообщение:<input id="messageInput" type="text"></label><br>
<button onclick="sendMessage()">отправлять</button>
<button onclick="clearMessage()">Прозрачный</button>
<div id="messageDiv"></div>
</div>
</body>
<script src="https://unpkg.com/mqtt/dist/mqtt.min.js"></script>
<script>
//Адрес подключения RabbitMQ к web-mqtt
const url = 'ws://localhost:15675/ws';
//Получаем подписанную тему
const topic = getQueryString("topic");
//Подключаемся к очереди сообщений
let client = mqtt.connect(url);
client.on('connect', function () {
//Подписка на тему после успешного подключения
client.subscribe(topic, function (err) {
if (!err) {
showMessage("Подписаться на тему:" + topic + "успех!");
}
});
});
//Получаем сообщения в теме подписки
client.on('message', function (topic, message) {
showMessage("Получено сообщение:" + message.toString());
});
//Отправить сообщение
function sendMessage() {
let targetTopic = document.getElementById("targetTopicInput").value;
let message = document.getElementById("messageInput").value;
//Отправляем сообщение в целевую тему
client.publish(targetTopic, message);
showMessage("Отправить сообщение" + targetTopic + "Сообщение:" + message);
}
//Получаем параметры из URL
function getQueryString(name) {
let reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
let r = window.location.search.substr(1).match(reg);
if (r != null) {
return decodeURIComponent(r[2]);
}
return null;
}
//Отображать сообщения в списке сообщений
function showMessage(message) {
let messageDiv = document.getElementById("messageDiv");
let messageEle = document.createElement("div");
messageEle.innerText = message;
messageDiv.appendChild(messageEle);
}
//Очищаем список сообщений
function clearMessage() {
let messageDiv = document.getElementById("messageDiv");
messageDiv.innerHTML = "";
}
</script>
</html>
testTopicA
,Адрес доступа: http://localhost:8088/page/index?topic=testTopicAtestTopicB
,Адрес доступа: http://localhost:8088/page/index?topic=testTopicBКогда нет особых бизнес-потребностей, интерфейс можно напрямую подключить к RabbitMQ для обмена мгновенными сообщениями. Но иногда нам необходимо уведомить интерфейсную часть через сервер. На данный момент нам необходимо интегрировать MQTT в приложение. Далее давайте поговорим о том, как использовать MQTT в приложении SpringBoot.
pom.xml
ДобавитьMQTTСвязанные зависимости;<!--SpringинтегрированныйMQTT-->
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-mqtt</artifactId>
</dependency>
application.yml
ДобавитьMQTTСвязанный Конфигурация,В основном Адрес доступа、Имя пользователя и пароль、Информация о теме по умолчанию;rabbitmq:
mqtt:
url: tcp://localhost:1883
username: guest
password: guest
defaultTopic: testTopic
/**
* MQTTСвязанный Конфигурация * Created by macro on 2020/9/15.
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Component
@ConfigurationProperties(prefix = "rabbitmq.mqtt")
public class MqttConfig {
/**
* Имя пользователя соединения RabbitMQ
*/
private String username;
/**
* Пароль подключения RabbitMQ
*/
private String password;
/**
* Тема MQTT по умолчанию RabbitMQ
*/
private String defaultTopic;
/**
* Адрес подключения MQTT RabbitMQ
*/
private String url;
}
@ServiceActivator
Аннотация объявляет активатор службы,проходитьMessageHandler
справитьсяподпискаинформация;/**
* Конфигурация, связанная с подписчиком сообщения MQTT
* Created by macro on 2020/9/15.
*/
@Slf4j
@Configuration
public class MqttInboundConfig {
@Autowired
private MqttConfig mqttConfig;
@Bean
public MessageChannel mqttInputChannel() {
return new DirectChannel();
}
@Bean
public MessageProducer inbound() {
MqttPahoMessageDrivenChannelAdapter adapter =
new MqttPahoMessageDrivenChannelAdapter(mqttConfig.getUrl(), "subscriberClient",
mqttConfig.getDefaultTopic());
adapter.setCompletionTimeout(5000);
adapter.setConverter(new DefaultPahoMessageConverter());
//Установить качество сообщения:0->максимум один раз;1->хотя бы один раз;2->только один раз
adapter.setQos(1);
adapter.setOutputChannel(mqttInputChannel());
return adapter;
}
@Bean
@ServiceActivator(inputChannel = "mqttInputChannel")
public MessageHandler handler() {
return new MessageHandler() {
@Override
public void handleMessage(Message<?> message) throws MessagingException {
//Обработка сообщений о подписке
log.info("handleMessage : {}",message.getPayload());
}
};
}
}
/**
* Конфигурация, связанная с издателем сообщений MQTT
* Created by macro on 2020/9/15.
*/
@Configuration
public class MqttOutboundConfig {
@Autowired
private MqttConfig mqttConfig;
@Bean
public MqttPahoClientFactory mqttClientFactory() {
DefaultMqttPahoClientFactory factory = new DefaultMqttPahoClientFactory();
MqttConnectOptions options = new MqttConnectOptions();
options.setServerURIs(new String[] { mqttConfig.getUrl()});
options.setUserName(mqttConfig.getUsername());
options.setPassword(mqttConfig.getPassword().toCharArray());
factory.setConnectionOptions(options);
return factory;
}
@Bean
@ServiceActivator(inputChannel = "mqttOutboundChannel")
public MessageHandler mqttOutbound() {
MqttPahoMessageHandler messageHandler =
new MqttPahoMessageHandler("publisherClient", mqttClientFactory());
messageHandler.setAsync(true);
messageHandler.setDefaultTopic(mqttConfig.getDefaultTopic());
return messageHandler;
}
@Bean
public MessageChannel mqttOutboundChannel() {
return new DirectChannel();
}
}
/**
* Шлюз MQTT, передающий данные через интерфейс в поток интеграции.
* Created by macro on 2020/9/15.
*/
@Component
@MessagingGateway(defaultRequestChannel = "mqttOutboundChannel")
public interface MqttGateway {
/**
* Отправить сообщение в тему по умолчанию
*/
void sendToMqtt(String payload);
/**
* Отправить сообщение в указанную тему
*/
void sendToMqtt(String payload, @Header(MqttHeaders.TOPIC) String topic);
/**
* Отправить сообщение в указанную тему и установите QOS
*/
void sendToMqtt(@Header(MqttHeaders.TOPIC) String topic, @Header(MqttHeaders.QOS) int qos, String payload);
}
/**
* Тестовый интерфейс MQTT
* Created by macro on 2020/9/15.
*/
@Api(tags = "MqttController", description = "Тестовый интерфейс MQTT")
@RestController
@RequestMapping("/mqtt")
public class MqttController {
@Autowired
private MqttGateway mqttGateway;
@PostMapping("/sendToDefaultTopic")
@ApiOperation("Отправить сообщение в тему по умолчанию")
public CommonResult sendToDefaultTopic(String payload) {
mqttGateway.sendToMqtt(payload);
return CommonResult.success(null);
}
@PostMapping("/sendToTopic")
@ApiOperation("Отправить сообщение в указанную тему")
public CommonResult sendToTopic(String payload, String topic) {
mqttGateway.sendToMqtt(payload, topic);
return CommonResult.success(null);
}
}
2020-09-17 14:29:01.689 INFO 11192 --- [ubscriberClient] c.m.mall.tiny.config.MqttInboundConfig : handleMessage : Сообщения из Интернета
2020-09-17 14:29:06.101 INFO 11192 --- [ubscriberClient] c.m.mall.tiny.config.MqttInboundConfig : handleMessage : Сообщения из Интернета
2020-09-17 14:29:07.384 INFO 11192 --- [ubscriberClient] c.m.mall.tiny.config.MqttInboundConfig : handleMessage : Сообщения из Интернета
Промежуточное программное обеспечение для сообщений используется все более широко. Оно может не только реализовывать надежную асинхронную связь, но и осуществлять мгновенную связь. По-прежнему необходимо освоить промежуточное программное обеспечение для обмена сообщениями. Если нет особых бизнес-потребностей, клиент или интерфейсная часть могут напрямую использовать MQTT для подключения к промежуточному программному обеспечению для обмена сообщениями. Если есть особые потребности, вы также можете использовать SpringBoot для интеграции MQTT. хороший способ добиться обмена мгновенными сообщениями.
https://github.com/macrozheng/mall-learning/tree/master/mall-tiny-mqtt
GithubначальствоСтандартная звезда 60К
из Практика электронной коммерциипроектmall,полный комплект Видеоурок (последняя версия 2023 г.) Обновлено!полный комплект Учебникоколо 40 часов,Всего 113 выпусков
,проходить这套Учебник你可以拥有一个Полный опыт реализации проектов, охватывающий основные стеки технологий Java.
,Совершенствуйтесь одновременноВозможность самостоятельно разработать проект
,Ниже представлена общая архитектурная схема проекта.,заинтересованныйиз Друзья могут Нажмите Связь видеоурок по торговому центру Присоединяйтесь к обучению.