MQTT再學習 -- 搭建MQTT服務器及測試(轉)

https://blog.csdn.net/qq_29350001/article/details/76680646















MQTT再學習 -- 搭建MQTT服務器及測試

2017年08月04日 13:56:07?聚優致成?閱讀數:63793

?版權聲明:本文為博主原創文章,未經博主允許不得轉載。https://blog.csdn.net/qq_29350001/article/details/76680646

最近在搞 PM2.5 采集,需要用到 MQTT 傳輸協議。協議部分看了幾天的,講的七七八八。本身在 intel 上有 寫好的MQTT 的源碼,現在的工作其實也就是移植到單片機上或者DM368板卡上。不過,對于之前沒有接觸過的我來說,還是從頭開始,搭建服務器及測試一下為好。

MQTT服務器有好多種,參看:Servers/Brokers

Apache-Apollo:一個代理服務器,在ActiveMQ基礎上發展而來,可以支持STOMP、AMQP、MQTT、Openwire、SSL和WebSockets等多種協議,并且Apollo提供后臺管理頁面,方便開發者管理和調試。

EMQ:EMQ 2.0,號稱百萬級開源MQTT消息服務器,基于Erlang/OTP語言平臺開發,支持大規模連接和分布式集群,發布訂閱模式的開源MQTT消息服務器。

HiveMQ:一個企業級的MQTT代理,主要用于企業和新興的機器到機器M2M通訊和內部傳輸,最大程度的滿足可伸縮性、易管理和安全特性,提供免費的個人版。HiveMQ提供了開源的插件開發包。

Mosquitto:一款實現了消息推送協議MQTT v3.1的開源消息代理軟件,提供輕量級的、支持可發布/可訂閱的消息推送模式。

這篇文章我們只講兩種,一種是?Mosquitto、另一種是 Apollo,以及它們在 linux 下和 Windows 下的安裝。

我們本篇都會來一一做講解。

參看:【MQTT】在Ubuntu下搭建MQTT服務器

一、Ubuntu 下 MQTT 服務器搭建之Apollo

(1) 首先要搞清楚什么是 Apollo?

參看:ActiveMQ's next generation of messaging

ActiveMQ Apollo?is a faster, more reliable, easier to maintain messaging broker built from the foundations of the original?ActiveMQ. It accomplishes this using a radically different threading and message dispatching?architecture. Like ActiveMQ, Apollo is a multi-protocol broker and supports STOMP, AMQP, MQTT, Openwire, SSL, and WebSockets.

翻譯一下:

ActiveMQ Apollo是從原始ActiveMQ的基礎構建的更快,更可靠,更易于維護的消息代理。 它使用完全不同的線程和消息調度架構來實現。 像ActiveMQ一樣,Apollo是一個多協議代理,支持STOMP,AMQP,MQTT,Openwire,SSL和WebSockets。

看到沒,有支持 MQTT ?

下載:Download it today!

(2)安裝

先解壓

# sudo tar -zxvf apache-apollo-1.7.1-unix-distro.tar.gz

查看 bin/apollp.cmd

# cat apollo.cmd

@REM

@REM Licensed to the Apache Software Foundation (ASF) under one or more

@REM contributor license agreements.? See the NOTICE file distributed with

@REM this work for additional information regarding copyright ownership.

@REM The ASF licenses this file to You under the Apache License, Version 2.0

@REM (the "License"); you may not use this file except in compliance with

@REM the License.? You may obtain a copy of the License at

@REM

@REM? ? ? http://www.apache.org/licenses/LICENSE-2.0

@REM

@REM Unless required by applicable law or agreed to in writing, software

@REM distributed under the License is distributed on an "AS IS" BASIS,

@REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

@REM See the License for the specific language governing permissions and

@REM limitations under the License.

@REM

@echo off

setlocal

if NOT "%APOLLO_HOME%"=="" goto CHECK_APOLLO_HOME

PUSHD .

CD %~dp0..

set APOLLO_HOME=%CD%

POPD

:CHECK_APOLLO_HOME

if exist "%APOLLO_HOME%\bin\apollo.cmd" goto CHECK_JAVA

:NO_HOME

echo APOLLO_HOME environment variable is set incorrectly. Please set APOLLO_HOME.

