MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的“轻量级”通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布。
MQTT最大优点在于,用极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。
作为一种低开销、低带宽占用的即时通讯协议,使其在物联网、小型设备、移动应用等方面有较广泛的应用。
MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。
MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。
修改pom.xml ,增加相关mqtt的依赖
org.springframework.integration
spring-integration-stream
org.springframework.integration
spring-integration-mqtt
4.0.0
org.springframework.boot
spring-boot-starter-parent
2.1.17.RELEASE
com.huawen
mqtt-demo
0.0.1
mqtt-demo
Boot with MQTT Demo
org.springframework.boot
spring-boot-starter
org.springframework.boot
spring-boot-starter-web
org.springframework.boot
spring-boot-starter-integration
org.springframework.integration
spring-integration-stream
org.springframework.integration
spring-integration-mqtt
org.projectlombok
lombok
1.18.12
org.springframework.boot
spring-boot-maven-plugin
自定义yml配置
spring:
application:
name: MQTT-DEMO
server:
port: 8989
#mqtt properties
mqtt:
#uris 可以有多个 所以是个数组
uris:
- tcp://127.0.0.1:1883
clientId: mqtt_test1
topics:
- demo
- test
username: admin
password: 123456
timeout: 30
keepalive: 60
qos: 1
增加config配置读取yml文件 (使用了Lombok 需要自行添加pom依赖)
package com.huawen.mqtt.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
@author:xjl
@date:2022/5/5 17:27
@Description: MQTT的配置类
**/
@Component
@ConfigurationProperties(prefix = “mqtt”)
@Data
public class MqttConfiguration {
/**
/**
/**
/**
/**
/**
/**
/**
消费者配置
package com.huawen.mqtt.config;
import lombok.extern.slf4j.Slf4j;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.integration.annotation.ServiceActivator;
import org.springframework.integration.channel.DirectChannel;
import org.springframework.integration.core.MessageProducer;
import org.springframework.integration.mqtt.core.DefaultMqttPahoClientFactory;
import org.springframework.integration.mqtt.core.MqttPahoClientFactory;
import org.springframework.integration.mqtt.inbound.MqttPahoMessageDrivenChannelAdapter;
import org.springframework.integration.mqtt.support.DefaultPahoMessageConverter;
import org.springframework.integration.mqtt.support.MqttHeaders;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.MessageHandler;
import javax.annotation.Resource;
/**
@author:xjl
@date:2022/5/6 9:06
@Description: MQTT 消费端的配置
**/
@Configuration
@Slf4j
public class MqttInBoundConfiguration {
@Resource
private MqttConfiguration mqttProperties;
//==================================== 消费消息==========================================//
/**
/**
/**
/**
生产者配置
package com.huawen.mqtt.config;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.integration.annotation.ServiceActivator;
import org.springframework.integration.channel.DirectChannel;
import org.springframework.integration.mqtt.core.DefaultMqttPahoClientFactory;
import org.springframework.integration.mqtt.core.MqttPahoClientFactory;
import org.springframework.integration.mqtt.outbound.MqttPahoMessageHandler;
import org.springframework.integration.mqtt.support.DefaultPahoMessageConverter;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.MessageHandler;
import javax.annotation.Resource;
/**
@author:xjl
@date:2022/5/6 8:49
@Description: MQTT 生产端的配置
**/
@Configuration
public class MqttOutBoundConfiguration {
@Resource
private MqttConfiguration mqttProperties;
//==================================== 发送消息==========================================//
/**
/**
/**
创建一个通用接口 用于发送数据
package com.huawen.mqtt.inter;
import org.springframework.integration.annotation.MessagingGateway;
import org.springframework.integration.mqtt.support.MqttHeaders;
import org.springframework.messaging.handler.annotation.Header;
/**
@author:xjl
@date:2022/5/6 9:20
@Description: 接口MqttGateway
/
@MessagingGateway(defaultRequestChannel = “out”)
public interface MqttGateway {
/
/**
/**
/**
生产者测试controller
package com.huawen.mqtt.controller;
import com.huawen.mqtt.bean.MyMessage;
import com.huawen.mqtt.inter.MqttGateway;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
@author:xjl
@date:2022/5/6 9:17
@Description: mqtt发布消息controller
**/
@RestController
public class MqttPublishController {
@Resource
private MqttGateway mqttGateWay;
@PostMapping(“/send”)
public String send(@RequestBody MyMessage myMessage) {
// 发送消息到指定主题
mqttGateWay.sendToMqtt(myMessage.getTopic(), 1, myMessage.getContent());
return "send topic: " + myMessage.getTopic() + ", message : " + myMessage.getContent();
}
}
源码地址:https://github.com/KyrieXJL/MQTT_Demo
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