【发布时间】:2019-02-01 06:27:30
【问题描述】:
我是 Spring Boot 的新手,我正在尝试使用 Spring 集成中的示例示例,以便使用 MQTT 进行订阅和发布。我设法将它与 Thingsboard 集成,并且下面代码中的记录器能够接收来自 Thingsboard 的发布消息。
public static void main(String[] args) {
SpringApplication.run(MqttTest.class);
}
@Bean
public MqttPahoClientFactory mqttClientFactory() {
DefaultMqttPahoClientFactory factory = new DefaultMqttPahoClientFactory();
MqttConnectOptions options = new MqttConnectOptions();
options.setServerURIs(new String[] { "URI HERE" });
options.setUserName("ACCESS TOKEN HERE");
factory.setConnectionOptions(options);
return factory;
}
// consumer
@Bean
public IntegrationFlow mqttInFlow() {
return IntegrationFlows.from(mqttInbound())
.transform(p -> p)
.handle(logger())
.get();
}
private LoggingHandler logger() {
LoggingHandler loggingHandler = new LoggingHandler("INFO");
loggingHandler.setLoggerName("LoggerBot");
return loggingHandler;
}
@Bean
public MessageProducerSupport mqttInbound() {
MqttPahoMessageDrivenChannelAdapter adapter = new MqttPahoMessageDrivenChannelAdapter("Consumer",
mqttClientFactory(), "v1/devices/me/rpc/request/+");
adapter.setCompletionTimeout(5000);
adapter.setConverter(new DefaultPahoMessageConverter());
adapter.setQos(1);
return adapter;
}
这是控制台输出。我能够接收从 thingsboard 仪表板发送的已发布 json 消息。我想知道是否有一个调用方法来检索 json 消息字符串,以便我可以进一步处理它。谢谢。
2019-02-01 14:06:23.590 INFO 13416 --- [ Call: Consumer] LoggerBot : {"method":"setValue","params":true}
2019-02-01 14:06:24.840 INFO 13416 --- [ Call: Consumer] LoggerBot : {"method":"setValue","params":false}
【问题讨论】:
-
您想在登录后处理消息吗?然后简单地链接另一个处理程序
.handle( (message) -> { handle here }。 -
嗨@Barath,我的目的是从json消息中获取params值,并在另一个类中进一步处理它到其他一些函数
-
有很多方法可以做到这一点。如果您只想使用消息,请使用MessageHandler 并将其与集成流链接起来,或者您可以使用服务激活器。如果您需要任何帮助,请告诉我们。
-
@Barath 我对 Spring Boot 很陌生,所以我希望能得到一些帮助。可以说我想将消息传递给我创建的方法,例如extractParamValue(String message) 提取“params”键的json值
标签: java spring spring-boot mqtt