標籤:
一. redis發布訂閱簡介
發布訂閱(pub/sub)是一種訊息通訊模式,主要的目的是解耦訊息發行者和訊息訂閱者之間的耦合。pub /sub不僅僅解決發行者和訂閱者直接代碼層級耦合,也解決兩者在物理部署上的耦合。
二. 測試源碼 1. 首先啟動redis 2. 發布
建立一個Java Project,然後再建立一個class,為其增加main方法來向redis發布訊息:
package com.luych.message.publish;import redis.clients.jedis.Jedis;public class App { public static void main( String[] args ) { Jedis jedis = new Jedis("127.0.0.1", 6379); jedis.publish("Channel1", "Hello!"); jedis.publish("Channel2", "How do you do!"); jedis.close(); }} 3. 訂閱
建立一個Java Project,然後再建立一個class,繼承JedisPubSub:
package com.luych.message.subscribe;import redis.clients.jedis.JedisPubSub;public class Subscriber extends JedisPubSub { @Override public void onMessage(String channel, String message) { System.out.println("收到訊息,來自" + channel + ",訊息內容:" + message); super.onMessage(channel, message); }}
onMessage方法,為接收到訂閱訊息時候所要執行的方法。
再建立一個class,為其增加main方法來向redis訂閱訊息:
package com.luych.message.subscribe;import redis.clients.jedis.Jedis;public class App { public static void main( String[] args ) { Jedis jedis = new Jedis("127.0.0.1", 6379); jedis.subscribe(new Subscriber(), "Channel1", "Channel2"); jedis.close(); }} 4. 測試回合
首先,運行訂閱端(Run As Java Application),可以看到當主進程執行到jedis.subscribe時,進程即被阻塞,進入訊息監聽狀態。
然後,運行發布端(Run As Java Application),發布端代碼執行結束後,可以看到控制台已經列印出結果了。
收到訊息,來自Channel1,訊息內容:Hello!收到訊息,來自Channel2,訊息內容:How do you do!
三. 後語
上面這個例子非常簡單,但是也可以看出redis在做發布訂閱的優勢了。pub /sub不僅僅解決了發行者和訂閱者直接代碼層級耦合,也解決了兩者在物理部署上的耦合。redis作為一個pub/sub server,在訂閱者和發行者之間起到了訊息路由的功能。訂閱者可以通過subscribe命令向redis server訂閱自己感興趣的訊息類型,redis將訊息類型稱為通道(channel)。當發行者通過publish命令向redis server發送特定類型的訊息時。訂閱該訊息類型的全部client都會收到此訊息。這裡訊息的傳遞是多對多的。一個client可以訂閱多個 channel,也可以向多個channel發送訊息。
redis(4)----發布訂閱