メッセージキューのtopicモードをredisで実現

2960 ワード

redisは同様にメッセージキューのパブリケーションサブスクリプション機能を実現することができ、パブリケーションメッセージは比較的簡単に使用され、サブスクリプションメッセージは手動でredisを継承する必要がある.clients.jedis.JedisPubSubという抽象クラスは,消費者が動作するとこの実現クラスのメソッドをコールバックする.
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