goto END

:CHECK_JAVA

set _JAVACMD=%JAVACMD%

if "%JAVA_HOME%" == "" goto NO_JAVA_HOME

if not exist "%JAVA_HOME%\bin\java.exe" goto NO_JAVA_HOME

if "%_JAVACMD%" == "" set _JAVACMD=%JAVA_HOME%\bin\java.exe

goto RUN_JAVA

:NO_JAVA_HOME

if "%_JAVACMD%" == "" set _JAVACMD=java.exe

echo.

echo Warning: JAVA_HOME environment variable is not set.

echo.

:RUN_JAVA

set CLASSPATH=%APOLLO_HOME%\lib\apollo-boot.jar

set BOOTDIRS=%APOLLO_HOME%\lib

if NOT "x%APOLLO_BASE%" == "x" set BOOTDIRS=%APOLLO_BASE%\lib;%BOOTDIRS%

if "%JVM_FLAGS%" == "" set JVM_FLAGS=-server -Xmx1G -XX:-UseBiasedLocking

if "%APOLLO_ASSERTIONS%"=="false" goto noAPOLLO_ASSERTIONS

? set JVM_FLAGS=-ea %JVM_FLAGS%

:noAPOLLO_ASSERTIONS

if "x%APOLLO_OPTS%" == "x" goto noAPOLLO_OPTS

? set JVM_FLAGS=%JVM_FLAGS% %APOLLO_OPTS%

:noAPOLLO_OPTS

if "x%APOLLO_DEBUG%" == "x" goto noDEBUG

? set JVM_FLAGS=%JVM_FLAGS% -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005

:noDEBUG

if "x%APOLLO_PROFILE%" == "x" goto noPROFILE

? set JVM_FLAGS=-agentlib:yjpagent %JVM_FLAGS%

:noPROFILE

if "%JMX_OPTS%" == "" set JMX_OPTS=-Dcom.sun.management.jmxremote

rem set JMX_OPTS=-Dcom.sun.management.jmxremote.port=1099 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false

set JVM_FLAGS=%JVM_FLAGS% %JMX_OPTS%

set JVM_FLAGS=%JVM_FLAGS% -Dapollo.home="%APOLLO_HOME%"

if NOT "x%APOLLO_BASE%" == "x" set JVM_FLAGS=%JVM_FLAGS% -Dapollo.base="%APOLLO_BASE%"

set JVM_FLAGS=%JVM_FLAGS% -classpath "%CLASSPATH%"

"%_JAVACMD%" %JVM_FLAGS% org.apache.activemq.apollo.boot.Apollo "%BOOTDIRS%" org.apache.activemq.apollo.cli.Apollo %*

:END

endlocal

GOTO :EOF

:EOF

由于搭建 Apollo 環境變量需要有 JAVA_HOME,這個時候需要安裝 JDK

安裝 JDK

下載:Java SE Development Kit 8 Downloads

從上圖可以看到,這個Linux版本有 x86 和 x64 等版本。如果查看你的 Ubuntu 是什么版本呢?

參看:如何判斷Linux是32位還是64位

方法一:getconf LONG_BIT

在linux終端輸入getconf LONG_BIT?命令

如果是32位機器,則結果為32

[root@localhost ~]# getconf LONG_BIT?

32

如果是64位機器,則結果為64

[root@localhost ~]# getconf LONG_BIT?

64

方法二:uname -a

如果是64位機器,會輸出x86_64

[chenzhou@testweb01 ~]$ uname -a?

Linux testweb012.6.18-308.4.1.el5 #1SMP Tue Apr1717:08:00EDT2012x86_64 x86_64 x86_64 GNU/Linux

可以看到,uname-a執行后的結果中輸出了x86_64,說明該機器是64位的,否則代表該機器是32位的

[root@localhost ~]# uname -a?

Linux localhost.localdomain2.6.18-164.el5 #1SMP Tue Aug1815:51:54EDT2009i686 i686 i386 GNU/Linux

方法三:file /sbin/init 或者 file /bin/ls

示例:32位機器

file /sbin/init

[root@localhost ~]# file /sbin/init?

