一、使用背景

请看下图:

(1)服务端发布消息给物联网套件。设备从物联网套件订阅消息。

(2)设备发布消息到物联网套件,物联网转发消息到MNS消息服务,防止设备发布消息过多。服务端从MNS队列中获取设备所发送的消息。

二、阿里MNS概述

阿里云消息服务(Message Service)是一种高效、可靠、安全、便捷、可弹性扩展的分布式消息服务。MNS能够帮助应用开发者在他们应用的分布式组件上自由的传递数据、通知消息,构建松耦合系统。

消息服务同时支持各种类型消息推送,其中和短信前后端的无缝整合更高效的为用户提供了大批量短信发送能力。

消息服务提供了两种模型:

队列模型
主题模型
两种功能模型的区别:

队列模型支持一对一发送和接收消息;
主题模型支持一对多发布和订阅消息,并且支持多种消息推送方式。

祥见:
https://help.aliyun.com/document_detail/27414.html?spm=5176.product27412.6.539.V8xbIQ

三、laravel框架集成MNS服务


1、下载phpSDK
地址:
https://help.aliyun.com/document_detail/32381.html?spm=5176.doc27414.6.669.AbIcAg

2、楼主这边使用的laravel5.1框架,使用MNS的队列模型
(1)引入SDK


在app下新建Libs文件夹,用于存放第三方的组件。

(2)在项目中使用

 // 获取 阿里云 MNS 对象public function ali_mns_obj(){// 先往队列里面发消息试试$accessId = env('ali_iot_mns_id');$accessKey = env('ali_iot_mns_key');$endPoint = "在MNS控制台,点击获取endpoint";//这里需要先在控制台新建队列$queueName = '你的队列名称';//实例化获取MNS对象$client = new Client($endPoint, $accessId, $accessKey);$queue = $client->getQueueRef($queueName);return $queue;}

这边的accessId和accessKey都需要在控制台获取。endpoint部分需要注意,最好你的项目所在服务器和MNS所在服务器一致,不然的话,拉取队列消息的速度会很慢。

