消息代理服务器是独立的,因此 Spring boot 不提供 mqtt 代理的实现,只有使用带有 Spring Boot 的消息代理客户端才能连接到您的 MQTT 代理,如 Mosqitto/VerneMq/RabbitMq 等。
根据您的消息代理,您可以直接选择代理特定的客户端库或
你可以使用 spring-integration-mqtt 模块
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-stream</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-mqtt</artifactId>
</dependency>
您可以根据您的要求使用 spring 集成模块配置入站或出站实现,它会给您带来灵活性,因此您可以从一个 mqtt 代理切换到另一个。
内联示例:
@SpringBootApplication
public class MqttJavaApplication {
public static void main(String[] args) {
new SpringApplicationBuilder(MqttJavaApplication.class)
.web(false)
.run(args);
}
@Bean
public IntegrationFlow mqttInbound() {
return IntegrationFlows.from(
new MqttPahoMessageDrivenChannelAdapter("tcp://localhost:1883",
"testClient", "topic1", "topic2");)
.handle(m -> System.out.println(m.getPayload()))
.get();
}
}
外向示例:
@SpringBootApplication
public class MqttJavaApplication {
public static void main(String[] args) {
new SpringApplicationBuilder(MqttJavaApplication.class)
.web(false)
.run(args);
}
@Bean
public IntegrationFlow mqttOutboundFlow() {
return f -> f.handle(new MqttPahoMessageHandler("tcp://host1:1883", "someMqttClient"));
}
}
您可以通过 spring boot integration-mqtt 模块文档了解更多详细信息。