docker搭建rabbitmq服务并使用python实现数据的传输

搭建rabbitmq服务

环境centos7.5

步骤:

docker pull rabbitmq

启动rabbitmq

docker run -d --hostname my-rabbit --name rabbit -p 15672:15672 -p 5672:5672 -p 1883:1883 -p 15675:15675 rabbitmq

说明:

hostname是必须的,name 是非必须的,是映射的名称。

15672 是rabbitmq management管理界面默认访问端口

5672 是amqp默认端口

1883 是mqtt tcp协议默认端口

15675 是web_mqtt websocket协议默认端口

查看运行状态

docker logs rabbit

启用插件

docker exec <容器ID> rabbitmq-plugins enable rabbitmq_management

docker exec <容器ID> rabbitmq-plugins enable rabbitmq_mqtt

docker exec <容器ID> rabbitmq-plugins enable rabbitmq_web_mqtt

开启端口号远程访问

firewall-cmd --zone=public --add-port=15672/tcp --permanent

firewall-cmd --zone=public --add-port=5672/tcp --permanent

firewall-cmd --zone=public --add-port=1883/tcp --permanent

firewall-cmd --zone=public --add-port=15675/tcp --permanent

firewall-cmd --reload

如提示

firewalld not running

则需要进行开启防火墙的操作。

3.3.2实现数据的发送和接收

数据发送

import paho.mqtt.client as mqtt
import paho.mqtt.publish as publish
import time
from scipy.io import loadmat
import struct
import math
import json
HOST =
"106.12.26.219"
PORT = 1883
# rc 是操作结果的状态码,0 代表成功
# 断开连接时的 callback
def on_disconnect(self, client, userdata, rc):
print(self.get_time(), " end a loop with code " + str(rc))

#
链接成功
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
client.subscribe(
"test")

#
接收到消息
def on_message(client, userdata, msg):
print(msg.topic+" "+msg.payload.decode("utf-8"))

if __name__ == '__main__':
matfn =
u'E:\
网盘\国家重点专项\健康状态实时在线评估与故障预报系统平台\工业故障诊断交接\StructuralHealth\data.mat'
data = loadmat(matfn)
dat = data[
'data']
for i in range(4,5):
for j in range(170):
if(j<=89):
f=
0
else:
f=
1
for m in range(16):
da = dat[m*
500:(500+500*m), i, j].tolist()
da.insert(
0, math.ceil((m+1) / 2))
da.insert(
0,j+1)
da.insert(
0,f)
da.insert(
0,2)
da.insert(
0,i+1)
packed_data=json.dumps(da)
client_id = time.strftime(
'%Y%m%d%H%M%S',time.localtime(time.time()))
client = mqtt.Client(client_id,
userdata=None, protocol=4) # ClientId
不能重复,所以使用当前时间,# 4就是MQTT3.1.1
client.username_pw_set("guest", "guest") #
必须设置,否则会返回「Connected with result code 4
client.on_connect = on_connect
client.on_disconnect = on_disconnect
client.on_message = on_message
client.connect(HOST, PORT,
keepalive=60)
pub_result=client.publish(
"test_topic", payload=packed_data, qos=0, retain=False) #
发布消息
if pub_result.is_published:
print(" success pub message with id: ", pub_result.mid)
else:
print("failed to pub message")
time.sleep(10)

 

数据接收,存储到mysql

import sys
import os
import paho.mqtt.client as mqtt
import time
import pymysql
import json
import numpy
import datetime
import math
HOST =
"106.12.26.219"
PORT = 1883
db = pymysql.connect(host="106.12.26.219", user="root",password="123456", db="test", port=3306)
cur = db.cursor()

def client_loop():
client_id = time.strftime(
'%Y%m%d%H%M%S',time.localtime(time.time()))
client = mqtt.Client(client_id,
userdata=None, protocol=4) # ClientId不能重复,所以使用当前时间 4就是MQTT3.1.1
client.username_pw_set("guest", "guest") #
必须设置,否则会返回「Connected with result code 4
client.on_connect = on_connect
client.on_message = on_message
client.on_subscribe = on_subscribe
client.connect(HOST, PORT,
keepalive=60)
print('mqtt connect success')
client.loop_forever(
timeout=1.0)
#
开始时订阅 callback
def on_subscribe(self, client, userdata, mid, granted_qos):
print("Begin subscribe topic with ", mid)
#
链接成功的函数
def on_connect(client, userdata, flags, rc):
print("Connected with result code "+str(rc))
client.subscribe(
"test_topic") #
设置topic 0/#
#
接收到消息的函数
def on_message(client, userdata, msg):
print(msg.topic+" "+msg.payload.decode("utf-8"))
content = json.loads(msg.payload.decode(
"utf-8"))
data=[]
data.append(content[
0])
data.append(content[
1])
data.append(content[
2])
data.append(content[
3])
data.append(content[
4])
for i in range(500):
now2 = datetime.datetime.now()
now = now2.strftime(
"%Y-%m-%d %H:%M:%S")
data.append(now)
data.insert(
5,content[5+i])
cur.execute(
"INSERT INTO vibration_sensor_historical_data (idOperationData,Robotid,DataTypeid,Fault,Sessionid,Runid,Num1,Time) VALUES(null,%f,%f,%f,%f,%f,%f,str_to_date(\'%s\','%%Y-%%m-%%d %%H:%%i:%%s'))" % tuple(
data))

del data[5]
del data[5]
db.commit()

if __name__ == '__main__':
client_loop()

数据接收,存储到InfluxDB

发布了46 篇原创文章 · 获赞 12 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/malingyu/article/details/100132746