wx-tools 关于WxMessageRouter的详解
2023-03-22 17:19 更新
WxMessageRouter消息路由器,不知道你们理解了多少,接下来还是详细讲解一下需要注意的细节。
提到这个路由器,就要说说另一个东西:WxMessageRouterRule。简称规则(Rule)。
定义规则,用于对来自微信服务器的消息进行过滤和筛选,只针对有效消息进行处理,提高服务器处理效率。
通过链式配置路由规则(Rule),根据规则把来自微信的消息交给handler处理。
注意:
- 配置路由规则时尽量按照从细到粗的原则,否则可能消息可能会被提前处理
- 默认情况下消息只会被处理一次,除非使用 {WxMessageRouterRule的next()方法}
- 规则的结束必须用WxMessageRouterRule的end()方法或者WxMessageRouterRule的next()方法,否则不会生效。
使用方法:
//初始化一个路由器,把wxService传入。
WxMessageRouter router = new WxMessageRouter(wxService);
//新建路由规则,通过rule()方法创建新的规则,然后链式填写过滤条件。MSG_TYPE等参数填入WxConst中的常量,这里不作展示,可以查看WxConst代码或官方文档,有注释。
router.rule().msgType("MSG_TYPE").event("EVENT").eventKey("EVENT_KEY").content("CONTENT").matcher(matcher).interceptor(interceptor, ...).handler(handler, ...).end()
.rule().msgType("MSG_TYPE")...//另外一个匹配规则.end();
// 将WxXmlMessage交给消息路由器,处理后得到结果。
WxXmlOutMessage xmlOutMsg = router.route(wxXmlMessage);
关于路由规则条件
- 对于一条消息(WxXMLMessage)允许多个规则(Rule)去进行过滤和处理。用next()方法去连接两个规则。但是最后必须是以end()方法结束。
- 每条规则可以允许多个拦截器(Interceptor),多个处理器(Handler)处理。返回最后一个Handler处理的结果。
- 路由规则还提供正则表达式过滤,对于简单的过滤需求,如只接受数字消息。不想繁琐的建立Matcher匹配器。可以如下写法。
//正则表达式:^[0-9]*$只接受数字消息,其他消息过滤。 router.rule().rContent("^[0-9]*$").handler(new DemoHandler()).end();
去除多余消息,高效处理争对性消息,真是好用又简单。
小小总结一下
至此,如果你跟着做,并且都成功了话。你已经入门了wx-tools了。以后无非就是根据用户需求添加路由规则,并添加处理器去处理,入门教程就到此结束了。
DEMO的源码下载地址: music_collector
其实DEMO里还有关键字搜索并推送图文消息给用户的功能. 文档里没演示出来.有兴趣的同学可以查阅源代码.
- ChangeNewsHandler.java
- WxNewsCollector.java
此外, 关于如何使用IService里的接口,会在第三节详细提供demo用法,各位大大有需要可以去看看。
其实最终的效果是这样的:
以上内容是否对您有帮助:
更多建议: