博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Senparc.Weixin.MP SDK 微信公众平台开发教程(十四):请求消息去重
阅读量:6079 次
发布时间:2019-06-20

本文共 1580 字,大约阅读时间需要 5 分钟。

  为了确保信息请求消息的到达率,微信服务器在没有及时收到响应消息(ResponseMessage)的情况下,会多次发送同一条请求消息(RequestMessage),包括MsgId等在内的所有文本内容都是一致的。

  这种机制确保了在诸如网络状况不佳的情况下消息的回复成功率,但是有时候由于服务器负荷、本身请求过程就需要好几秒才能完成等情况,多次重复的消息反而成了服务器的负担,甚至对业务和数据也可能造成影响。

  针对这种情况,SDK增加了去重的设置,只需要在使用MessageHandler的时候加一句话即可:

 

messageHandler.OmitRepeatedMessage = true;//启用消息去重功能

 

///         /// 最简化的处理流程(不加密)        ///         [HttpPost]        [ActionName("MiniPost")]        public ActionResult MiniPost(string signature, string timestamp, string nonce, string echostr)        {            if (!CheckSignature.Check(signature, timestamp, nonce, Token))            {                return new WeixinResult("参数错误!");//v0.8+            }            var messageHandler = new CustomMessageHandler(Request.InputStream, null, 10);            messageHandler.OmitRepeatedMessage = true;//启用消息去重功能            messageHandler.Execute();//执行微信处理过程            return new FixWeixinBugWeixinResult(messageHandler);        }

  去重的原理是通过当前用户的,判断当前请求消息和上一条请求消息的MsgId是否一致,如果一直的话则终止向下执行。

文件:Senparc.Weixin.MessageHandlers.MessageHandler.cs

public virtual void OnExecuting()        {            if (OmitRepeatedMessage && CurrentMessageContext.RequestMessages.Count > 1)            {                var lastMessage = CurrentMessageContext.RequestMessages[CurrentMessageContext.RequestMessages.Count - 2];                if (lastMessage.MsgId != 0 && lastMessage.MsgId == RequestMessage.MsgId)                {                    CancelExcute = true;//重复消息,取消执行                }            }        }

  去重的效果可以在模拟工具中体验:http://weixin.senparc.com/SimulateTool

 

系列教程索引

地址:

 

 

转载地址:http://tyxgx.baihongyu.com/

你可能感兴趣的文章
开源 免费 java CMS - FreeCMS1.2-标签 mailPage
查看>>
sql server 通过sql server 协议进行登录的解析
查看>>
按下返回键,不直接退出而是弹出对话框
查看>>
拦截器__call,_callstatic
查看>>
自学编程的技术大牛是如何进谷歌的
查看>>
IE6 和 IE8下翻页功能的失效差异问题
查看>>
NoSQL&MongoDB
查看>>
[node] 用 node-webkit 开发桌面应用
查看>>
HashTable 与HashMap的区别
查看>>
TiDB 在摩拜单车在线数据业务的应用和实践
查看>>
我的友情链接
查看>>
多使用工具方法
查看>>
超微型微博系统(简单实现)
查看>>
FruityWifi 2.0 试用体会
查看>>
redux资料
查看>>
Elasticsearch上遇到的部分问题及处理
查看>>
PE,Dos工具箱,自动安装linux的U盘制作
查看>>
SpringMVC + Hibernate + Spring集成Log4j日志插件
查看>>
你后台的Activity被系统回收怎么办:onSaveInstanceState
查看>>
减少HTTP请求
查看>>