当前位置: 首页 > 知识库问答 >
问题:

spring集成-MQTT型转换器问题

百里意智
2023-03-14

尝试从Web运行示例spring-integration mqtt项目。我已经在根上下文中导入了mqtt-context。部署war之后,我将运行runmqtt.java文件。但会遇到以下问题。如果在独立模式下运行,相同的文件不会产生任何问题。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
           http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context.xsd">
    <!-- This file will be the root context file for web app. All other context 
        will be imported here -->
    <!-- Security context . Now the spring security with basic authentication 
        implemented. OAuth2 will be implemented -->
    <import resource="security-config.xml" />
    <!-- rest service call context -->
    <import
        resource="classpath:META-INF/spring/integration/rest/applicationContext-http-int.xml" />
    <!-- Sftp context -->
    <import
        resource="classpath:META-INF/spring/integration/sftp/SftpInboundReceive-context.xml" />
    <import
        resource="classpath:META-INF/spring/integration/sftp/SftpOutboundTransfer-poll.xml" />
    <!-- mqtt context -->
    <import resource="classpath:META-INF/spring/integration/mqtt/mqtt-context.xml" />
    <!-- Mail Context -->
    <import
        resource="classpath:META-INF/spring/integration/mail/mail-imap-idle-config.xml" />
    <import
        resource="classpath:META-INF/spring/integration/mail/mail-pop3-config.xml" />


    <!--Component scan base package -->
    <context:component-scan base-package="com.iux.ieg" />
    <!-- All the property configuration moved to parent context file to solve 
        the propert not found exception -->
    <!-- <context:property-placeholder order="1" location="classpath:/sftpuser.properties, 
        classpath:/sftpfile.properties,classpath:/resthttp.properties" ignore-unresolvable="true"/> -->
    <context:property-placeholder order="0"
        location="classpath:/sftpfile.properties" ignore-unresolvable="true" />
    <context:property-placeholder order="1"
        location="classpath:/sftpuser.properties" ignore-unresolvable="true" />
    <context:property-placeholder order="2"
        location="classpath:/resthttp.properties" ignore-unresolvable="true" />
    <context:property-placeholder order="3"
        location="classpath:/mqtt.properties" ignore-unresolvable="true" />
    <context:property-placeholder order="4"
        location="classpath:/mail.properties" />

</beans>

mqtt-context.xml

http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration-4.1.xsd http://www.springframework.org/schema/beans/spring-beans-4.1.xsd http://www.springframework.org/schema/integration/mqtt http://www.springframework.org/schema/integration-mqtt/spring-integration-mqtt-4.1.xsd http://www.springframework.org/schema/context/spring-context

<context:property-placeholder 
    location="classpath:/mqtt.properties" ignore-unresolvable="true" />


<!-- intercept and log every message -->
<int:logging-channel-adapter id="logger"
    level="ERROR" />
<int:wire-tap channel="logger" />
<!-- Mark the auto-startup="true" for starting MqttPahoMessageDrivenChannelAdapter from configuration  -->
<int-mqtt:message-driven-channel-adapter
    id="startCaseAdapter" client-id="clientId" url="${mqtt.brokerurl}"
    topics="topic" channel="startCase" auto-startup="true" />
<int:channel id="startCase" />


<int:service-activator id="startCaseService"
    input-channel="startCase" ref="mqttCaseService" method="startCase" />

<bean id="mqttCaseService" class="com.iux.ieg.mqtt.MqttCaseService" />

MQTTCaseService.java

import org.apache.log4j.Logger;


public class MqttCaseService {
    private static Logger logger = Logger.getLogger(MqttCaseService.class);

    public void startCase(String message){
        logger.debug(message);
    }

}

runmqtt.java

