被动回复还是主动发送?
公众号收到用户消息后,如果要被动回复消息,必须在5秒内完成。
如果要要主动发送消息,必须在48小时内完成。
48小时后,只能用模板消息(格式有限制)或群发消息(条数有限制)的形式完成。
由于5秒的限制,所以必须保持服务端项目处于轻负荷状态,而有些消息的回复,是需要经过一定的查询计算或处理才能形成回复结果,会耗费一定的时间,此时采用被动回复时不恰当的,只能采用主动发送。
我建议对于达到一定规模的系统,负责接收客户消息的服务端项目不要涉及具体业务的处理,收到消息后,直接将消息存入数据库,然后回复一个类似“消息收到,正在处理...”的提示给客户
,或直接回复一个空消息。同时开启另一个项目,专门负责从数据库中提取新收到的消息,进行查询计算或处理,形成回复结果后,用主动发送的方式,将结果发送给客户。
这样的设计并不复杂,服务端项目和业务项目共用一个数据库,业务项目开启一个计划,定期从数据库追载新的消息进行处理即可,同时建议将处理完成的行(消息)从数据表中移除,避免表中数据越来越多。如果希望有更快捷的响应,可以利用OpenQQ和UDPClient连接服务端项目和业务项目,这样响应更及时,也能降低数据库服务器的负荷。
多个项目协同工作,必须考虑AccessToken的缓存冲突问题,请参考:中控服务器的设计