/sbin/init: ELF32-bit LSB executable, Intel80386, version1(SYSV),forGNU/Linux2.6.9,dynamicallylinked(uses shared libs),forGNU/Linux 2.6.9, stripped

file /bin/ls

[root@localhost ~]# file /bin/ls?

/bin/ls: ELF32-bit LSB executable, Intel80386, version1(SYSV),forGNU/Linux2.6.9,dynamicallylinked(uses shared libs),forGNU/Linux 2.6.9, stripped

示例:64位機器

file /sbin/init

[chenzhou@testweb01 ~]$ file /sbin/init?

/sbin/init: ELF64-bit LSB executable, AMD x86-64, version1(SYSV),forGNU/Linux2.6.9,dynamicallylinked(uses shared libs),forGNU/Linux 2.6.9, stripped

file /bin/ls

[chenzhou@testweb01 ~]$ file /bin/ls?

/bin/ls: ELF64-bit LSB executable, AMD x86-64, version1(SYSV),forGNU/Linux2.6.9,dynamicallylinked(uses shared libs),forGNU/Linux 2.6.9, stripped

可以通過命令結果中的64-bit或者32-bit來判斷該機器是64位還是32位

最后如下經過測試,我的Ubuntu是32位的,下載 ?jdk-8u144-linux-i586.tar.gz

# uname -a

Linux ubuntu3.2.0-23-generic-pae #36-Ubuntu SMP Tue Apr1022:19:09UTC2012i686 i686 i386 GNU/Linux

#getconf LONG_BIT?

32

通過終端在/usr/local目錄下新建java文件夾,命令行:

sudo mkdir /usr/local/java

然后進入java目錄,命令行:

cd /usr/local/java

解壓壓縮包:

sudo tar xvf jdk-8u25-linux-x64.tar.gz

設置jdk環境變量:

# gedit /etc/profile

在最后添加下面代碼:

exportJAVA_HOME=/usr/local/java/jdk1.8.0_144

exportJRE_HOME=${JAVA_HOME}/jre

exportCLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib

exportPATH=${JAVA_HOME}/bin:$PATH

使用 source /etc/profile 使它立即生效

檢驗是否安裝成功:

# java -version

java version"1.8.0_144"

Java(TM)SE RuntimeEnvironment(build1.8.0_144-b01)

JavaHotSpot(TM)ClientVM(build25.144-b01, mixed mode)

配置 Apollo

參看:Getting Started Guide

進入apache-apollo-1.7.1/bin目錄

cd apache-apollo-1.7.1/bin/

輸入 ./apollo 可以查看幫助

# ./apollo

usage: apollo [--log] []

The most commonly used apollo commands are:

create? ? ? ? ? creates anewbroker instance

? ? disk-benchmark? Benchmarks your disk's speed

? ? help? ? ? ? ? ? Display help information

? ? version? ? ? ? ? Displays the broker version

See'apollo help <command>'formore information on a specific command.

創建一個Broker示例:/apollo create mybroker,MQTT服務器都是叫Broker。

# ./apollo create mybroker

Creating apollo instance at: mybroker

Generating ssl keystore...

You can now start the broker by executing:?

"/home/tarena/project/MQTT/apache-apollo-1.7.1/bin/mybroker/bin/apollo-broker"run

Or you can setup the broker as system serviceandrun it in the background:

sudo ln -s"/home/tarena/project/MQTT/apache-apollo-1.7.1/bin/mybroker/bin/apollo-broker-service"/etc/init.d/

? /etc/init.d/apollo-broker-service start

后面會有提示怎么啟動服務器,以及創建一個service。

啟動Apollo :

# ./mybroker/bin/apollo-broker run

? ? _____? ? ? ? ? ? ? ? .__? .__

? /? _? \ ______? ____ |? | |? |? ____

? /? /_\? \\____ \ /? _ \|? | |? |? /? _ \

/? ? |? ? \? |_> >? <_> )? |_|? |_(? <_> )

\____|__? /? __/ \____/|____/____/\____/

\/|__|ApacheApollo(1.7.1)

Loading configuration file '/home/tarena/project/MQTT/apache-apollo-1.7.1/bin/mybroker/etc/apollo.xml'.

