转: python 利用EMQ实现消费者和生产者模型
消费者
"""
测试emq-消费者
@author me
"""
import paho.mqtt.client as mqtt
import time class Consumer(object): def get_time(self):
"""
获取时间
"""
return time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time.time())) def on_subscribe(self, client, userdata, mid, granted_qos):
"""
开始时订阅 callback
:param userdata:
:param mid:
:param granted_qos:
:return:
"""
print(self.get_time(), "Begin subscribe topic with ", mid) def on_message(self, client, userdata, message):
"""
接收消息 callback
:param userdata:
:param message:
:return:
"""
print(self.get_time(), " Received message '" + str(message.payload) + "' on topic '" +
message.topic + "' with QoS " + str(message.qos)) def on_connect(self, client, userdata, flags, rc):
"""
连接时的 callback
:param client:
:param userdata:
:param flags:
:param rc:
:return:
"""
print(self.get_time(), "[consumer]Connected with result code " + str(rc))
if rc == 0:
sub_result = client.subscribe("/chat/room/4", qos=0)
print(self.get_time(), "Connected with result is (status,mid)", sub_result)
else:
print(self.get_time(), " connect failed") def run(self):
# 4就是MQTT3.1.1
emq_client = mqtt.Client(client_id="emqttd_2018080922", userdata=None, protocol=4)
emq_client.on_connect = self.on_connect
# emq_client.on_disconnect = self.on_disconnect
emq_client.on_message = self.on_message
emq_client.on_subscribe = self.on_subscribe
# 设置用户密码,如果没有设置用户,这里可以省略
emq_client.username_pw_set('admin', "123.com")
emq_client.connect("192.168.0.251", 1883, keepalive=60)
emq_client.loop_forever() if __name__ == "__main__":
consumer = Consumer()
consumer.run()
生产者
"""
测试emq-生产者
@author me
"""
import paho.mqtt.client as mqtt
import time class Producer(object): def get_time(self):
"""
获取时间
"""
return time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time.time())) def on_disconnect(self, client, userdata, rc):
"""
rc 是操作结果的状态码,0 代表成功
断开连接时的 callback
"""
print(self.get_time(), " end a loop with code "+str(rc)) def pub_topic(self, client, topic_text):
"""
发布topic
"""
try:
pub_result = client.publish("/chat/room/4", payload=topic_text, qos=0, retain=False)
if pub_result.is_published:
print(self.get_time(), " success pub message with id: ", pub_result.mid)
else:
print(self.get_time(), "failed to pub message")
except ValueError as err_str:
print(self.get_time(), "please check your parameters: ", err_str) def on_connect(self, client, userdata, flags, rc):
"""
连接broker时的callback
"""
print(self.get_time(), "[producer]Connected with result code " + str(rc))
if rc == 0:
while True:
topic_text = input("Enter your topic text,('end' to end a loop): ")
if topic_text == "end":
print(self.get_time(), "EXIT ..... ")
client.disconnect()
break
else:
self.pub_topic(client, topic_text)
else:
print(self.get_time(), "Connected Failed, Exited ")
client.disconnect() def run(self):
# 4就是MQTT3.1.1
emq_client = mqtt.Client(client_id="emqttd_2018080946", userdata=None, protocol=4)
emq_client.on_connect = self.on_connect
emq_client.on_disconnect = self.on_disconnect
# 设置用户密码,如果没有设置用户,这里可以省略
emq_client.username_pw_set('admin', "123.com")
emq_client.connect("192.168.0.250", 1883, keepalive=60)
emq_client.loop_forever() def main(self):
self.run()
while True:
start = input("Enter your start sign,('no' to end a program): ")
if start != 'no':
self.run()
else:
print(self.get_time(), "Exiting program ")
break if __name__ == "__main__":
producer = Producer()
producer.main()
运行
首先,启动消费者,然后启动生产者,就可以输入消息体了,输入 end 表示发布之前的消息,no 结束生产者。
生产者
消费者
转: python 利用EMQ实现消费者和生产者模型的更多相关文章
- python_并发编程——消费者和生产者模型
消费者和生产者模型 from multiprocessing import Process,Queue import time import random class Producer(Process ...
- 消费者与生产者---LinkedList方式模拟
采用LinkedList数据结构方式来模拟消费者与生产者模型,小Demo import java.util.LinkedList; public class MyQueue { private fin ...
- JAVA——利用wait和notify实现生产者和消费者
经典的消费者和生产者的的实现: 注意事项: 1:在循环里面用wait(),因为当线程获得了锁,但是有可能还没有满足其他条件: 2:公用的缓冲池要用锁机制: package demo; import j ...
- springcloud 实现简单的 消费者和生产者 模式(Restfule 的风格)
一.springcloud 实现简单的 消费者和生产者 模式(Restfule 的风格) 1.实现简单的消费者和生产者 springcloud使用的http协议进行传输数据,也就是说springclo ...
- Java程序设计之消费者和生产者
新建一个Break类,表示食物数量. public class Break { public static final int MAX = 10; //最多一次性煮十个面包 Stack<Inte ...
- [Python] 利用Django进行Web开发系列(二)
1 编写第一个静态页面——Hello world页面 在上一篇博客<[Python] 利用Django进行Web开发系列(一)>中,我们创建了自己的目录mysite. Step1:创建视图 ...
- python利用or在列表解析中调用多个函数.py
python利用or在列表解析中调用多个函数.py """ python利用or在列表解析中调用多个函数.py 2016年3月15日 05:08:42 codegay & ...
- python 利用 ogr 写入shp文件,数据格式
python 利用 ogr 写入 shp 文件, 定义shp文件中的属性字段(field)的数据格式为: OFTInteger # 整型 OFTIntegerList # 整型list OFTReal ...
- java多线程-消费者和生产者模式
/* * 多线程-消费者和生产者模式 * 在实现消费者生产者模式的时候必须要具备两个前提,一是,必须访问的是一个共享资源,二是必须要有线程锁,且锁的是同一个对象 * */ /*资源类中定义了name( ...
随机推荐
- 浅析HashMap和Hashtable的区别
HashMap和Hashtable两个类都实现了Map接口,二者保存键值对(key-value对): HashMap和HashTable区别 第一,继承的父类不同.HashMap继承自Abstract ...
- (转)适配器模式--Adapter Pattern
适配器:基于现有类所提供的服务,向客户提供接口,以满足客户的期望. <设计模式>一书中是这样给适配器模式定义的:将一个类的接口转换成客户希望的另外一个接口.Adapter 模式使得原本由于 ...
- MYSQL复习笔记7-索引
Date: 20140207Auth: Jin 索引是根据表中一列或若干列按照一定顺序建立的列值与记录行之间的对应关系表. 索引的主要作用 快速存取数据 保证数据记录的唯一性 实现表与表之间的参照完整 ...
- Delphi 类引用 Class Reference 元类 MetaClass 用法
delphi中类引用的使用实例 类引用类引用(Class Reference)是一种数据类型,有时又称为元类(MetaClass),是类的类型的引用.类引用的定义形式如下: class of type ...
- Linux(CentOS)下的vsftpd服务器配置-五岳之巅
说明:VSFTPD这款软件,网上和书里有很多配置文章,但不一定适用于您的主机,不同版本默认值不一样,我现在使用的是vsftpd-2.0.5-12.el5_3.1.千万记住:修改配置文件后,必须重新启动 ...
- 【maven】pom.xml文件没错,但是项目有小红叉,Problems中可以看到错误:“Dynamic Web Module 3.0 requires Java 1.6 or newer.”
解决方法: 1.将 <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>m ...
- laravel的 array 函数
代码如下: routes.php文件 // 获⃣取⃣数⃣组⃣的⃣第⃣一⃣个⃣ Route::get('/helper', function () { $arr = [1, 2, 4]; return ...
- julia应用于自动驾驶汽车、机器人、3D 打印、精准医疗、增强现实、基因组学、能源交易、机器学习、金融风控和太空任务设计等多个领域
编程界的新宠 Julia 发布 1.0 正式版本,多种优势集于一身2018-08-14 14:14 公司Julia 的累积下载次数超过 200 万,已被应用于自动驾驶汽车.机器人.3D 打印.精准医疗 ...
- linux如何修改登录用户密码
root登录后,passwd root可以修改root帐号的密码 其他具有sudo权限的用户登录后,sudo passwd root可以修改根帐号的密码 sudo passwd admin可以修改ad ...
- 一、Hello Spring Boot
package com.ld.controller; import org.springframework.web.bind.annotation.RequestMapping; import org ...