OkHttps 之 Stomp 客戶端

上一篇:OkHttps 之 WebSocket

OkHttps

OkHttps 是 OkHttp 的輕量封裝包隙疚。和 Retrofit 相比财破,它更加的開箱即用嵌灰,并且 API 更加自然和語義化孝扛。它用起來很優(yōu)美呈队,有點(diǎn)像 RxJava 卻比 RxJava 更簡單有勾。

中文網(wǎng)站:http://okhttps.ejlchina.com/

項(xiàng)目地址
Gitee:https://gitee.com/ejlchina-zhxu/okhttps
GitHub:https://github.com/ejlchina/okhttps

Stomp

項(xiàng)目 OkHttps Stomp 基于 OkHttps 的 WebSocket 功能實(shí)現(xiàn)了一個(gè)非常輕量(僅 13KB)的 Stomp 客戶端協(xié)議绪穆,它可以讓你輕松實(shí)現(xiàn) 廣播發(fā)布與訂閱隊(duì)列發(fā)布與訂閱 的客戶端功能刁绒。

添加依賴

要開啟 Stomp 功能,需要添加以下依賴:

Maven

<dependency>
     <groupId>com.ejlchina</groupId>
     <artifactId>okhttps-stomp</artifactId>
     <version>2.5.0</version>
</dependency>

Gradle

implementation 'com.ejlchina:okhttps-stomp:2.5.0'

構(gòu)建 Stomp 實(shí)例

Stomp提供靜態(tài)方法over來構(gòu)建Stomp實(shí)例:

  • over(WebSocketTask task) 基于 OkHttps 的 WebSocket 構(gòu)建一個(gè) Stomp 實(shí)例坊罢,并自動(dòng)確認(rèn)消息
  • over(WebSocketTask task, boolean autoAck) 構(gòu)建一個(gè) Stomp 實(shí)例续担,并可指定是否自動(dòng)確認(rèn)消息

例如:

// 使用一個(gè) Websocket 連接構(gòu)建一個(gè) Stomp 實(shí)例,同時(shí)設(shè)置心跳間隔為 20 秒
Stomp stomp = Stomp.over(OkHttps.webSocket("wss://...").heatbeat(20, 20));

以上代碼構(gòu)建了一個(gè)簡單的 Stomp 客戶端活孩,并默認(rèn)在收到消息時(shí)會(huì)自動(dòng)確認(rèn)物遇,如果需要收到確認(rèn),可以使用下面的方式:

Stomp stomp = Stomp.over(
        OkHttps.webSocket("wss://...").heatbeat(20, 20),
        false       // 參數(shù)設(shè)置 autoAck 為 false,將需要手動(dòng)確認(rèn)消息
    );

連接 Stomp 服務(wù)

得到一個(gè)Stomp實(shí)例后询兴,可使用以下兩個(gè)方法連接 Stomp 服務(wù)器:

  • connect() 直接連接 Stomp 服務(wù)器
  • connect(List<Header> headers) 攜帶一些 Stomp 頭信息連接 Stomp 服務(wù)器

例如:

stomp.connect();

如果服務(wù)器在連接時(shí)需要指令一些額外信息乃沙,比如連接 RabbitMQ 時(shí)需要指定loginpasscodevhost:

List<Header> headers = new ArrayList<>();
headers.add(new Header("login", "username"));
headers.add(new Header("passcode", "xxxxxxx"));
headers.add(new Header("host", "your_vhost"));

stomp.connect(headers);

連接狀態(tài)監(jiān)聽

Stomp.over(OkHttps.webSocket("wss://...").heatbeat(20, 20))
    .setOnConnected(stomp -> {
        // 服務(wù)器連接成功回調(diào)
    })
    .setOnDisconnected(close -> {
        // 連接已斷開回調(diào)
    })
    .setOnError(msg -> {
        // 錯(cuò)誤監(jiān)聽(v2.4.1 新增)
        // 處理服務(wù)器發(fā)出的 ERROR 幀
    })
    .connect();

消息訂閱與退訂

訂閱廣播

stomp.topic("/your-topic", (Message msg) -> {
    // 得到消息負(fù)載
    String payload = msg.getPayload();

    // 如果需要手動(dòng)確認(rèn)消息,調(diào)用此方法確認(rèn)
    stomp.ack(msg)
});

退訂廣播

stomp.untopic("/your-topic");

訂閱隊(duì)列

stomp.queue("/your-queue", (Message msg) -> {
    // 得到消息負(fù)載
    String payload = msg.getPayload();

    // 如果需要手動(dòng)確認(rèn)消息,調(diào)用此方法確認(rèn)
    stomp.ack(msg)
});

退訂隊(duì)列

stomp.unqueue("/your-queue");

發(fā)送消息

// 發(fā)送到廣播
stomp.sendTo("/topic/your-topic", "Hello World");
// 發(fā)送到隊(duì)列
stomp.sendTo("/queue/your-queue", "Hello World");

斷開服務(wù)

stomp.disconnect();

上一篇:OkHttps 之 WebSocket

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末诗舰,一起剝皮案震驚了整個(gè)濱河市警儒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌眶根,老刑警劉巖蜀铲,帶你破解...
    沈念sama閱讀 217,657評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異属百,居然都是意外死亡记劝,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門族扰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來厌丑,“玉大人,你說我怎么就攤上這事渔呵∨停” “怎么了?”我有些...
    開封第一講書人閱讀 164,057評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵扩氢,是天一觀的道長耕驰。 經(jīng)常有香客問我,道長类茂,這世上最難降的妖魔是什么耍属? 我笑而不...
    開封第一講書人閱讀 58,509評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮巩检,結(jié)果婚禮上厚骗,老公的妹妹穿的比我還像新娘。我一直安慰自己兢哭,他們只是感情好领舰,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,562評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著迟螺,像睡著了一般冲秽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上矩父,一...
    開封第一講書人閱讀 51,443評(píng)論 1 302
  • 那天锉桑,我揣著相機(jī)與錄音,去河邊找鬼窍株。 笑死民轴,一個(gè)胖子當(dāng)著我的面吹牛攻柠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播后裸,決...
    沈念sama閱讀 40,251評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼瑰钮,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了微驶?” 一聲冷哼從身側(cè)響起浪谴,我...
    開封第一講書人閱讀 39,129評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎因苹,沒想到半個(gè)月后苟耻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,561評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡容燕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,779評(píng)論 3 335
  • 正文 我和宋清朗相戀三年梁呈,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了婚度。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蘸秘。...
    茶點(diǎn)故事閱讀 39,902評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蝗茁,靈堂內(nèi)的尸體忽然破棺而出醋虏,到底是詐尸還是另有隱情,我是刑警寧澤哮翘,帶...
    沈念sama閱讀 35,621評(píng)論 5 345
  • 正文 年R本政府宣布颈嚼,位于F島的核電站,受9級(jí)特大地震影響饭寺,放射性物質(zhì)發(fā)生泄漏阻课。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,220評(píng)論 3 328
  • 文/蒙蒙 一艰匙、第九天 我趴在偏房一處隱蔽的房頂上張望限煞。 院中可真熱鬧,春花似錦员凝、人聲如沸署驻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽旺上。三九已至,卻和暖如春糖埋,著一層夾襖步出監(jiān)牢的瞬間宣吱,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評(píng)論 1 269
  • 我被黑心中介騙來泰國打工瞳别, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留征候,地道東北人钦听。 一個(gè)月前我還...
    沈念sama閱讀 48,025評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像倍奢,于是被迫代替她去往敵國和親朴上。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,843評(píng)論 2 354