Senparc.Weixin.MP SDK 微信公众平台开发教程(十四):请求消息去重

为提高服务器效率并避免重复消息处理导致的问题,Senparc.Weixin.MPSDK提供了请求消息去重功能。该功能通过比较当前请求与上一条请求的MsgId来判断是否为重复消息,若相同则取消后续处理流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文: Senparc.Weixin.MP SDK 微信公众平台开发教程(十四):请求消息去重

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

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

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

 

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

 

       /// <summary>
        /// 最简化的处理流程(不加密)
        /// </summary>
        [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://www.cnblogs.com/szw/archive/2013/05/14/weixin-course-index.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值