INFO? | OS? ? : Linux 3.2.0-23-generic-pae(Ubuntu12.04LTS)

INFO? | JVM? ? : JavaHotSpot(TM)Server VM 1.8.0_144(Oracle Corporation)

INFO? | Apollo : 1.7.1(at: /home/tarena/project/MQTT/apache-apollo-1.7.1)

INFO? | OS is restricting the open file limit to: 100000

INFO? | Accepting connections at: tcp://0.0.0.0:61613

INFO? | Accepting connections at: tls://0.0.0.0:61614

INFO? | Starting store: leveldb store at /home/tarena/project/MQTT/apache-apollo-1.7.1/bin/mybroker/data

INFO? | Accepting connections at: ws://0.0.0.0:61623/

INFO? | Accepting connections at: wss://0.0.0.0:61624/

INFO? | Administration interface available at: https://127.0.0.1:61681/

INFO? | Administration interface available at: http://127.0.0.1:61680/

之后查看打印信息即可知道MQTT要連接的端口和管理頁面端口。

然后打開Ubuntu瀏覽器,輸入?http://127.0.0.1:61680/ 或 https://127.0.0.1:61681/

即可進入 Apollo Console 窗口。

默認的登錄id和密碼是?admin?和?password?

二、Windows 下 MQTT 服務器搭建之Apollo

(1)下載 Apollo

下載:Download it today!

(2)安裝

解壓得到如下文件。

這里需要注意了,解壓?apache-apollo-1.7.1 所在文件夾名稱不能有中文或者空格,后面會提到出現什么錯誤。

進入?apache-apollo-1.7.1-windows-distro\apache-apollo-1.7.1\bin 文件夾

按住 shift鍵選擇 apollo.cmd 再點擊右鍵。選擇 在此處打開命令窗口。

然后在 cmd 窗口執行 apollo.cmd。然后就可以看到發生錯誤。上面Ubuntu下安裝時已經提到,還需要安裝 JDK。

(3)安裝 JDK

下載:Java SE Development Kit 8 Downloads

Windows 系統是多少位的,這個應該很清楚吧。查看 我的電腦->屬性,查看有關計算機的基本信息。

我的電腦為 win 10 64位,下載并安裝 jdk-8u144-windows-x64.exe

然后配置 JDK 環境變量

我的電腦->屬性->高級系統設置->高級->環境變量

這部分我們之前將 FFmpeg 的Windows安裝說明時有提到過的。可看到有用戶變量和系統變量。

修改“用戶變量”為當前用戶使用,其他 Windows 用戶不能夠使用。如果要使每個用戶都能夠使用,你需要修改 "系統變量" 。

注意,不要夠刪除在變量中原來已有的內容。如果之前已存在變量,則在其之后用分號“;”分隔,然后添加。

我們只讓當前用戶可用,修改用戶變量即可。

在用戶環境變量中新建變量 JAVA_HOME,設置變量值 F:\Program Files\Java\jdk1.8.0_144

新建PATH,設置變量值%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin

新建CLASSPATH,設置變量值.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar注意前面的.表示當前目錄。然后點擊“確定”按鈕。

到此,配置完成。打開 cmd 測試一下配置是否成功。

輸入java -version,顯示版本java version "1.8.0_144",輸入javac -version,也顯示javac 1.8.0_144,說明JDK安裝及環境變量配置成功。

然后接著上面來講。進入?apache-apollo-1.7.1-windows-distro\apache-apollo-1.7.1\bin 文件夾

按住 shift鍵選擇 apollo.cmd 再點擊右鍵。選擇 在此處打開命令窗口。

再次在 cmd 窗口執行 apollo.cmd,可以看到如下的信息,這就和 Ubuntu 下安裝對上了。

(4)創建服務器實例

參看:Getting Started Guide

在 CMD 命令窗口輸入apollo create mybroker ,當然 mybroker 這個名字可以隨便起。

然后查看 mybroker 可以發現里面包含有很多信息,其中etc\apollo.xml文件下是配置服務器信息的文件,etc\users.properties文件包含連接MQTT服務器時用到的用戶名和密碼,可以修改原始的admin=password,可以接著換行添加新的用戶名密碼。

bin:保存與該實例關聯的執行腳本。

