ActiveMQ、RabbitMQ、Kafkaなど、多くの一般的なメッセージセンターがあります。このブログは、主にRedisを使用してMQ関数を実装することに焦点を当てています。
MQによって実装される機能は、生成されたメッセージを消費することです。特定の消費モデルは、ポイントツーポイント消費、パブリッシュ/サブスクライブ消費です。Redisは、ポイントツーポイント、パブリッシュ/サブスクライブもこの方法で実装し、特定のコードは次のとおりです。表示されます。
ポイントツーポイントの消費者:
public class RedisQueueConsumer {
@Test
public void consumer() {
Jedis jedis = new Jedis("xxx.xxx.xxx.xxx",6379);
while (true)
{
//使用redis的rpop来获取对应的key的value
String value = jedis.rpop("key");
while(value != null)
{
System.out.println(value);
break;
}
}
}
}
ポイントツーポイントプロデューサー:
public class RedisQueueTest {
@org.junit.Test
public void producer()
{
Jedis jedis = new Jedis("xxx.xxx.xxx.xxx",6379);
// 生产消息
for (int i = 1;i <= 10;i++)
{
//主要使用redis中的lpush
jedis.lpush("key", "这是第" + i + "个消息");
}
jedis.close();
}
}
最初にコンシューマーを開始し、次にプロデューサーがメッセージ、結果グラフを生成します。
パブリッシュ/サブスクライブモデル:
最初に監視コードを記述し、JedisPubSubを継承してから、次の内部でonMessageメソッドを書き直します。
public class Subscriber extends JedisPubSub {
public Subscriber(){}
@Override
public void onMessage(String channel, String message) {
System.out.println(message);
}
@Override
public void onSubscribe(String channel, int subscribedChannels) {
super.onSubscribe(channel, subscribedChannels);
}
@Override
public void onUnsubscribe(String channel, int subscribedChannels) {
super.onUnsubscribe(channel, subscribedChannels);
}
}
消費者:
public class RedisTopicConsumer {
@Test
public void consumer() {
Subscriber subscriber = new Subscriber();
Jedis jedis = new Jedis("xxx.xxx.xxx.xx",6379);
while (true)
{
//监听消息
jedis.subscribe(subscriber,"key");
}
}
}
プロデューサー:
public class RedisTopicTest {
@org.junit.Test
public void producer()
{
Jedis jedis = new Jedis("xxx.xxx.xxx.xxx",6379);
// 生产消息
for (int i = 1;i <= 10;i++)
{
//取消息
jedis.publish("key", "这是第" + i + "个消息");
}
jedis.close();
}
}
コンシューマーを開始し、プロデューサーを開いてメッセージを生成すると、メッセージはコンシューマー用にサブスクライブされます。
実際、プロセス全体はRedisの機能を使用することであり、本番メッセージはlpushを使用してキューに参加し、フェッチメッセージはキューからのrpopです。本番メッセージの公開は、指定されたチャネルにメッセージを公開します。特定のメッセージをサブスクライブするには、サブスクライブします。