zoukankan      html  css  js  c++  java
  • 微信公众平台开发:请求消息去重

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

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

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

    1
    messageHandler.OmitRepeatedMessage = true;//启用消息去重功能
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    /// <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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    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;//重复消息,取消执行
            }
        }
    }

     

  • 相关阅读:
    乘法DAC一点知识
    #4 判断字符串是否为整数
    #3 不使用循环输出1到100
    #2 判断一个字符串是否包含重复字符
    #22 结语
    #1 组成互不相同且不重复的三位数
    #21 Python异常
    #19 re&jieba模块
    2020国庆正睿笔记
    2019正睿csp-s赛前冲刺
  • 原文地址:https://www.cnblogs.com/myf008/p/8550759.html
Copyright © 2011-2022 走看看