wx-tools 关于WxMessageRouter的详解

2023-03-22 17:19 更新

WxMessageRouter消息路由器,不知道你们理解了多少,接下来还是详细讲解一下需要注意的细节。

提到这个路由器,就要说说另一个东西:WxMessageRouterRule。简称规则(Rule)。

定义规则,用于对来自微信服务器的消息进行过滤和筛选,只针对有效消息进行处理,提高服务器处理效率。

通过链式配置路由规则(Rule),根据规则把来自微信的消息交给handler处理。

注意:

  1. 配置路由规则时尽量按照从细到粗的原则,否则可能消息可能会被提前处理
  2. 默认情况下消息只会被处理一次,除非使用 {WxMessageRouterRule的next()方法}
  3. 规则的结束必须用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);

关于路由规则条件

  1. 对于一条消息(WxXMLMessage)允许多个规则(Rule)去进行过滤和处理。用next()方法去连接两个规则。但是最后必须是以end()方法结束。
  2. 每条规则可以允许多个拦截器(Interceptor),多个处理器(Handler)处理。返回最后一个Handler处理的结果。
  3. 路由规则还提供正则表达式过滤,对于简单的过滤需求,如只接受数字消息。不想繁琐的建立Matcher匹配器。可以如下写法。
    //正则表达式:^[0-9]*$只接受数字消息,其他消息过滤。
    router.rule().rContent("^[0-9]*$").handler(new DemoHandler()).end();

去除多余消息,高效处理争对性消息,真是好用又简单。

小小总结一下

至此,如果你跟着做,并且都成功了话。你已经入门了wx-tools了。以后无非就是根据用户需求添加路由规则,并添加处理器去处理,入门教程就到此结束了。

DEMO的源码下载地址: music_collector

其实DEMO里还有关键字搜索并推送图文消息给用户的功能. 文档里没演示出来.有兴趣的同学可以查阅源代码.

  • ChangeNewsHandler.java
  • WxNewsCollector.java

此外, 关于如何使用IService里的接口,会在第三节详细提供demo用法,各位大大有需要可以去看看。

其实最终的效果是这样的:

渣渣辉搜索

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号