etc:保存實例配置文件

data:保存用于存儲持久消息的數據文件

日志:保存旋轉日志文件

tmp:保存在代理運行之間安全刪除的臨時文件

打開cmd,運行 apache-apollo-1.7.1\bin\mybroker\bin\apollo-broker.cmd run 開啟服務器,如下圖所示:

這里需要注意了,所在?apache-apollo-1.7.1 所在文件夾名稱不能有中文或者空格。因為我上面的是存放在 360安全瀏覽下載 這個目錄下了。導致出現系統找不到指定的路徑。

然后打開瀏覽器上,輸入?http://127.0.0.1:61680/ 或 https://127.0.0.1:61681/

即可進入 Apollo Console 窗口。

默認的登錄id和密碼是?admin?和?password?

三、MQTT 客戶端測試

Apollo 服務器安裝已經講完,接下來簡單測試一下發布訂閱。

這里面網上有MQTT協議之Apache Apollo 安裝使用這種文章用的是 java,在Android上測試的。

這就不太適合我了,不懂 Android藍瘦香菇啊!

再有一種是用 谷歌瀏覽器上的 擴展程序?mqttlens

首先添加該插件

點擊 獲取更多擴展程序

搜索?mqttlens ,最后添加至 CHROME

安裝完成!!

下面進行測試

先運行Apollo 服務器

然后啟動mqttlens?

然后點擊 Connections+

出現下圖,并填寫好相關的信息

然后就進入了,訂閱發布界面

OK,到此結束

四、Ubuntu 下 MQTT 服務器搭建之Mosquitto

Mosquitto 是一款實現了消息推送協議MQTT v3.1的開源消息代理軟件,提供輕量級的、支持可發布/可訂閱的消息推送模式。現在我們開始搭建服務器。

參看:CentOS 安裝Mosquitto及測試

參看:MQTT學習筆記——MQTT協議體驗 Mosquitto安裝和使用

(1)下載相關文件

下載:index : libwebsockets

下載:mosquitto-1.4.14.tar.gz (319kB) (GPG signature)

(2)安裝編譯

《1》安裝 libwebsockets-2.0.2.tar.gz

解壓:

tar -zxvf?libwebsockets-2.0.2

進入該目錄:

cd libwebsockets-2.0.2/

新建目錄 build

mkdir build

進入 build

cd build

跨平臺編譯

cmake .. -DLIB_SUFFIX=64

編譯:

make && make install

這里需要注意,cmake .. 提示 程序“cmake”尚未安裝

安裝 sudo apt-get install cmake

《2》安裝

解壓:mosquitto-1.4.14

tar -zxvf?mosquitto-1.4.14.tar.gz

進入該目錄:

cd mosquitto-1.4.14/

更改config.mk 讓其支持 websockets

WITH_WEBSOCKETS:=no

WITH_WEBSOCKETS:=yes

編譯:

make && make install

這里會出現兩處錯誤:

致命錯誤: ares.h:沒有那個文件或目錄

? ? 解決方法:sudo apt-get install libc-ares-dev libc-ares2

致命錯誤:uuid/uuid.h: 沒有這個文件或目錄?

? ? 解決方法:sudo apt-get install uuid-dev

至此程序已經安裝完畢!

程序文件將默認安裝到以下位置

路徑程序文件

/usr/local/sbinmosquiotto server

/etc/mosquittoconfiguration

/usr/local/binutility command




修正鏈接庫路徑

由于操作系統版本及架構原因,很容易出現安裝之后的鏈接庫無法被找到,如啟動mosquitto客戶端可能出現找不到

libmosquitto.so.1文件,因此需要添加鏈接庫路徑

修正鏈接庫

vim /etc/ld.so.conf.d/liblocal.conf

/usr/local/lib64

/usr/local/lib

再執行 ldconfig

cp mosquitto.conf /etc/mosquitto

修改mosquitto.conf文件

在 /etc/mosquitto/mosquitto.conf 的 Default Listener 一節添加如下幾行:

# =================================================================

# Default listener

# =================================================================

# IP address/hostname to bind thedefaultlistener to. Ifnot

# given, thedefaultlistener willnotbe bound to a specific

# addressandso will be accessible to all network interfaces.

