# mica-mqtt-client-spring-boot-starter 使用文档
## 版本兼容
| 要求 | Spring boot 版本 |
|-----|----------------|
| 最低 | 2.1.0.RELEASE |
| 最高 | 3.x |
## 一、添加依赖
```xml
<dependency>
<groupId>net.dreamlu</groupId>
<artifactId>mica-mqtt-client-spring-boot-starter</artifactId>
<version>${最新版本}</version>
</dependency>
```
## 二、mqtt 客户端
### 2.1 配置项示例
```yaml
mqtt:
client:
enabled: true # 是否开启客户端,默认:true
ip: 127.0.0.1 # 连接的服务端 ip ,默认:127.0.0.1
port: 1883 # 端口:默认:1883
name: Mica-Mqtt-Client # 名称,默认:Mica-Mqtt-Client
client-id: 000001 # 客户端Id(非常重要,一般为设备 sn,不可重复)
user-name: mica # 认证的用户名
password: 123456 # 认证的密码
global-subscribe: # 全局订阅的 topic,可被全局监听到,保留 session 停机重启,依然可以接受到消息。(2.2.9开始支持)
timeout: 5 # 超时时间,单位:秒,默认:5秒
reconnect: true # 是否重连,默认:true
re-interval: 5000 # 重连时间,默认 5000 毫秒
version: mqtt_3_1_1 # mqtt 协议版本,可选 MQTT_3_1、mqtt_3_1_1、mqtt_5,默认:mqtt_3_1_1
read-buffer-size: 8KB # 接收数据的 buffer size,默认:8k
max-bytes-in-message: 10MB # 消息解析最大 bytes 长度,默认:10M
buffer-allocator: heap # 堆内存和堆外内存,默认:堆内存
keep-alive-secs: 60 # keep-alive 时间,单位:秒
clean-session: true # mqtt clean session,默认:true
ssl:
enabled: false # 是否开启 ssl 认证,2.1.0 开始支持双向认证
keystore-path: # 可选参数:ssl 双向认证 keystore 目录,支持 classpath:/ 路径。
keystore-pass: # 可选参数:ssl 双向认证 keystore 密码
truststore-path: # 可选参数:ssl 双向认证 truststore 目录,支持 classpath:/ 路径。
truststore-pass: # 可选参数:ssl 双向认证 truststore 密码
```
注意:**ssl** 存在三种情况
| 服务端开启ssl | 客户端 |
| ---------------------------------------- | --------------------------------------------- |
| ClientAuth 为 NONE(不需要客户端验证) | 仅仅需要开启 ssl 即可不用配置证书 |
| ClientAuth 为 OPTIONAL(与客户端协商) | 需开启 ssl 并且配置 truststore 证书 |
| ClientAuth 为 REQUIRE (必须的客户端验证) | 需开启 ssl 并且配置 truststore、 keystore证书 |
### 2.2 可实现接口(注册成 Spring Bean 即可)
| 接口 | 是否必须 | 说明 |
| --------------------------- |------|--------------------------------|
| IMqttClientConnectListener | 否 | 客户端连接成功监听 |
| IMqttClientGlobalMessageListener | 否 | 全局消息监听,可以监听到所有订阅消息。(2.2.9开始支持) |
### 2.3 客户端上下线监听
使用 Spring event 解耦客户端上下线监听,注意: `1.3.4` 开始支持。会跟自定义的 `IMqttClientConnectListener` 实现冲突,取一即可。
```java
/**
* 示例:客户端连接状态监听
*
* @author L.cm
*/
@Service
public class MqttClientConnectListener {
private static final Logger logger = LoggerFactory.getLogger(MqttClientConnectListener.class);
@Autowired
private MqttClientCreator mqttClientCreator;
@EventListener
public void onConnected(MqttConnectedEvent event) {
logger.info("MqttConnectedEvent:{}", event);
}
@EventListener
public void onDisconnect(MqttDisconnectEvent event) {
// 离线时更新重连时的密码,适用于类似阿里云 mqtt clientId 连接带时间戳的方式
logger.info("MqttDisconnectEvent:{}", event);
// 在断线时更新 clientId、username、password
mqttClientCreator.clientId("newClient" + System.currentTimeMillis())
.username("newUserName")
.password("newPassword");
}
}
```
### 2.4 自定义 java 配置(可选)
```java
@Configuration(proxyBeanMethods = false)
public class MqttClientCustomizerConfiguration {
@Bean
public MqttClientCustomizer mqttClientCustomizer() {
return new MqttClientCustomizer() {
@Override
public void customize(MqttClientCreator creator) {
// 此处可自定义配置 creator,会覆盖 yml 中的配置
System.out.println("----------------MqttServerCustomizer-----------------");
}
};
}
}
```
### 2.5 订阅示例
```java
@Service
public class MqttClientSubscribeListener {
private static final Logger logger = LoggerFactory.getLogger(MqttClientSubscribeListener.class);
@MqttClientSubscribe("/test/#")
public void subQos0(String topic, byte[] payload) {
logger.info("topic:{} payload:{}", topic, new String(payload, StandardCharsets.UTF_8));
}
@MqttClientSubscribe(value = "/qos1/#", qos = MqttQoS.AT_LEAST_ONCE)
public void subQos1(String topic, byte[] payload) {
logger.info("topic:{} payload:{}", topic, new String(payload, StandardCharsets.UTF_8));
}
@MqttClientSubscribe("/sys/${productKey}/${deviceName}/thing/sub/register")
public void thingSubRegister(String topic, byte[] payload) {
// 1.3.8 开始支持,@MqttClientSubscribe 注解支持 ${} 变量替换,会默认替换成 +
// 注意:mica-mqtt 会先从 Spring boot 配置中替换参数 ${},如果存在配置会优先被替换。
logger.info("topic:{} payload:{}", topic, new String(payload, StandardCharsets.UTF_8));
}
}
```
### 2.6 共享订阅 topic 说明
mica-mqtt 支持两种**共享订阅**方式:
1. 共享订阅:订阅前缀 `$queue/`,多个客户端订阅了 `$queue/topic`,发布者发布到 `topic`,则只有一个客户端会接收到消息。
2. 分组订阅:订阅前缀 `$share/<group>/`,组客户端订阅了 `$share/group1/topic`、`$share/group2/topic`..,发布者发布到 `topic`,则消息会发布到每个 **group** 中,但是每个 **group** 中只有一个客户端会接收到消息。
**注意:** 如果发布的 `topic` 以 `/` 开头,例如:`/topic/test`,需要订阅 `$share/group1//topic/test`,另外 mica-mqtt 默认随机消息路由,共享订阅的多个客户端会随机收到消息。
### 2.7 MqttClientTemplate 使用示例
```java
import net.dreamlu.iot.mqtt.spring.client.MqttClientTemplate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
/**
* @author wsq
*/
@Service
public class MainService {
private static final Logger logger = LoggerFactory.getLogger(MainService.class);
@Autowired
private MqttClientTemplate client;
public boolean publish() {
client.publish("/test/client", "mica最牛皮".getBytes(StandardCharsets.UTF_8));
return true;
}
public boolean sub() {
client.subQos0("/test/#", (context, topic, message, payload) -> {
logger.info(topic + '\t' + new String(payload, StandardCharsets.UTF_8));
});
return true;
}
}
```
## 3. 多个 mqtt client 客户端
### 3.1 自定义 MqttClientTemplate bean 2.2.11 开始已简化,老版本建议先升级。
```java
@Configuration
public class OtherMqttClientConfiguration {
@Bean("mqttClientTemplate1")
public MqttClientTemplate mqttClientTemplate1() {
MqttClientCreator mqttClientCreator1 = MqttClient.create()
.ip("mqtt.dreamlu.net")
.username("mica")
.password("mica
没有合适的资源?快使用搜索试试~ 我知道了~
基于 java aio 实现,开源、简单、易用、低延迟、高性能百万级.zip
共291个文件
java:226个
md:17个
xml:13个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 44 浏览量
2024-05-14
06:55:00
上传
评论
收藏 537KB ZIP 举报
温馨提示
java 简单性 Java看起来设计得很像C++,但是为了使语言小和容易熟悉,设计者们把C++语言中许多可用的特征去掉了,这些特征是一般程序员很少使用的。例如,Java不支持goto语句,代之以提供break和continue语句以及异常处理。Java还剔除了C++的操作符过载(overload)和多继承特征,并且不使用主文件,免去了预处理程序。因为Java没有结构,数组和串都是对象,所以不需要指针。Java能够自动处理对象的引用和间接引用,实现自动的无用单元收集,使用户不必为存储管理问题烦恼,能更多的时间和精力花在研发上。 面向对象 Java是一个面向对象的语言。对程序员来说,这意味着要注意其中的数据和操纵数据的方法(method),而不是严格地用过程来思考。在一个面向对象的系统中,类(class)是数据和操作数据的方法的集合。数据和方法一起描述对象(object)的状态和行为。每一对象是其状态和行为的封装。类是按一定体系和层次安排的,使得子类可以从超类继承行为。在这个类层次体系中有一个根类,它是具有一般行为的类。Java程序是用类来组织的。
资源推荐
资源详情
资源评论
收起资源包目录
基于 java aio 实现,开源、简单、易用、低延迟、高性能百万级.zip (291个子文件)
mvnw.cmd 6KB
.editorconfig 364B
.gitignore 569B
mica-mqtt-api.http 2KB
mica-mqtt-api.http 2KB
ISSUE_TEMPLATE 400B
maven-wrapper.jar 50KB
MqttDecoder.java 27KB
DefaultMessageSerializer.java 26KB
MqttEncoder.java 24KB
DefaultMqttServerProcessor.java 22KB
MqttWebServerAioHandler.java 22KB
MqttMessageBuilders.java 21KB
MqttServerCreator.java 18KB
MqttClient.java 18KB
MqttClientCreator.java 17KB
DefaultMqttClientProcessor.java 16KB
MqttWebServer.java 15KB
MqttProperties.java 14KB
InMemoryMqttSessionManager.java 13KB
MqttServer.java 11KB
MqttHttpApi.java 11KB
MqttClientKit.java 9KB
MqttClientTemplate.java 8KB
MqttServerConfiguration.java 7KB
DefaultMqttClientSession.java 7KB
MqttServerAioListener.java 6KB
MqttWsMsgHandler.java 6KB
TopicUtil.java 6KB
MqttServerAioHandler.java 6KB
Message.java 5KB
MqttServerMetrics.java 5KB
MqttClusterMessageListener.java 5KB
IMqttClientSession.java 5KB
MqttClientSubscribeDetector.java 5KB
MavenWrapperDownloader.java 5KB
MqttClientConfiguration.java 5KB
MqttClientProperties.java 5KB
MqttClientAioListener.java 4KB
MqttCodecUtil.java 4KB
AbstractMqttMessageDispatcher.java 4KB
MqttServerProperties.java 4KB
MqttServerKit.java 4KB
MqttConnectReasonCode.java 4KB
MqttWillMessage.java 4KB
UdpCluster.java 4KB
IMqttSessionManager.java 4KB
MqttServerTemplate.java 4KB
TopicUtilTest.java 4KB
MqttMessageInterceptors.java 4KB
TopicFilterType.java 3KB
MqttClientAioHandler.java 3KB
Result.java 3KB
MqttSubscriptionOption.java 3KB
MqttMessageFactory.java 3KB
MqttBrokerServiceImpl.java 3KB
MqttConnectVariableHeader.java 3KB
MqttClientTest.java 3KB
MqttBrokerConfiguration.java 3KB
RedisMqttMessageDownReceiver.java 3KB
Mqtt5ClientTest.java 3KB
RedisMqttMessageStore.java 3KB
MqttHttpRequestHandler.java 3KB
MqttSign.java 3KB
MqttMessage.java 3KB
MqttServerTest.java 3KB
BasicAuthFilter.java 3KB
MqttClientSubscription.java 3KB
MqttServerProcessor.java 3KB
MqttFixedHeader.java 3KB
IMqttMessageInterceptor.java 3KB
MqttSign.java 3KB
RedisMqttMessageExchangeReceiver.java 2KB
MqttConnectPayload.java 2KB
PayloadEncode.java 2KB
MqttBenchmark.java 2KB
MqttPendingPublish.java 2KB
SpringEventMqttConnectStatusListener.java 2KB
IMqttClientProcessor.java 2KB
MqttClientTest.java 2KB
MqttHttpRoutes.java 2KB
MqttClientConnectTestProcessor.java 2KB
MqttClientTest.java 2KB
MqttMessageType.java 2KB
MqttUnsubAckMessage.java 2KB
MqttDisconnectReasonCode.java 2KB
RedisMqttConnectStatusListener.java 2KB
MqttHttpHelper.java 2KB
MqttMessageInterceptor.java 2KB
InMemoryMqttMessageStore.java 2KB
Subscribe.java 2KB
GzipCompression.java 2KB
MqttVersion.java 2KB
MqttSubAckReasonCode.java 2KB
RedisMqttServerManage.java 2KB
MqttSubAckPayload.java 2KB
SpringEventMqttClientConnectListener.java 2KB
AckTimerTask.java 2KB
IMqttServerPublishPermission.java 2KB
SpringEventMqttMessageListener.java 2KB
共 291 条
- 1
- 2
- 3
资源评论
野生的狒狒
- 粉丝: 2626
- 资源: 2164
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功