1 简介
Spring Integration 提供入站(inbound)和出站(outbound)通道适配器,以支持MQTT消息协议。使用这两适配器,需要加入依赖:
<!-- Maven --> <dependency> <groupId>org.springframework.integration</groupId> <artifactId>spring-integration-mqtt</artifactId> <version>5.2.1.RELEASE</version> </dependency>
// Gradle compile "org.springframework.integration:spring-integration-mqtt:5.2.1.RELEASE"
当前的MQTT Integration实现使用的是Eclipse Paho MQTT客户端库。两个适配器的配置都是使用DefaultMqttPahoClientFactory实现的。有关配置选项的更多信息,请参阅Eclipse Paho MQTT文档定义。
建议配置MqttConnectOptions对象并将其注入工厂(factory),而不是在工厂本身里设置(不推荐使用)MQTT连接选项。
2 Inbound(消息驱动)通道适配器
入站通道适配器由MqttPahoMessageDrivenChannelAdapter实现。常用的配置项有:
- 客户端ID
- MQTT Broker URL
- 待订阅的主题列表
- 带订阅的主题QoS值列表
- MqttMessageConverter(可选)。默认情况下,默认的DefaultPaHomeMessageConverter生成一条带有字符串有效负载的消息,其头部内容如下: mqtt_topic: 接收消息的主题 mqtt_duplicate: 如果消息是重复的,则为true mqtt_qos: 服务质量,你可以将DefaultPahoMessageConverter声明为并将payloadAsBytes属性设置为true,从而将DefaultPahoMessageConverter返回有效负载中的原始byte[]
- 客户端工厂
- 发送超时。仅当通道可能阻塞(例如当前已满的有界队列通道)时才适用。
- 错误通道。下游异常将以错误消息的形式发送到此通道(如果提供)。有效负载是包含失败消息和原因的MessagingException。
- 恢复间隔。它控制适配器在发生故障后尝试重新连接的时间间隔。默认为10000毫秒(10秒)。
从Spring 4.1版开始,可以省略URL。相反,你可以在DefaultMqttPahoClientFactory的server URIs属性中提供服务器uri。例如,这样做允许连接到高可用(HA)集群。
从Spring 4.2.2开始,当适配器成功订阅到主题了,MqttSubscribedEvent事件就会被触发。当连接失败或者订阅失败,MqttConnectionFailedEvent事件会被触发。这两个事件都能够被一个Bean通过实现ApplicationListener而接收到。另外,名为recoveryInterval的新属性控制适配器在失败后尝试重新连接的时间间隔。默认为100