public class RunMqtt {
    private static Logger logger = Logger.getLogger(RunMqtt.class);
    //@Test
    public void test() throws MqttException{
        ConfigurableApplicationContext context =
                new ClassPathXmlApplicationContext("/META-INF/spring/integration/mqtt/mqtt-context.xml");
        logger.debug(context);
        //MqttPahoMessageDrivenChannelAdapter startCaseAdapter = (MqttPahoMessageDrivenChannelAdapter)context.getBean("startCaseAdapter");
        //Uncomment to stop the adapter manually from program
        //startCaseAdapter.start();
        //DefaultMqttPahoClientFactory mqttClient = (DefaultMqttPahoClientFactory)ac.getBean("clientFactory");
        DefaultMqttPahoClientFactory mqttClient = new DefaultMqttPahoClientFactory();

        MqttClient mclient = mqttClient.getClientInstance("tcp://*messagebrokerurl*:1883", "JavaSample");
        String data = "This is what I am sending in 2nd attempt";
        MqttMessage mm = new MqttMessage(data.getBytes());
        mm.setQos(1);
        mclient.connect();
        mclient.publish("topic",mm);
        mclient.disconnect();
        //Uncomment to stop the adapter manually from program
        //startCaseAdapter.stop();
    }


    public static void main(String[] args)  {
        try {
            new RunMqtt().test();
        } catch (MqttException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

共有1个答案

越风史
2023-03-14

示例spring-integration mqtt项目

哪个样本?

请显示您的配置。

<bean id="clientFactory" class="org.springframework.integration.mqtt.core.DefaultMqttPahoClientFactory" />
 类似资料:
  • 我正在尝试实现Spring与MQTT的集成。我正在使用Mosquitto作为MQTT经纪人。并在下面的链接中提供了文档的引用。我已经创建了一个项目并添加了所有所需的jar文件。当我执行时。 当我通过MQTT代理发布消息时,我收到以下错误。 添加@SpringBootApplication注释后,请找到下面的堆栈跟踪

  • About MQTT是IoT(Internet of Things)应用程序中经常使用的轻量经发布/订阅协议。 Further information can be found at http://mqtt.org. The HiveMQ website has a great series on MQTT Essentials. 功能点如下: 完整的MQTT支持 (e.g. last will,

  • 在我的用例中,最简单的集成组件安排是什么: 接收来自多个来源和多种格式的消息(所有消息都是JSON序列化对象)。 将消息存储在缓冲区中最多10秒(聚合) 通过不同的类属性getter(例如class1.someId(),class2.otherId(),...) 释放所有分组的消息并转换为新的聚合消息。 到目前为止(第1点和第2点),我正在使用聚合器,但不知道3)处的问题是否有现成的解决方案或者我

  • 主要内容:内置的类型转换器,自定义类型转换器,示例我想您一定十分诧异,为什么仅仅通过一些注解,控制器方法就能够得到各种类型的参数,其实这都要归功于 Spring MVC 的类型转换机制。 Spring 提供了一种 Converter(类型转换器)的类型转换工具。在 Spring MVC 中,它的作用是在控制器方法对请求进行处理前,先获取到请求发送过来的参数,并将其转换为控制器方法指定的数据类型,然后再将转换后的参数值传递给控制器方法的形参,这样后

  • 我有一个JMS侦听器,它正在从另一个应用程序接收字节消息。当前应用程序正在使用Spring JMS。我想在这里介绍spring集成。因此,我添加了以下示例代码来侦听消息。 然后我得到如下类强制转换异常: 我得到了一个ByteMessage,但我没有找到一个关于如何提取带有字节数组有效负载的ByteMessage的好例子。我是Spring集成世界的新手。

  • 问题:在聚合状态下,Axon SpringBoot应用程序类型为,而PostgreSQL数据库列类型为。在持久化时,成功地存储了create-commands-identifier。当发送update-command时,警告将上升,并且命令不会传递给聚合处理程序,因为需要字符串类型,如下Axon所述: IllegalArgumentException:为类....MyAggregate提供了错误类