(3)这边用的是批量拉取队列消息接口:BatchReceiveMessageRequest()

 public function handle_msg_list(){for ($i=0; $i < 10; $i++) {  // 10 * 16  每次运行处理160条//先调用上面的方法,获取MNS对象$queue = $this->ali_mns_obj();//用MNS对象调用MNS提供的接口。这边是批量拉取活跃数据//16代表每次最多拉取16条数据//30代表失效,30秒拉取不到则失败$obj_receives = $queue->batchReceiveMessage(new BatchReceiveMessageRequest(16,30) );//拉取到数据之后,循环,使用getMessages()方法获取到消息内容foreach ($obj_receives->getMessages() as $k) {// 示例数据// {"payload":"c3RfZm8=","messagetype":"upload","messageid":307,"topic":"/q5dL8yereAg/ssc-cl-00002/update","timestamp":1510991583}//使用getMessageBody()方法获取消息的主体部分,注意,需要解密$msg = $k->getMessageBody(); // payload部分数据,需 base64解码$obj = json_decode($msg);$d['str'] = base64_decode($obj->payload);$d['time'] = date('Y-m-d h:i:s', $obj->timestamp  );//这里是判断消息的类型。其实到这一步,已经成功获取到消息了if( $obj->messagetype == 'upload' ){$this->ali_mns_handle($obj); // 如果是机器上传的信息,则处理}$str = json_encode($d);// 给硬件人员看if( $str!=false ){Redis::lPush('ali_iot_mns_list', $str);}// 删除$obj_del = $queue->deleteMessage(   $k->getReceiptHandle()  );}}return MyResponse::success();}

具体的解释请看注释部分
MNS接口列表:
https://help.aliyun.com/document_detail/35134.html?spm=5176.doc27490.6.709.Q0LmiV

这里成功获取到消息之后,就算是走通了,接下来就可以根据自己的业务进行coding。

end

php集成阿里MNS消息服务相关推荐

  1. springboot集成阿里MNS消息队列发布订阅消息功能

    声明: 上一篇文章是springboot集成阿里ons发布订阅消息,此篇文章是mns发布订阅功能先简单记录一下ons与mns有什么区别 这里是在网上找的对比图: 此处为具体区别文章链接:点击打开链接 ...

  2. Spring Boot集成阿里云视频点播服务的过程记录

    阿里云视频点播 效果预览 视频点播 视频点播概述 功能 优势 流程 环境准备 开通视频点播 创建RAM用户并授权 上传SDK 上传流程 下载上传SDK 安装上传SDK 集成Java上传SDK 异常说明 ...

  3. MNS消息服务计费处理参考

    概述 近期因为阿里云MNS计费模式调整,很多用户之前创建的实例,因为之前每个区域都有一个实例免费的额度,所以不使用也不会收费.但是最近计费调整后不再提供单个区域一个实例的免费额度,所以出现了很多计费的 ...

  4. 阿里云消息服务MNS-PHP+SDK

    队列使用手册 - 消息服务MNS - 阿里云 1.使用composer或者直接下载 2.在使用的地方去引入 3.直接封装好发消息的类 使用的时候直接调用

  5. 使用阿里云消息服务mns发送短信

    下载mns wget http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/32305/cn_zh/1490269182462 ...

  6. PHP安装阿里云消息服务MNS的SDK

    首先配置好PHP和Composer https://blog.csdn.net/msllws/article/details/106399646 然后在网站根目录打开命令行执行 composer re ...

  7. Android集成阿里云消息推送的方法步骤

    一 创建App应用 1.1 在控制台发(https://mhub.console.aliyun.com)的App列表页,点击页面产品列表中"添加产品"的图标即可创建一个新的产品(产 ...

  8. 阿里云消息服务(Message Service)-基本概念

    Account Account 是阿里云的注册用户,在 MNS 中以阿里云注册帐号的 ID 表示. 队列模型 队列所有者 开通 MNS 服务的 Account 通过 CreateQueue 接口创建出 ...

  9. Android 快速集成阿里云OSS服务2020

    一.兼单快速集成 1.打开阿里云官网 https://www.aliyun.com并注册账号,然后登陆 2.在阿里云主页选择产品分类,再选择对象存储OSS 3.点击帮助文档开始进行集成 (1).点击帮 ...

最新文章

  1. Haskell / GHC中的“ forall”关键字有什么作用?
  2. 分布式系统理论基础1: 一致性、2PC和3PC
  3. java 微信转账 ca_error_C#关于微信红包开发问题:CA证书出错,请登录微信支付商户平台下载证书...
  4. win10文件显示后缀名_Win10一开机,内存占用竟高达60%?你可以尝试这样做
  5. 信息学奥赛一本通(1016:整型数据类型存储空间大小)
  6. 《Unix网络编程(第3版)》代码编译的一些问题
  7. 这12道经典性能测试人员面试题,你都见过哪几道?(下)
  8. 云盘上传一直显示服务器出错_百度云盘一直服务器忙 百度网盘出现服务器错误...
  9. ios系统gps测试软件,GPS工具箱
  10. thinkphp5 excel导入导出
  11. Hive 安全模式下 Prepare Plan 的时间分析
  12. 自己动手开发编译器(三)有穷自动机
  13. 计算机组成原理练习题——机器码与加减运算
  14. Ubuntu18.04下 安装SMPlyer视频播放器 设置倍速播放
  15. 浙江大学远程教育计算机应用基础第4次,浙江大学远程教育计算机应用基础2013年秋-4.Excel知识题...
  16. 回归——一元线性回归
  17. HTTP 账号密码验证
  18. backupexec mysql_MySQL使用mysqldump备份及还原
  19. 刨根问底Objective-C Runtime
  20. 深度学习网络结构图绘制工具及方法

热门文章

  1. oracle客户端没有装exp,oracle 10G 客户端安装后,尝试 exp 命令报错, 求解
  2. LCCL网络:相互指导博弈来提升目标检测精度(附源代码)
  3. python 利用多进程实现文件的拷贝
  4. float64toint
  5. index 0 does not match the shape of the indexed tensor [8, 8, 4] at index 0
  6. vs编译cuda DLL
  7. python随机补边缘border
  8. linux wget下载、断点续传
  9. matlab三角形旋转动态,新手向!用WebGL写一个旋转的动态三角形,总共分三步!!(注释超详细!!)...
  10. Android在桌面上添加开关,多键开关 Andromax v1.1.7