當前位置:首頁 » 數據倉庫 » 阿里雲mqttqos如何配置
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

阿里雲mqttqos如何配置

發布時間: 2022-05-18 04:30:55

⑴ mosquitto.conf 怎麼配置

1、下載mosquitto安裝文件(openssl-1.0.0.tar.gz這里為只讀topicread主題useruserName2這里為可讀可寫topic主題topic#(或+)表示可以讀寫任何主題到這里用戶密碼及許可權已配置完成,訂閱和發布的時候加上用戶名及密碼即可驗證:例如:訂閱client=newMqttClient("tcp://127.0.0.1:1883","java_client0000000000");//回調處理類Mybackcallback=newMyback();client.setCallback(callback);//創建連接可選項信息MqttConnectOptionsconOptions=newMqttConnectOptions();conOptions.setCleanSession(false);conOptions.setUserName("userName");conOptions.setPassword("pwd".toCharArray());//連接brokerclient.connect(conOptions);client.subscribe("主題");}發布:MqttClientclient=newMqttClient("tcp://127.0.0.1:1883","mqttserver-pub");MqttTopictopic=client.getTopic("主題");MqttMessagemessage=newMqttMessage(topic.getName().getBytes());message.setQos(1);MqttConnectOptionsoptions=newMqttConnectOptions();options.setUserName("userName");options.setPassword("pwd".toCharArray());client.connect(options);topic.publish(message);}即可驗證!

⑵ 如何採用mqtt協議實現android消息推送

使用一個代理伺服器message broker,客戶端client連接上這個伺服器,然後告訴伺服器,可以接收哪些類型的消息,同時client也可以發布自己的消息,這些消息根據協議的內容,可以別的client獲取。這樣就實現了消息推送。
消息推送是通過一定的技術標准或協議,在互聯網上通過定期傳送用戶需要的信息來減少信息過載的一項新技術。
如果想要使用消息推送,推薦使用深圳極光的消息推送系統。深圳極光是國內首個為移動應用開發者提供專業、高效的消息推送服務的產品。品牌成長的過程,就是與客戶肩並肩邁向成功的過程。極光將以市場為導向,以創新為動力,以技術為支持,不斷用心努力,為每一位尊貴的客戶提供極致的服務。

⑶ 想問一下,如何用MQTT協議搭建一個物聯網空調的阿里雲伺服器,謝謝

MQTT推薦使用EMQ,來自國人開發的產品

⑷ mqttkit qos1的話怎麼辦

前面的幾個字母
你要解釋清楚
不然我們不好回答

⑸ 如何採用MQTT協議實現android消息推送

MQTT是一項消息傳遞技術,由IBM再2001年發布。

總結一下,機制就是使用一個代理伺服器messagebroker,
客戶端client連接上這個伺服器,然後告訴伺服器說,我可以接收哪些類型的消息,
同時,client也可以發布自己的消息,這些消息根據協議的內容,可以被其他client獲取。
只要手機客戶端,連上伺服器,然後就可以接收和發布消息了,不用自己寫socket什麼了,

低帶寬,低耗電量,代碼量也少,很簡單吧。

package com.pig.test.mqtt;

import com.ibm.mqtt.MqttClient;

import
com.ibm.mqtt.MqttException;
import com.ibm.mqtt.MqttSimpleCallback;

public class SubscribeClient {
private final static String
CONNECTION_STRING = "tcp://192.168.1.60:1883";
private final static boolean
CLEAN_START = true;
private final static short KEEP_ALIVE =
30;//低耗網路,但是又需要及時獲取數據,心跳30s
private final static String CLIENT_ID =
"client1";
private final static String[] TOPICS =
{
"Test/TestTopics/Topic1",
"Test/TestTopics/Topic2",
"Test/TestTopics/Topic3",
"toku/client1"
};
private
final static int[] QOS_VALUES = {0, 0, 2,
0};

//////////////////
private MqttClient mqttClient =
null;

public SubscribeClient(String i){
try {
mqttClient =
new MqttClient(CONNECTION_STRING);
SimpleCallbackHandler
simpleCallbackHandler = new
SimpleCallbackHandler();
mqttClient.registerSimpleHandler(simpleCallbackHandler);//注冊接收消息方法
mqttClient.connect(CLIENT_ID+i,
CLEAN_START, KEEP_ALIVE);
mqttClient.subscribe(TOPICS,
QOS_VALUES);//訂閱接主題

/**
*
完成訂閱後,可以增加心跳,保持網路通暢,也可以發布自己的消息
*/
mqttClient.publish(PUBLISH_TOPICS, "keepalive".getBytes(), QOS_VALUES[0],

true);

} catch (MqttException e) {
// TODO Auto-generated
catch block
e.printStackTrace();
}
}

/**
* 簡單回調函數,處理client接收到的主題消息
* @author pig
*

*/
class SimpleCallbackHandler implements MqttSimpleCallback{

/**
* 當客戶機和broker意外斷開時觸發
* 可以再此處理重新訂閱

*/
@Override
public void connectionLost() throws Exception {
//
TODO Auto-generated method
stub
System.out.println("客戶機和broker已經斷開");
}

/**
* 客戶端訂閱消息後,該方法負責回調接收處理消息
*/
@Override
public void
publishArrived(String topicName, byte[] payload, int Qos, boolean retained)
throws Exception {
// TODO Auto-generated method
stub
System.out.println("訂閱主題: " +
topicName);
System.out.println("消息數據: " + new
String(payload));
System.out.println("消息級別(0,1,2): " +
Qos);
System.out.println("是否是實時發送的消息(false=實時,true=伺服器上保留的最後消息): " +
retained);
}

}

/**
* 高級回調
* @author pig

*
*/
class AdvancedCallbackHandler implements MqttSimpleCallback{

@Override
public void connectionLost() throws Exception {
//
TODO Auto-generated method stub

}

@Override
public void publishArrived(String arg0, byte[] arg1, int
arg2,
boolean arg3) throws Exception {
// TODO Auto-generated
method stub

}

}

/**
* @param args

*/
public static void main(String[] args) {
// TODO Auto-generated
method stub
new SubscribeClient("" + i);

}

}

broker伺服器,MQTT的jar包,記得下載啊,沒有就消息我咯~

到這里,如果完成IBM的MQTT協議實現push消息的實例的,
都會有個問題,好像沒考慮到安全問題,如果客戶端連上來作亂怎麼辦呢?

上面用的broker時rsmb的,mqtt的簡單伺服器。
IBM已經推出了MQTT V3.1版本,已經加入了安全驗證機制,不要怕啦。

⑹ 如何使用 NB-Iot + Arino 通過MQTT協議上傳數據至阿里雲平台

有很多通信模塊只有TCP功能,沒有MQTT功能,比如WIFI,W5500等模塊,還有一些NBIOT模塊,但是又想連接阿里雲物聯網平台,官方提供了操作系統,需要自己移植,很麻煩,比較難看得懂。就在想有沒有一些簡單一定的方法。
心想MQTT是基於TCP的,能否使用TCP轉MQTT?因此就想使用TCP協議然後轉MQTT協議連接阿里雲物聯網平台,經過試驗證明是可以的。

首先我們先分析一下如何登陸接入Onenet平台。

先從它數據格式開始分析。首先我們要從後台取出三個信息,我們以這個為例。

我們把產品ID,設備名稱,設備秘鑰,簡稱三要素 (具體是什麼看你自己的設備)

其實阿里雲物聯網平台的MQTT協議用的就是標準的,不過它加入了自己的認證方式。

MQTT協議需要上傳四個參數,報活時間,clientID,用戶名,密碼。

那麼阿里雲的就在clientID,用戶名,密碼做了手腳。

clientID比較長,按照一定的格式

用戶名:設備名和秘鑰組成

密碼:使用了加密串進行了加密,有sha1或者MD5加密方式

下面我們來介紹一下

MQTT接入都是發十六進制的數據。

么我們發送的時候就是這樣子的一串數據

0x74 0x00 0x04 0x4d 0x51 0x54 0x54 0x04 0xC0 0078 0033 0x61 0x62 0x63 0x7c 0x73 0x65 0x63 0x75 0x72 0x65 0x6d 0x6f 0x64 0x65 0x3d 0x33 0x2c 0x73 0x69 0x67

0x6e 0x6d 0x65 0x74 0x68 0x6f 0x64 0x3d 0x68 0x6d 0x61 0x63 0x73 0x68 0x61 0x31 0x2c 0x74 0x69 0x6d 0x65 0x73 0x74 0x61 0x6d 0x70 0x3d 0x31 0x32 0x30 0x7c 0009

0x35 0x36 0x37 0x38 0x26 0x31 0x32 0x33 0x34 0028 0x32 0x32 0x32 0x37 0x35 0x30 0x44 0x45 0x44 0x46 0x45 0x34 0x46 0x37 0x37 0x34 0x30 0x30 0x32 0x45 0x45 0x38 0x37 0x45 0x45 0x44 0x32 0x39 0x43 0x46 0x44 0x30 0x36 0x33 0x38 0x43 0x35 0x46 0x36 0x36

十六進制解釋

數據長度:0x74

協議數據長度 0x00 0x04

協議類型: 0x4d 0x51 0x54 0x54

協議數據: 0x04 0xC0

keepAlive數據:0078

ClientID長度:0033

ClientID: 0x61 0x62 0x63 0x7c 0x73 0x65 0x63 0x75 0x72 0x65 0x6d 0x6f 0x64 0x65 0x3d 0x33 0x2c 0x73 0x69 0x67 0x6e 0x6d 0x65 0x74 0x68 0x6f 0x64 0x3d 0x68 0x6d 0x61 0x63 0x73 0x68 0x61 0x31 0x2c 0x74 0x69 0x6d 0x65 0x73 0x74 0x61 0x6d 0x70 0x3d 0x31 0x32 0x30 0x7c

用戶名:0009

用戶名: 0x35 0x36 0x37 0x38 0x26 0x31 0x32 0x33 0x34

密碼長度:0028

密碼: 0x32 0x32 0x32 0x37 0x35 0x30 0x44 0x45 0x44 0x46 0x45 0x34 0x46 0x37 0x37 0x34 0x30 0x30 0x32 0x45 0x45 0x38 0x37 0x45 0x45 0x44 0x32 0x39 0x43 0x46 0x44 0x30 0x36 0x33 0x38 0x43 0x35 0x46 0x36 0x36復制代碼上面的就是連接伺服器的連接包

下面呢,我們來做個發布包(上傳數據到伺服器)

0x30 0x1D 0009 2f7379732f706f7374 0x7b 0x70 0x61 0x72 0x61 0x6d 0x73 0x3a 0x7b 0x74 0x65 0x6d 0x70 0x3a 0x31 0x30 0x7d 0x7d

十六進制數據解釋

數據頭:0x30

數據長度:0x1D

TopicName數據長度:0009

TopicName數據內容:2f7379732f706f7374

主體json數據: 0x7b 0x70 0x61 0x72 0x61 0x6d 0x73 0x3a 0x7b 0x74 0x65 0x6d 0x70 0x3a 0x31 0x30 0x7d 0x7d復制代碼以上就是連接阿里雲的數據包格式及發布數據的格式,由於時間問題沒有做訂閱的數據包分析,下一次更新訂閱的內容。

⑺ mosquitto 參數怎麼配置

1.
retry_interval
當QoS為1或2的消息已經被發送後,mosquitto在一段時間內仍未接收到客戶端的反饋消息,將重新發送消息。
默認為20秒
2.sys_interval
每隔一段時間將更新$SYS層級話題的狀態,其中包含著proker的狀態信息。
默認為10秒
3.store_clean_interval
表示間隔多長時間將不再被使用的消息銷毀掉。該值越小,使用的內存就會越小但會需要更多的處理時間。
如果設置為0,表示不被
使用的消息將會及時銷毀。
默認為10秒
4.
pid_file
默認為/var/run/mosquitto.pid
5.user

設置mosquitto啟動用戶
6.max_inflight_messages
表示允許多大數量的QoS為1或2消息被同時進行傳輸處理。這些消息包括正在進行握手的消息和進行重新發送的消息。默認為20個,
如果設置為0,表示不設限制;如果為1,則會確保消息被順序處理。
7.max_queued_messages
表示允許多大數量的QoS為1或2消息在隊列中進行排隊。
默認為100個
8.max_connections
設置最大的連接數
-1表示不限制
9.autosave_interval
表示當開啟持久化設置時,間隔多少時間mosquitto會把內存中的消息保存到磁碟中。默認為30分鍾,當設置為0時,只有mosquitto
關閉的時候才會寫的磁碟中。
10.persistence
設置為true時,所有的連接,訂閱和消息數據都會被保存到磁碟的mosquitto.db文件中。當mosquitto重啟的時候,它會從mosquitto.db文件中
重新載入數據。
11.persistence_location
默認為/var/lib/mosquitto/
12.log_dest

設置日誌的輸出目的地
可以是:stdout
stderr
syslog
topic

如果輸出到某個文件的話可以這樣設置log_dest
file
/var/log/mosquitto.log
要賦予對mosquitto.log文件的讀寫許可權。
13.log_type
日誌類型:debug,
error,
warning,
notice,
information,
subscribe,
unsubscribe,
websockets,
none,
all
14.log_timestamp

是否記錄日誌時間
15.clientid_prefixes
設置只有clientId以某個前綴開始的客戶端才允許連接到mosquitto
broker.
16.allow_plicate_messages
如果一個客戶端訂閱了多個topic時,設置是否允許接收重復的消息。比如訂閱了foo/#

foo/+/baz。
17.autosave_on_changes
If
true,
mosquitto
will
count
the
number
of
subscription
changes,
retained
messages
received
and
queued
messages
and
if
the
total
exceeds
autosave_interval
then
the
in-memory
database
will
be
saved
to
disk.
If
false,
mosquitto
will
save
the
in-memory
database
to
disk
by
treating
autosave_interval
as
a
time
in
seconds
18.persistent_client_expiration
持久訂閱的過期設置。
對於將clean
session設置為false的持久訂閱客戶端,如果在一定的時間段裡面沒有重新連接mosquitto將會被移除。
這並不是一個標準的配置項,因為對於MQTT協議來說所有的持久訂閱應該是永遠有效的。
如:persistent_client_expiration
2mpersistent_client_expiration
14dpersistent_client_expiration
1y
h:小時d:天m:月y:年
19.queue_qos0_messages是否將QoS為0的消息計算到max_queued_messages參數中

更多相關內容可參考資料http://www.viiboo.cn

⑻ 在雲伺服器上搭建了mqtt,為什麼手機連接不上mqtt,要怎麼做才能連接上求求大神幫忙

MQTT協議是廣泛應用的物聯網協議,使用測試MQTT協議需要MQTT的代理。有兩種方法使用MQTT服務,一是租用現成的MQTT伺服器,如阿里雲,網路雲,華為雲等公用的雲平台提供的MQTT服務,使用公用的MQTT伺服器的好處是省事,但如果僅僅用於測試學習還需要注冊帳號,靈活性差些,有的平台還需要付費。另一方法是自己使用開源的MQTT組件來搭建。
MQTT伺服器非常多,如apache的ActiveMQ,emtqqd,HiveMQ,Emitter,Mosquitto,Moquette等等。
這里介紹的是用輕量級的mosquitto開源項目來搭建一個屬於自己的MQTT伺服器。
第一步:需要安裝一台linux主機,這不多介紹,可以使用真機安裝也可以使用虛擬機安裝。如果僅僅是自己測試使用都可以。
第二步:下載mosquitto需要的依賴
sudo apt-get install libssl-devsudo apt-get install uuid-devsudo apt-get install cmake

第三步:下載mosquitto並解壓,現在mosquitto官網最新的版本是1.5.1
tar xzvf mosquitto-1.5.1.tar.gz
第四步:編譯
cd mosquitto-1.5.1/
make
make install
第五步:啟動mosquitto
./mosquitto -v
1535473957: mosquitto version 1.5.1 starting
1535473957: Using default config.
1535473957: Opening ipv4 listen socket on port 1883.
1535473957: Opening ipv6 listen socket on port 1883.
這時候mosquitto就會以默認的參數啟動。如果需要帶配置文件可以修改配置文件mosquitto.conf,
啟動時候加上參數 -c,
./mosquitto -c mosquitto.conf
可以看到,mosquitto監聽的埠為1883.
這時候我們的MQTT伺服器就搭建好了。可找一個mqtt客戶端來測試一下。
先發布一個主題「home/garden/fountain/2」
內容是「hello world」
這時候在mosquitto會列印出下面的log
535474247: New connection from 192.168.1.105 on port 1883.
1535474247: New client connected from 192.168.1.105 as MQTT_FX_Client (c1, k60).
1535474247: No will message specified.
1535474247: Sending CONNACK to MQTT_FX_Client (0, 0)
1535474307: Received PINGREQ from MQTT_FX_Client
1535474307: Sending PINGRESP to MQTT_FX_Client
1535474339: Received PUBLISH from MQTT_FX_Client (d0, q0, r0, m0, 'home/garden/fountain/2', ... (12 bytes))
1535474367: Received PINGREQ from MQTT_FX_Client
1535474367: Sending PINGRESP to MQTT_FX_Client

訂閱主題「home/garden/fountain/2」

可以看到收到了自己發布的消息。
用wireshark抓包
可以看到抓到了一個MQTT的publish的報文。

⑼ 怎麼將消息發送到mqtt代理伺服器

通過Cocoa Pods添加MQTTKit

MQTTKit在github上鏈接https://github.com/NormanLeeIOS/MQTTKit#send-a-message,down下來。

cd到工程目錄,輸入pod install,用xcode打開工程的打開xcworkspace擴展名的文件。

如果不是MQTTKit存在更新的版本,則輸入pod update。

新建一個MQTT的服務請求

NSString *clientID = ...
MQTTClient *client = [[MQTTClient alloc] initWithClientId:clientID];

發送消息,每次發送消息包括目標host和本地MQTT消息.具體MQTT格式消息見代碼。這里Host可以是Server的IP,不需要host表解析。

// connect to the MQTT server
[self.client connectToHost:@"iot.eclipse.org"
completionHandler:^(NSUInteger code) {
if (code == ConnectionAccepted) {
// when the client is connected, send a MQTT message
[self.client publishString:@"Hello, MQTT"
toTopic:@"/MQTTKit/example"
withQos:AtMostOnce
retain:NO
completionHandler:^(int mid) {
NSLog(@"message has been delivered");
}];
}
}];

訂閱主題並接受MQTT格式的消息,這部分在viewdidload中實現。

// define the handler that will be called when MQTT messages are received by the client
[self.client setMessageHandler:^(MQTTMessage *message) {
NSString *text = [message.payloadString];
NSLog(@"received message %@", text);
}];

// connect the MQTT client
[self.client connectToHost:@"iot.eclipse.org"
completionHandler:^(MQTTConnectionReturnCode code) {
if (code == ConnectionAccepted) {
// when the client is connected, subscribe to the topic to receive message.
[self.client subscribe:@"/MQTTKit/example"
withCompletionHandler:nil];
}
}];

斷開連接

[self.client :^(NSUInteger code) {
// The client is disconnected when this completion handler is called
NSLog(@"MQTT client is disconnected");
}];

整個連接建立、發送消息、接受消息、斷開連接都是通過Block的消息機制來實現,因此需要對block有很好地理解。

⑽ windows系統下的mosquitto 怎麼配置

1、 下載mosquitto安裝文件(http://mosquitto.org/files/source/)
2、 找到相應系統的安裝文件安裝,如果不想做任何設置直接在服務里啟動就行。
3、配置文件
如果需要配置一些用戶名、密碼、用戶許可權的參數,則需要修改安裝目錄下的mosquitto.conf文件
下面來說說我用到的一些參數吧:
①用戶密碼: #password_file pwfile.example 後面跟著是用戶密碼配置文件,需寫上絕對路徑並且路徑不帶空格
②創建用戶密碼:打開doc窗口,進入mosquitto安裝目錄,運行mosquitto_passwd -c pwfile.example userName 回車,然後輸入密碼(密碼輸入兩遍後,在該文件里會自動加密密碼)
生成的文件內容格式例如:
userName:$6$Ls7JYQTdn9xagJJ2$/WArx/SAtFRKlvKKnHRCUg==
userName2:$6$bymgVcrtj+7wj8mR$+zmAxnOybqJvrBZboxX1XXPnz/TKZwz9aKQJ72zJym5A=
③如果想再增加用戶,則執行mosquitto_passwd -u pwfile.example userName2即可
④用戶許可權:#acl_file aclfile.example 後面跟著是用戶許可權配置文件,需寫上絕對路徑並且路徑
文件內容格式為:
user userName

/etc/ld.so.conf.d
mosquitto.conf
/usr/local/lib/python2.6/site-packages ( mosquitto.py )
/usr/local/bin
vi /etc/sysconfig/iptables
/usr/local/src/mosquitto-1.1.3/lib/python
make install
ldconfig
不改config.mk裡面的東西
需要安裝
yum -y install patch make gcc gcc-c++ gcc-g77 flex bison

centos5.6下 yum -y install gcc automake autoconf libtool make
yum -y install openssl openssl-devel vim-minimal

http://www.openssl.org/source/openssl-1.0.0.tar.gz
這里為只讀
topic read 主題
user userName2
這里為可讀可寫
topic 主題
topic #(或+)表示可以讀寫任何主題
到這里用戶密碼及許可權已配置完成,訂閱和發布的時候加上用戶名及密碼即可驗證:
例如:訂閱
client = new MqttClient("tcp://127.0.0.1:1883","java_client0000000000");
// 回調處理類
Myback callback = new Myback();
client.setCallback(callback);
// 創建連接可選項信息
MqttConnectOptions conOptions = new MqttConnectOptions();
conOptions.setCleanSession(false);
conOptions.setUserName("userName");
conOptions.setPassword("pwd".toCharArray());
// 連接broker
client.connect(conOptions);
client.subscribe("主題");
}
發布:
MqttClient client = new MqttClient("tcp://127.0.0.1:1883","mqttserver-pub");
MqttTopic topic = client.getTopic("主題");
MqttMessage message = new MqttMessage(topic.getName().getBytes());
message.setQos(1);
MqttConnectOptions options = new MqttConnectOptions();
options.setUserName("userName");
options.setPassword("pwd".toCharArray());
client.connect(options);
topic.publish(message);
}
即可驗證!