メッセージキューのtopicモードをredisで実現
2960 ワード
redisは同様にメッセージキューのパブリケーションサブスクリプション機能を実現することができ、パブリケーションメッセージは比較的簡単に使用され、サブスクリプションメッセージは手動でredisを継承する必要がある.clients.jedis.JedisPubSubという抽象クラスは,消費者が動作するとこの実現クラスのメソッドをコールバックする.
2つのmavenプロジェクト、生産者、消費者を新設します.
生産者のpomファイルは以下の通りです.
生産者のmainメソッド
消費者のpomファイルは生産者と同じです
消費者はredisを手動で継承する必要がある.clients.jedis.JedisPubSubという抽象クラスは、一部を書き換えるために必要な方法です.
消費者のmain方法
注意消費者のmainメソッドを起動してサブスクリプションを開始し、生産者のメッセージの発行を開始する必要があります.
ここでのサブスクリプションチャネルは完全に一致するルールを採用しており,redisはルールによるサブスクリプションもサポートしているが,ここでは後述しない.
メッセージキューを実装するredisのqueueモードを理解するには、別の記事を参照してください.http://blog.csdn.net/jia_costa/article/details/79030621
2つのmavenプロジェクト、生産者、消費者を新設します.
生産者のpomファイルは以下の通りです.
4.0.0
com.tansun
ProducerTest
0.0.1-SNAPSHOT
redis.clients
jedis
2.9.0
生産者のmainメソッド
package com.tansun;
import java.util.Date;
import redis.clients.jedis.Jedis;
public class ProducerTest {
@SuppressWarnings("resource")
public static void main(String[] args) {
Jedis jedis = new Jedis("192.168.229.128", 6379);
// “channel1” ,
Long publishCount = jedis.publish("channel1", new Date() + ": hello redis channel1");
jedis.publish("channel1","close channel");
System.out.println(" , " +publishCount + " ");
}
}
消費者のpomファイルは生産者と同じです
消費者はredisを手動で継承する必要がある.clients.jedis.JedisPubSubという抽象クラスは、一部を書き換えるために必要な方法です.
package com.tansun;
import redis.clients.jedis.JedisPubSub;
public class MessageHandler extends JedisPubSub {
/*
* channel ,
*/
@Override
public void onMessage(String channel, String message) {
//
System.out.println(channel + " :" + message);
// close channel,
if("close channel".equals(message)){
this.unsubscribe(channel);
}
}
/*
* channel
*/
@Override
public void onSubscribe(String channel, int subscribedChannels) {
System.out.println(channel + " "+ subscribedChannels +" ");
}
/*
* channel
*/
@Override
public void onUnsubscribe(String channel, int subscribedChannels) {
System.out.println(channel + " ");
}
}
消費者のmain方法
package com.tansun;
import redis.clients.jedis.Jedis;
public class ConsumerTest {
@SuppressWarnings("resource")
public static void main(String[] args) {
Jedis jedis = new Jedis("192.168.229.128", 6379);
MessageHandler handler = new MessageHandler();
jedis.subscribe(handler, "channel1");
}
}
注意消費者のmainメソッドを起動してサブスクリプションを開始し、生産者のメッセージの発行を開始する必要があります.
ここでのサブスクリプションチャネルは完全に一致するルールを採用しており,redisはルールによるサブスクリプションもサポートしているが,ここでは後述しない.
メッセージキューを実装するredisのqueueモードを理解するには、別の記事を参照してください.http://blog.csdn.net/jia_costa/article/details/79030621