wx-tools 關于WxMessageRouter的詳解

2023-03-22 17:19 更新

WxMessageRouter消息路由器,不知道你們理解了多少,接下來還是詳細講解一下需要注意的細節(jié)。

提到這個路由器,就要說說另一個東西:WxMessageRouterRule。簡稱規(guī)則(Rule)。

定義規(guī)則,用于對來自微信服務器的消息進行過濾和篩選,只針對有效消息進行處理,提高服務器處理效率。

通過鏈式配置路由規(guī)則(Rule),根據(jù)規(guī)則把來自微信的消息交給handler處理。

注意:

  1. 配置路由規(guī)則時盡量按照從細到粗的原則,否則可能消息可能會被提前處理
  2. 默認情況下消息只會被處理一次,除非使用 {WxMessageRouterRule的next()方法}
  3. 規(guī)則的結束必須用WxMessageRouterRule的end()方法或者WxMessageRouterRule的next()方法,否則不會生效。

使用方法:

//初始化一個路由器,把wxService傳入。
WxMessageRouter router = new WxMessageRouter(wxService);
//新建路由規(guī)則,通過rule()方法創(chuàng)建新的規(guī)則,然后鏈式填寫過濾條件。MSG_TYPE等參數(shù)填入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")...//另外一個匹配規(guī)則.end();
// 將WxXmlMessage交給消息路由器,處理后得到結果。
WxXmlOutMessage xmlOutMsg = router.route(wxXmlMessage);

關于路由規(guī)則條件

  1. 對于一條消息(WxXMLMessage)允許多個規(guī)則(Rule)去進行過濾和處理。用next()方法去連接兩個規(guī)則。但是最后必須是以end()方法結束。
  2. 每條規(guī)則可以允許多個攔截器(Interceptor),多個處理器(Handler)處理。返回最后一個Handler處理的結果。
  3. 路由規(guī)則還提供正則表達式過濾,對于簡單的過濾需求,如只接受數(shù)字消息。不想繁瑣的建立Matcher匹配器。可以如下寫法。
    //正則表達式:^[0-9]*$只接受數(shù)字消息,其他消息過濾。
    router.rule().rContent("^[0-9]*$").handler(new DemoHandler()).end();

去除多余消息,高效處理爭對性消息,真是好用又簡單。

小小總結一下

至此,如果你跟著做,并且都成功了話。你已經(jīng)入門了wx-tools了。以后無非就是根據(jù)用戶需求添加路由規(guī)則,并添加處理器去處理,入門教程就到此結束了。

DEMO的源碼下載地址: music_collector

其實DEMO里還有關鍵字搜索并推送圖文消息給用戶的功能. 文檔里沒演示出來.有興趣的同學可以查閱源代碼.

  • ChangeNewsHandler.java
  • WxNewsCollector.java

此外, 關于如何使用IService里的接口,會在第三節(jié)詳細提供demo用法,各位大大有需要可以去看看。

其實最終的效果是這樣的:

渣渣輝搜索

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號