# bind_address ip-address/host name

#bind_address

# Port to useforthedefaultlistener.

pid_file /var/run/mosquitto.pid

user tarena

port1883

max_connections-1

allow_anonymoustrue

listener8080

protocol websockets

這里有出現兩個問題:

Error: Invalid user 'mosquitto'.

解決方法:修改配置文件 mosquitto.conf ,增加登錄的用戶,例如當前登錄用戶為root

因此在上面添加 ?user root

但是運行 mosquitto 時會出現警告

1502156001: Warning: Mosquitto should not be run as root/administrator.

所以改為普通用戶 user tarena ?(改成你自己的)

下面測試時打開 mosquitto 會出現錯誤

# mosquitto -c /etc/mosquitto/mosquitto.conf

1502415109: mosquitto version 1.4.14 (build date 2017-08-07 15:54:10+0800) starting

1502415109: Config loaded from /etc/mosquitto/mosquitto.conf.

1502415109: Opening websockets listen socket on port 8080.

1502415109: Error: Unable to create websockets listener on port 8080.

解決方法:

重裝了好幾遍,網上查了好久。最后發現,是修改上面的mosquitto.conf文件時有空格,將空格刪掉就好了。

居然還有這種操作,醉醉噠... ?

(3)測試

《1》打開mosquitto

?打開一個終端輸入

mosquitto -c /etc/mosquitto/mosquitto.conf

# mosquitto -c /etc/mosquitto/mosquitto.conf

1502159482: mosquitto version 1.4.14 (build date 2017-08-07 15:54:10+0800) starting

1502159482: Config loaded from /etc/mosquitto/mosquitto.conf.

1502159482: Opening websockets listen socket on port 8080.

1502159482: Opening ipv4 listen socket on port 1883.

1502159482: Opening ipv6 listen socket on port 1883.

mosquitto 選項介紹:

參看:mosquitto Options

-c,--config文件

? ? 從文件加載配置。 如果沒有給出,則使用mosquitto.conf(5)中描述的默認值。

-d,--daemon

? ? 在后臺運行蚊子作為守護進程。 所有其他行為保持不變。

-p,--port

? ? 在指定的端口上監聽,而不是默認的1883.除了配置文件中的端口設置外,還會起作用。 可以指定多次以打開在不同端口上偵聽的多個套接字。 該套接字將綁定到所有網絡接口。

-v,--verbose

? ? 使用詳細日志記錄。 這相當于在配置文件中將log_type設置為全部。 這種覆蓋和記錄選項在配置文件中給出。

《2》訂閱主題

打開另一個終端輸入:

mosquitto_sub -t test?

此時第一個終端多了一行信息

# mosquitto -c /etc/mosquitto/mosquitto.conf

1502159482: mosquitto version1.4.14(build date2017-08-0715:54:10+0800) starting

1502159482: Config loaded from /etc/mosquitto/mosquitto.conf.

1502159482: Opening websockets listen socket on port8080.

1502159482: Opening ipv4 listen socket on port1883.

1502159482: Opening ipv6 listen socket on port1883.

1502159601: New connection from127.0.0.1on port1883.

1502159601: New client connected from127.0.0.1as mosqsub|2431-ubuntu (c1, k60)

mosquitto_sub?選項介紹

參看:mosquitto_sub Options

下面的選項可以在命令行中給出,但也可以放置在位于$ XDG_CONFIG_HOME / mosquitto_sub或$ HOME / .config / mosquitto_sub的配置文件中,每行一對 - 吸附值。配置文件中的值將被用作默認值,并且可以通過使用命令行來覆蓋。這個例外是-t和-T,如果在配置文件中給出,將不會被覆蓋。還要注意,目前一些選項不能被否定,例如-S。具有#作為第一個字符的配置文件行將被視為注釋,不會進一步處理。

-a

將輸出連接綁定到本地IP地址/主機名。如果需要將網絡通信限制在特定接口上,請使用此參數。

-c,--disable-clean-session

禁用“'clean session”標志。這意味著客戶端的所有訂閱將在斷開連接后維護,以及到達的后續QoS 1和QoS 2消息。當客戶端重新連接時,它將接收所有排隊的消息。如果使用此選項,建議使用 -id 手動設置客戶機ID

