【问题标题】:Convert String from mqtt to Object with Spring Integration使用 Spring 集成将字符串从 mqtt 转换为对象
【发布时间】:2021-01-28 16:44:42
【问题描述】:

我想将收到的消息从 mqtt-servet 转换为 java 对象。我找不到提示如何使用弹簧集成工具。这是代码

@Bean
  public MqttPahoClientFactory mqttClientFactory() {
    DefaultMqttPahoClientFactory factory = new DefaultMqttPahoClientFactory();
    MqttConnectOptions options = new MqttConnectOptions();
    
    options.setServerURIs(new String[] 
    { 
      "ssl://"+this.hostname+":"+this.port, 
    }
    );
    options.setUserName(this.username);
    options.setPassword(this.password.toCharArray());
    factory.setConnectionOptions(options);
    return factory;
  }
@Bean
  public MessageProducer inboundSendorData() {
    String clientId = "Java_" + UUID.randomUUID().toString();
    MqttPahoMessageDrivenChannelAdapter adapter = new MqttPahoMessageDrivenChannelAdapter(
      clientId,
      this.mqttClientFactory(),
      "sensordata"
    );
    //DefaultPahoMessageConverter converter = new DefaultPahoMessageConverter();
    //adapter.setConverter(converter);
    adapter.setCompletionTimeout(5000);
    adapter.setConverter(new DefaultPahoMessageConverter());
    adapter.setQos(1);
    adapter.setOutputChannel(mqttInputChannelSensorData());

    return adapter;
  }

  @Bean
  public MessageChannel mqttInputChannelSensorData() {
      return new DirectChannel();
  }

  @Bean
  @ServiceActivator(inputChannel = "mqttInputChannelSensorData")
  public MessageHandler handlerSensorData() {
    return new MqttSubSensorHandler();
  }

这是处理程序的代码

public class MqttSubSensorHandler implements MessageHandler {
  @Autowired
  private SensorRepository sensorRepository;

  @Autowired
  public MqttSubSensorHandler(SensorRepository sensorRepository) {
    this.sensorRepository = sensorRepository;
  }

  public MqttSubSensorHandler() {
  }

  public void handleResponse(Message<?> message) {

  }

  @Override
  public void handleMessage(Message<?> message) throws MessagingException {
    System.out.println(message.getPayload());
    
  }
} 

我认为这是可能的,因为 Spring JMS 是可能的。建立 JMS 连接的方法也非常相似。

【问题讨论】:

    标签: spring jackson spring-integration mqtt


    【解决方案1】:

    DefaultPahoMessageConverter 可以与任何BytesMessageMapper 一起提供,其中之一是ConvertingBytesMessageMapper。反过来,您可以提供任何 MessageConverter impl,例如MappingJackson2MessageConverter.

    【讨论】:

    • 谢谢我已经试过了。但这对我没有用。出于某种原因,ConvertingBytesMessageMapper 没有收到发给fromMessage()MappingJackson2MessageConverter 的消息。目前,我最终将MessageHandler 中的消息转换为杰克逊的ObjectMapper
    • 嗯?我们正在谈论从 MQTT 到 POJO,所以必须是 MappingJackson2MessageConverter.toMessage()。如果您调试并确认为什么这对您不起作用,那就太好了......
    猜你喜欢
    • 2019-06-03
    • 1970-01-01
    • 1970-01-01
    • 2018-05-04
    • 2013-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-14
    相关资源
    最近更新 更多