Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring集成(MQTT):检索已发布消息_Java_Spring_Spring Boot_Mqtt - Fatal编程技术网

Java Spring集成(MQTT):检索已发布消息

Java Spring集成(MQTT):检索已发布消息,java,spring,spring-boot,mqtt,Java,Spring,Spring Boot,Mqtt,我是spring boot新手,正在尝试使用spring集成中的示例,以便使用MQTT订阅和发布。我设法将其与Thingsboard集成,下面代码中的记录器能够接收Thingsboard发布的消息 public static void main(String[] args) { SpringApplication.run(MqttTest.class); } @Bean public MqttPahoClientFactory mqttClientFactory() { Def

我是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}

要处理已发布的消息,请向流订阅消息句柄以使用消息

MessageHandler

    @Bean
    public IntegrationFlow mqttInFlow() {
        return IntegrationFlows.from(mqttInbound())
                .transform(p -> p)
                .handle( mess -> {
                   System.out.println("mess"+mess);
                 })            
                .get();
    }


    @Bean
    public IntegrationFlow mqttInFlow() {
        return IntegrationFlows.from(mqttInbound())
                .transform(p -> p)
                .handle("myService","handleHere")
                .handle(logger())
                .get();
    }

@Component
public class MyService {

    @ServiceActivator
    public Object handleHere(@Payload Object mess) {
        System.out.println("payload "+mess);
        return mess;
    }
}

ServiceActivator

    @Bean
    public IntegrationFlow mqttInFlow() {
        return IntegrationFlows.from(mqttInbound())
                .transform(p -> p)
                .handle( mess -> {
                   System.out.println("mess"+mess);
                 })            
                .get();
    }


    @Bean
    public IntegrationFlow mqttInFlow() {
        return IntegrationFlows.from(mqttInbound())
                .transform(p -> p)
                .handle("myService","handleHere")
                .handle(logger())
                .get();
    }

@Component
public class MyService {

    @ServiceActivator
    public Object handleHere(@Payload Object mess) {
        System.out.println("payload "+mess);
        return mess;
    }
}

注意:正如我们所讨论的,有很多不同的方法来实现它。
这只是供您理解的一个示例。

若要处理已发布的消息,请将消息句柄订阅到流以使用消息

MessageHandler

    @Bean
    public IntegrationFlow mqttInFlow() {
        return IntegrationFlows.from(mqttInbound())
                .transform(p -> p)
                .handle( mess -> {
                   System.out.println("mess"+mess);
                 })            
                .get();
    }


    @Bean
    public IntegrationFlow mqttInFlow() {
        return IntegrationFlows.from(mqttInbound())
                .transform(p -> p)
                .handle("myService","handleHere")
                .handle(logger())
                .get();
    }

@Component
public class MyService {

    @ServiceActivator
    public Object handleHere(@Payload Object mess) {
        System.out.println("payload "+mess);
        return mess;
    }
}

ServiceActivator

    @Bean
    public IntegrationFlow mqttInFlow() {
        return IntegrationFlows.from(mqttInbound())
                .transform(p -> p)
                .handle( mess -> {
                   System.out.println("mess"+mess);
                 })            
                .get();
    }


    @Bean
    public IntegrationFlow mqttInFlow() {
        return IntegrationFlows.from(mqttInbound())
                .transform(p -> p)
                .handle("myService","handleHere")
                .handle(logger())
                .get();
    }

@Component
public class MyService {

    @ServiceActivator
    public Object handleHere(@Payload Object mess) {
        System.out.println("payload "+mess);
        return mess;
    }
}

注意:正如我们所讨论的,有很多不同的方法来实现它。
这只是供您理解的一个示例。

您想在登录后处理该消息吗?。然后简单地链接另一个处理程序
.handle((消息)->{handle here}
.Hi@Barath,我的目的是从json消息中获取参数值,并在另一个类中进一步处理到其他一些函数。有很多方法可以做到这一点。如果您只想使用该消息,请使用它并将其与集成流链接,或者您可以使用service activator。如果您需要任何帮助,请告诉我们。@Barath我非常感谢您的帮助w到spring boot,因此我希望在这里得到一些帮助。假设我想将消息传递到我创建的方法中,例如,提取“params”keyLets的json值的extractParamValue(字符串消息)继续在这个聊天室中登录后是否要处理消息?然后简单地链接另一个处理程序
。handle((消息)->{handle here}
.Hi@Barath,我的目的是从json消息中获取参数值,并在另一个类中进一步处理到其他一些函数。有很多方法可以做到这一点。如果您只想使用该消息,请使用它并将其与集成流链接,或者您可以使用service activator。如果您需要任何帮助,请告诉我们。@Barath我非常感谢您的帮助w到spring boot,因此我希望在这里得到一些帮助。假设我想将消息传递到我创建的方法中,例如提取“params”keyLets的json值的extractParamValue(字符串消息)继续在这个聊天室中清晰简单。谢谢。清晰简单。谢谢。