wx-tools 關(guān)于WxMessageRouter的詳解

2023-03-22 17:19 更新

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

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

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

通過鏈?zhǔn)脚渲寐酚梢?guī)則(Rule),根據(jù)規(guī)則把來自微信的消息交給handler處理。

注意:

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

使用方法:

  1. //初始化一個(gè)路由器,把wxService傳入。
  2. WxMessageRouter router = new WxMessageRouter(wxService);
  3. //新建路由規(guī)則,通過rule()方法創(chuàng)建新的規(guī)則,然后鏈?zhǔn)教顚戇^濾條件。MSG_TYPE等參數(shù)填入WxConst中的常量,這里不作展示,可以查看WxConst代碼或官方文檔,有注釋。
  4. router.rule().msgType("MSG_TYPE").event("EVENT").eventKey("EVENT_KEY").content("CONTENT").matcher(matcher).interceptor(interceptor, ...).handler(handler, ...).end()
  5. .rule().msgType("MSG_TYPE")...//另外一個(gè)匹配規(guī)則.end();
  6. // 將WxXmlMessage交給消息路由器,處理后得到結(jié)果。
  7. WxXmlOutMessage xmlOutMsg = router.route(wxXmlMessage);

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

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

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

小小總結(jié)一下

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

DEMO的源碼下載地址: music_collector

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

  • ChangeNewsHandler.java
  • WxNewsCollector.java

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

其實(shí)最終的效果是這樣的:

渣渣輝搜索

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號