消费者

"""
测试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实现消费者和生产者模型的更多相关文章

  1. python_并发编程——消费者和生产者模型

    消费者和生产者模型 from multiprocessing import Process,Queue import time import random class Producer(Process ...

  2. 消费者与生产者---LinkedList方式模拟

    采用LinkedList数据结构方式来模拟消费者与生产者模型,小Demo import java.util.LinkedList; public class MyQueue { private fin ...

  3. JAVA——利用wait和notify实现生产者和消费者

    经典的消费者和生产者的的实现: 注意事项: 1:在循环里面用wait(),因为当线程获得了锁,但是有可能还没有满足其他条件: 2:公用的缓冲池要用锁机制: package demo; import j ...

  4. springcloud 实现简单的 消费者和生产者 模式(Restfule 的风格)

    一.springcloud 实现简单的 消费者和生产者 模式(Restfule 的风格) 1.实现简单的消费者和生产者 springcloud使用的http协议进行传输数据,也就是说springclo ...

  5. Java程序设计之消费者和生产者

    新建一个Break类,表示食物数量. public class Break { public static final int MAX = 10; //最多一次性煮十个面包 Stack<Inte ...

  6. [Python] 利用Django进行Web开发系列(二)

    1 编写第一个静态页面——Hello world页面 在上一篇博客<[Python] 利用Django进行Web开发系列(一)>中,我们创建了自己的目录mysite. Step1:创建视图 ...

  7. python利用or在列表解析中调用多个函数.py

    python利用or在列表解析中调用多个函数.py """ python利用or在列表解析中调用多个函数.py 2016年3月15日 05:08:42 codegay & ...

  8. python 利用 ogr 写入shp文件,数据格式

    python 利用 ogr 写入 shp 文件, 定义shp文件中的属性字段(field)的数据格式为: OFTInteger # 整型 OFTIntegerList # 整型list OFTReal ...

  9. java多线程-消费者和生产者模式

    /* * 多线程-消费者和生产者模式 * 在实现消费者生产者模式的时候必须要具备两个前提,一是,必须访问的是一个共享资源,二是必须要有线程锁,且锁的是同一个对象 * */ /*资源类中定义了name( ...

随机推荐

  1. Codeforces Round #127 (Div. 1) B. Guess That Car! 扫描线

    B. Guess That Car! 题目连接: http://codeforces.com/contest/201/problem/B Description A widely known amon ...

  2. JS零基础一步一步做应用全记录

    1.起因 作为几个外卖重度依赖癌晚期患者,呆宿舍的时候几个人一起叫外卖已经是常事.偶然看到隔壁宿舍在饿了么订餐的时候,看到在饿了么的首页上有一个谁去拿外卖的一个小游戏/工具,感觉这个小细节,饿了么把握 ...

  3. Linux下KVM虚拟机基本管理及常用命令(转)

    说明:可能有重复 一.KVM的基本管理 1.查看KVM虚拟机配置文件 #Kvm虚拟机默认配置文件位置 [root@kvm qemu]# pwd /etc/libvirt/qemu [root@kvm ...

  4. Spring注解@Primary的意思

    @Primary:在众多相同的Bean中,优先使用@Primary注解的Bean. 这个和@Qualifier有点区别,@Qualifier指的是使用哪个Bean进行注入. 参考: http://bl ...

  5. Notepad++ v5.5以上 惯用法教程

    注:本文中为注明为自定义快捷键的,均为notepad++的默认快捷键. 0.  关闭标签页 UltraEdit是双击窗口就可以关闭,Notepad++双击不能关闭,右键只能关闭非当前标签页,那怎么办呢 ...

  6. java中关于volatile的理解疑问?

    作者:xyzZ链接:https://www.zhihu.com/question/49656589/answer/117826278来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...

  7. 【转载】C/C++语言分析 & 每年学一种编程语言 & git历史

    http://blog.csdn.net/turingbook/article/details/1778867 <程序员修炼之路>英文注释版 作者提出的经营之道是:——Invest Reg ...

  8. 兼容各浏览器的css背景图片拉伸代码

    需要用到背景图拉伸,找到了下面这段css代码: filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='***.jpg' , s ...

  9. http://blog.csdn.net/xingfuzhijianxia/article/details/6433918

    http://blog.csdn.net/xingfuzhijianxia/article/details/6433918

  10. [视频解说]Java(JDK的下载安装及第一个程序执行)

    (JDK的下载安装及第一个程序执行) 内容:Java JDK 的安装以及HelloWorld 程序的执行 欢迎童鞋们前往围观 http://v.youku.com/v_show/id_XODA3Mzk ...