spring基於redis實現訊息訂閱

2021-10-07 05:02:53 字數 2029 閱讀 8924

本文主要記錄一下如何使用spring基於redis提供的pub/sub模型來實現訊息的發布和訂閱處理,只記錄幾個需要注意的切入點.

>

>

org.springframework.bootgroupid

>

>

spring-boot-starter-data-redisartifactid

>

>

2.1.6.releaseversion

>

dependency

>

第一步先用容器中注入訊息***,我們可以通過繼承這個messagelisteneradapter類來實現監聽的邏輯,現在我們先不管實現,先將監聽類和要監聽的主題註冊到容器中

定義配置類,新增訊息***

@configuration

public

class

redisconfig

/** * 配置主題訂閱

* @param connectionfactory

* @param listeneradapter

* @return

*/@bean

public redismessagelistenercontainer listenercontainer

(redisconnectionfactory connectionfactory, messagelisteneradapter listeneradapter)

}

通過繼承這個messagelisteneradapter類來實現監聽的邏輯,需要注意如下問題

如何確認當前訊息屬於哪個主題?

如何反序列化訂閱的主題訊息?

實現邏輯參考如下

@component

@slf4j

public

class

redirectcmdlistener

extends

messagelisteneradapter

***************==="

,new

string

(message.

getbody()

, standardcharsets.utf_8));

// 獲得當前訊息的主題名稱

string channel =

newstring

(message.

getchannel()

, standardcharsets.utf_8)

;// 反序列化回訊息(如果確認傳送的訊息型別的話,可以強轉)

object messagevalue = redistemplate.

getvalueserializer()

.deserialize

(message.

getbody()

);// 區分主題,然後做不同的處理

if(globalconst.redirect_cmd_topic.

equals

(channel))}

else

if(globalconst.return_message_topic.

equals

(channel))}

}/**

* 監聽訊息異常

* @param ex

*/@override

protected

void

handlelistenerexception

(throwable ex)

}

// 要發往的主題,要傳送的資料(任意型別)

redistemplate.convertandsend(globalconst.redirect_cmd_topic, new user().setid("測試").setname("hahaha"));

WebService基於Spring實現

如果需要的話,我也上傳到資源裡了cxf全部資源 一般只需要這幾個包即可 下面幾個包我上傳了cxf部分jar包 cxf與spring整合實現webservice伺服器端步驟 建立dynamic web project,引入cxf的jar包 編寫即將發布為webservice的介面以及實現類 web.x...

spring基於註解方式實現事務

環境搭建 資料來源,資料庫驅動 spring jdbc模組org.springframework groupid spring jdbc artifactid 4.3.12 release version dependency c3p0 groupid c3p0 artifactid 0.9.1 2...

基於Redis實現的單點登入

背景 每個web應用都有自己的session,那如何在分布式或者集群環境下統一session,即如何實現單點登入,如下圖 解決方案 把session資料存放在redis,統一管理,向外提供服務介面,redis可以設定過期時間,對應session的失效時間 優點 訪問速度快,效率高 無單點故障,可以部...