--cafile

定義包含受信任的PEM編碼的CA證書的文件的路徑。用于啟用SSL通信。另請參見--capath

--capath

定義包含受信任的PEM編碼的CA證書的目錄的路徑。用于啟用SSL通信。

為了--capath正常工作,證書文件必須具有“.crt”作為文件結束,您必須在每次添加/刪除證書時運行“c_rehash”。另請參見--cafile

--cert

如果服務器需要,定義包含此客戶端的PEM編碼證書的文件的路徑。另請參閱--key。

--ciphers

在客戶端支持的TLS密碼的openssl兼容列表。有關詳細信息,請參閱密碼(1)。

-C

在接收到給定的消息數后立即斷開并退出程序。例如,在需要單個狀態值的shell腳本中這可能很有用。

結合-R來僅打印第一組新消息(即,沒有設置保留標志),或者使用 -T 來過濾哪些主題被處理。

-d,--debug

啟用調試消息。

- help

顯示使用信息。

-h,--host

指定要連接的主機。默認為localhost。

-i,--id

該客戶端使用的id。如果沒有給出,默認為mosquitto_sub_附加客戶端的進程ID。不能與-id-prefix參數同時使用。

-I,-id-prefix

通過追加客戶端的進程標識來提供客戶端ID的前綴。這在代理使用clientid_prefixes選項時很有用。不能與-id參數同時使用。

--insecure

使用基于證書的加密時,此選項將禁用對服務器證書中服務器主機名的驗證。這在測試初始服務器配置時可能很有用,但是通過DNS欺騙可以讓惡意第三方冒充您的服務器。僅在測試中使用此選項。如果您需要在生產環境中使用此選項,則您的設置會出現故障,并且無需使用加密。

-k,--keepalive

發送PING命令到經紀人以通知它之前的秒數仍然是連接和運行的。默認為60秒。

- key

如果服務器需要,定義包含此客戶端的PEM編碼私鑰的文件的路徑。另請參見--cert。

-N

打印時,不要在有效負載上附加行尾符號。這允許將來自多個消息的有效載荷數據直接傳輸到另一個應用程序。只有在不使用-v的時候才真正有意義。

-p,--port

連接到指定的端口而不是默認端口1883。

-P, - pw

提供用于與經紀人進行認證的密碼。在不指定用戶名的情況下使用此參數是無效的。這需要一個支持MQTT v3.1的代理。另請參閱--username選項。

- proxy

指定要連接的SOCKS5代理。支持“無”和“用戶名”身份驗證類型。 socks-url必須是形式socks5h:// [username [:password] @] host [:port]。協議前綴socks5h表示主機名由代理解析。符號%25,%3A和%40分別被URL解碼為%,...和@,如果存在于用戶名或密碼中。

如果沒有給出用戶名,則不會嘗試認證。如果沒有給出端口,則使用默認值為1080。

根據需求,將來可能會有更多SOCKS版本,并且將使用不同的協議前綴,如卷曲(1)所述。

--psk

提供與代理使用的十六進制(無前導0x)預共享密鑰,以使用TLS-PSK加密支持。還必須提供--psk身份以啟用TLS-PSK。

--psk身份

使用TLS-PSK支持的客戶端身份。這可以用來代替用戶名

《3》發布內容

再打開一個終端輸入:

mosquitto_pub -t test -m "hello world"?

此時第二個終端多了一行信息

# mosquitto_sub -v -t test

hello world

mosquitto_pub 選項介紹

參看:mosquitto_pub Options

下面的選項可以在命令行中給出,但是也可以放置在位于$ XDG_CONFIG_HOME / mosquitto_pub或$ HOME / .config / mosquitto_sub的配置文件中,每行一對 - 吸附值。配置文件中的值將被用作默認值,并且可以通過使用命令行來覆蓋。這個例外是消息類型選項,其中只能指定一個。還要注意,目前一些選項不能被否定,例如-S。具有#作為第一個字符的配置文件行將被視為注釋,不會進一步處理。

-a

將輸出連接綁定到本地IP地址/主機名。如果需要將網絡通信限制在特定接口上,請使用此參數。

--cafile

