中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何用代碼實現發送MQTT消息

發布時間:2020-05-29 19:51:45 來源:億速云 閱讀:1005 作者:鴿子 欄目:軟件技術

MQTT協議因低延遲、效率高在工業物聯網領域使用的頻率特別高,前面兩篇文檔分別對MQTT內容和MQTT服務器做了簡單介紹,今天本文從實戰的角度闡述如何用代碼實現發送MQTT消息。


1.引入相關的依賴


<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-integration</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-mqtt</artifactId>
</dependency>


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中進行測試了,輸入消息內容和主題,就可以在相應的頻道發送消息了。如果使用其它的消息客戶端進行測試的話,可以接受到消息

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

日喀则市| 凤城市| 峨山| 池州市| 都江堰市| 澄城县| 芜湖县| 赫章县| 阿城市| 浦江县| 庄河市| 长垣县| 乐陵市| 滦平县| 夹江县| 武宣县| 凤凰县| 台东县| 湟中县| 樟树市| 灌南县| 灵武市| 宜宾市| 漠河县| 东丰县| 西贡区| 渝中区| 教育| 新干县| 弥渡县| 钟祥市| 五河县| 宜城市| 遂溪县| 济南市| 安陆市| 开远市| 明光市| 乐至县| 梁山县| 乌拉特后旗|