编辑: 迷音桑 | 2017-10-01 |
5 Manager.ChangeMessageVisibility (ChangeVisibilityTask) 相关的具体事情,在流程 图里有显示.流程图如下: 示例代码下载:ChangeMessageVisibilitySample 长轮询 消息服务 MNS 最佳实践
6 长轮询(LongPolling) 背景知识 MNS提供了LongPolling类型的ReceiveMessage的方法,只需要在ReceiveMessage的时候把 WaitSecond设为一个1-30之间的数就可以了.使用LongPolling可以让Request一直挂在Server上,等 到有Message的时候才返回,在保证了第一时间收到消息的同时也避免用户发送大量无效Request. LongPolling也是MNS的推荐用法. LongPolling是需要挂HTTP层的长连接在Server上,而对于Server来说,HTTP层的长连接的资源是比较 有限的.为了避免受到一些恶意攻击,所以MNS对单用户的LongPolling连接数是有限制的. 问题描述 有一些用户在单台机器上开了上百个线程同时访问MNS Server获取消息,遇到队列中没有消息的时候,单台机 器上就挂了上百个LongPolling的Request.如果用户还同时使用了比较多的机器,那么这些用户就可能会需要 同时发上千个LongPolling的请求. 这种情况下,用户在发LongPolling的Request的时候,就会比较容易遇到: MNS的Server直接返回 消息不存 在 ,而不是Request一直挂在Server端等待消息. 这会导致用户不能得到预期的LongPolling的效果.有一些用户是在一个While循环里面做不停的 LongPolling请求而没有做一些异常处理,然后一夜醒来发现发出了极大量的请求. 解决方案 在开了上百个线程同时访问的情况下,如果队列里已经没有消息了,那么其实不需要上百个线程都同时挂 LongPolling.只需要有1-N个线程挂LongPolling就足够了.挂LongPolling的线程在发现队列里有消息时 ,可以唤醒其他线程一起来取消息以达到快速响应的目的. 长轮询示例代码是一个使用MessageReceiver获取消息的BestPractice.所有取消息的线程,都是new了一个 MessageReceiver,然后使用receiver.receiveMessage来获取消息. Receiver内部做了LongPolling的排他机制,只要有一个线程在做LongPolling,那么其他线程只需要Wait就可 以了. 消息加密传输 消息服务 MNS 最佳实践
7 背景描述 阿里云消息服务MNS提供公网http可访问的服务.对于包含敏感信息的消息,如何进一步提高从用户客户 端程序到阿里云的服务之间的网络链路上的安全性?目前有两种解决方案: 1.MNS提供https的服务域名 (计划中,预计4月中旬可用),用户选用https服务地址. 2.用户对传输的消息........