定義包含受信任的PEM編碼的CA證書的文件的路徑。用于啟用SSL通信。另請參見--capath

--capath

定義包含受信任的PEM編碼的CA證書的目錄的路徑。用于啟用SSL通信。

為了--capath正常工作,證書文件必須具有“.crt”作為文件結束,您必須在每次添加/刪除證書時運行“c_rehash”。另請參見--cafile

--cert

如果服務器需要,定義包含此客戶端的PEM編碼證書的文件的路徑。另請參閱--key。

--ciphers

在客戶端支持的TLS密碼的openssl兼容列表。有關詳細信息,請參閱密碼(1)。

-d,--debug

啟用調試消息。

-f,--file

發送文件的內容作為消息。

- help

顯示使用信息。

-h,--host

指定要連接的主機。默認為localhost。

-i,--id

該客戶端使用的id。如果沒有給出,默認為mosquitto_pub_附加客戶端的進程ID。不能與-id-prefix參數同時使用。

-I,-id-prefix

通過追加客戶端的進程標識來提供客戶端ID的前綴。這在代理使用clientid_prefixes選項時很有用。不能與-id參數同時使用。

--insecure

使用基于證書的加密時,此選項將禁用對服務器證書中服務器主機名的驗證。這在測試初始服務器配置時可能很有用,但是通過DNS欺騙可以讓惡意第三方冒充您的服務器。僅在測試中使用此選項。如果您需要在生產環境中使用此選項,則您的設置會出現故障,并且無需使用加密。

-k,--keepalive

發送PING命令到經紀人以通知它之前的秒數仍然是連接和運行的。默認為60秒。

-key

如果服務器需要,定義包含此客戶端的PEM編碼私鑰的文件的路徑。另請參見--cert。

-l,--stdin-line

發送從stdin讀取的消息,將單獨的行分成單獨的消息。請注意,空行不會被發送。

-m, - 消息

從命令行發送一條消息。

-n, - 消息

發送null(零長度)消息。

-p,--port

連接到指定的端口而不是默認端口1883。

-P, - pw

提供用于與經紀人進行認證的密碼。在不指定用戶名的情況下使用此參數是無效的。這需要一個支持MQTT v3.1的代理。另請參閱--username選項。

-proxy

指定要連接的SOCKS5代理。支持“無”和“用戶名”身份驗證類型。 socks-url必須是形式socks5h:// [username [:password] @] host [:port]。協議前綴socks5h表示主機名由代理解析。符號%25,%3A和%40分別被URL解碼為%,...和@,如果存在于用戶名或密碼中。

如果沒有給出用戶名,則不會嘗試認證。如果沒有給出端口,則使用默認值為1080。

根據需求,將來可能會有更多SOCKS版本,并且將使用不同的協議前綴,如卷曲(1)所述。

--psk

提供與代理使用的十六進制(無前導0x)預共享密鑰,以使用TLS-PSK加密支持。還必須提供--psk身份以啟用TLS-PSK。

--psk身份

使用TLS-PSK支持的客戶端身份。如果代理配置為這樣做,則可以使用這可以替代用戶名。

-q,--qos

指定消息的使用質量,從0,1和2.默認為0。

- quiet

如果給出此參數,則不會打印運行時錯誤。這排除了在無效用戶輸入的情況下給出的任何錯誤消息(例如使用 - 沒有端口的端口)。

-r, - 保存

如果保留被賦予,則該消息將被保留為經紀人的“最后已知的良好”值。有關更多信息,請參閱mqtt(7)。

-s,--stdin-file

發送從stdin讀取的消息,將整個內容作為單個消息發送。

-S

使用SRV查找來確定要連接的主機。當我們執行查詢_mqtt._tcp

不過如果直接將第一個終端關閉再打開 mosquitto 會出現一個問題

Error: Address already in use

解決方法:重啟... ? 別的方法暫時不知道呢

(4)取消匿名登錄

參看:MQTT服務器搭建--Mosquitto用戶名密碼配置

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,156評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,401評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,069評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,873評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,635評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,128評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,203評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,365評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,881評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,733評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,935評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,475評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,172評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,582評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,821評論 1 282
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,595評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,908評論 2 372

推薦閱讀更多精彩內容