如何用代码实现发送MQTT消息
admin
2023-02-20 05:20:03
0

MQTT协议因低延迟、效率高在工业物联网领域使用的频率特别高,前面两篇文档分别对MQTT内容和MQTT服务器做了简单介绍,今天本文从实战的角度阐述如何用代码实现发送MQTT消息。


1.引入相关的依赖



org.springframework.boot
spring-boot-starter-web


org.springframework.boot
spring-boot-starter-integration


org.springframework.integration
spring-integration-mqtt


2.在application.yml配置MQTT服务器信息


server:
  port: 9090
mqtt:
  host: tcp://127.0.0.1:1883
  clientinid: mqttinId
  clientoutid: mqttoutid
  topic: virus
  qoslevel: 1
  #MQTT 认证
  username:  xxx
  password: yyy
  # 10s
  timeout: 10000
  #20s
  keepalive: 20


3.配置MQTT消息推送配置


@Configuration
@IntegrationComponentScan
public class MqttSenderConfig {
    @Value("${mqtt.username}")
    private String username;
    @Value("${mqtt.password}")
    private String password;
    @Value("${mqtt.host}")
    private String hostUrl;
    @Value("${mqtt.clientinid}")
    private String clientId;
    @Value("${mqtt.topic}")
    private String defaultTopic;
    @Value("${mqtt.timeout}")
    private int completionTimeout;
    @Bean
    public MqttConnectOptions getMqttConnectOptions(){
        MqttConnectOptions mqttConnectOptions=new MqttConnectOptions();
        mqttConnectOptions.setCleanSession(true);
        mqttConnectOptions.setConnectionTimeout(10);
        mqttConnectOptions.setKeepAliveInterval(90);
        mqttConnectOptions.setAutomaticReconnect(true);
        mqttConnectOptions.setUserName(username);
        mqttConnectOptions.setPassword(password.toCharArray());
        mqttConnectOptions.setServerURIs(new String[]{hostUrl});
        mqttConnectOptions.setKeepAliveInterval(2);
        return mqttConnectOptions;
    }
    @Bean
    public MqttPahoClientFactory mqttClientFactory() {
        DefaultMqttPahoClientFactory factory = new DefaultMqttPahoClientFactory();
        factory.setConnectionOptions(getMqttConnectOptions());
        return factory;
    }
    @Bean
    @ServiceActivator(inputChannel = "mqttOutboundChannel")
    public MessageHandler mqttOutbound() {
        MqttPahoMessageHandler messageHandler =  new MqttPahoMessageHandler(clientId, mqttClientFactory());
        messageHandler.setAsync(true);
        messageHandler.setDefaultTopic(defaultTopic);
        return messageHandler;
    }
    @Bean
    public MessageChannel mqttOutboundChannel() {
        return new DirectChannel();
    }
}


4.MQTT消息推送接口


@MessagingGateway(defaultRequestChannel = "mqttOutboundChannel")
public interface MqttGateway {
    void sendToMqtt(String data, @Header(MqttHeaders.TOPIC) String topic);
}


5.MQTT消息推送API


@RestController
public class MessageController {
    @Autowired
    MqttGateway mqttGateway;
    @RequestMapping("/sendMqttMessage")
    public String sendMqttMessage(String message, String topic) {
        mqttGateway.sendToMqtt(message, topic);
        return "ok";
    }
}


测试


接下来就可以在POSTMAN中进行测试了,输入消息内容和主题,就可以在相应的频道发送消息了。如果使用其它的消息客户端进行测试的话,可以接受到消息

相关内容

热门资讯

我来教教您“云圈丰城麻将.是不... 您好:云圈丰城麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【4282891】很多玩家在这款...
玩家攻略科普“中至上饶麻将.到... 家人们!今天小编来为大家解答中至上饶麻将透视挂怎么安装这个问题咨询软件客服徽9784099的挂在哪里...
玩家攻略科普“聚友互娱.到底有... 网上科普关于“聚友互娱有没有挂”话题很是火热,小编也是针对聚友互娱作*弊开挂的方法以及开挂对应的知识...
资本回归理性,无人物流车赛道融... 白犀牛新一轮融资刚宣布不久,菜鸟拟入股九识智能的消息日前被媒体爆出。表面上看,无人物流车赛道今年成为...
终于了解“杭州麻将.怎么开挂?... 家人们!今天小编来为大家解答杭州麻将透视挂怎么安装这个问题咨询软件客服徽4282891的挂在哪里买很...
最新引进“新版wepoker.... 家人们!今天小编来为大家解答新版wepoker透视挂怎么安装这个问题咨询软件客服徽4282891的挂...
【第一财经】“欢乐贰柒拾.怎么... 有 亲,根据资深记者爆料欢乐贰柒拾是可以开挂的,确实有挂(咨询软件无需打...
终于了解“喜扣游戏.怎么开挂?... 家人们!今天小编来为大家解答喜扣游戏透视挂怎么安装这个问题咨询软件客服徽9784099的挂在哪里买很...
玩家分享攻略“美味冰淇淋.到底... 家人们!今天小编来为大家解答美味冰淇淋透视挂怎么安装这个问题咨询软件客服徽4282891的挂在哪里买...
玩家最新攻略“大富豪app.真... 您好:大富豪app这款游戏可以开挂,确实是有挂的,需要了解加客服微信【9752949】很多玩家在这款...