全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 阿里云办公 培训与认证 物联网
消息队列 MQ

Python 接入示例

更新时间:2017-08-25 15:16:24   分享:   

本文主要介绍如何使用 Python 客户端收发 MQTT 消息,并给出示例代码供前期开发测试参考。包括资源申请、环境准备、示例代码、注意事项等。

注意:

本文给出的示例均基于 Eclipse Paho Python SDK 实现,SDK 下载请参见 MQTT 接入准备。如使用其他第三方的客户端,请适当修改。

1. 资源申请

使用 MQ 提供的 MQTT 服务,首先需要核实应用中使用的 Topic 资源是否已经申请。如果没有,请先去控制台申请 Topic,Group ID 等资源。

申请资源时需要根据需求选择对应的 Region,例如 MQTT 需要使用华北2的接入点,那么 Topic 等资源就在华北2 申请。资源申请具体请参见申请 MQ 资源

注意:MQTT 使用的多级子 Topic 不需要申请,代码里直接使用即可,没有限制。

2. 环境准备

本示例使用 Python 语言编写, Python 客户端依赖的添加可以自行搜索。一般采用 pip 包管理器来处理,具体安装步骤请参考 paho 官方文档

官方版本目前不支持 SNI。如果需要使用 SSL 加密的连接方式,请参考以下步骤安装 patch 以支持 SNI,后续等官方更新 SDK 的版本:

  1. pip install git+https://github.com/exosite/paho.mqtt.python.git@openssl_sni_support --upgrade

3. MQTT 收发消息

本段示例代码演示如何使用 MQTT Python 客户端发送和接收消息。

  1. #!/usr/bin/env python
  2. import hmac
  3. import base64
  4. from hashlib import sha1
  5. import time
  6. from paho.mqtt.client import MQTT_LOG_INFO, MQTT_LOG_NOTICE, MQTT_LOG_WARNING, MQTT_LOG_ERR, MQTT_LOG_DEBUG
  7. from paho.mqtt import client as mqtt
  8. #accessKey get from aliyun account console
  9. accessKey = 'XXXXXX'
  10. #secretKey get from aliyun account console
  11. secretKey = 'XXXXX'
  12. #MQTT GroupID,get from mq console
  13. groupId = 'GID_XXX'
  14. client_id=groupId+'@@@'+'TEST00001'
  15. # Topic
  16. topic = 'XXXX/python/test'
  17. #MQTT endPoint get from mq console
  18. brokerUrl='XXXXXXXXX'
  19. def on_log(client, userdata, level, buf):
  20. if level == MQTT_LOG_INFO:
  21. head = 'INFO'
  22. elif level == MQTT_LOG_NOTICE:
  23. head = 'NOTICE'
  24. elif level == MQTT_LOG_WARNING:
  25. head = 'WARN'
  26. elif level == MQTT_LOG_ERR:
  27. head = 'ERR'
  28. elif level == MQTT_LOG_DEBUG:
  29. head = 'DEBUG'
  30. else:
  31. head = level
  32. print('%s: %s' % (head, buf))
  33. def on_connect(client, userdata, flags, rc):
  34. print('Connected with result code ' + str(rc))
  35. def on_message(client, userdata, msg):
  36. print(msg.topic + ' ' + str(msg.payload))
  37. def on_disconnect(client, userdata, rc):
  38. if rc != 0:
  39. print('Unexpected disconnection %s' % rc)
  40. client = mqtt.Client(client_id, protocol=mqtt.MQTTv311)
  41. client.on_log = on_log
  42. client.on_connect = on_connect
  43. client.on_message = on_message
  44. client.on_disconnect = on_disconnect
  45. password = base64.b64encode(hmac.new(secretKey.encode(), groupId.encode(), sha1).digest()).decode()
  46. client.username_pw_set(accessKey, password)
  47. client.connect(brokerUrl, 1883, 60)
  48. client.subscribe(topic, 0)
  49. for i in range(1, 11):
  50. print(i)
  51. rc = client.publish(topic, str(i), qos=0)
  52. print ('rc: %s' % rc)
  53. time.sleep(0.1)
  54. client.loop_forever()

4. SSL 方式连接服务

使用 Python 客户端通过 SSL 方式来连接服务,需要客户端支持 SNI。

如果是 Paho 提供的客户端,请根据 Release Note 确认是否支持 SNI。如果没有,请按照本文第2步-环境准备的说明安装 patch。

相比标准方式,使用 SSL 方式时需要注意以下两点:

  • 加密端口应设置为8883。
  • 需要导入服务端公钥证书,并配置 TLS 参数。证书下载链接如下:ca.crt

同理,代码上需要在连接之前导入证书文件,并设置连接的 broker 地址。

  1. client.tls_set('XXX.crt', server_hostname='XXXXXXX')
  2. client.connect(brokerUrl, 8883, 60)
本文导读目录
本文导读目录
以上内容是否对您有帮助?