Redisを使用してMQを実装する

        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です。本番メッセージの公開は、指定されたチャネルにメッセージを公開します。特定のメッセージをサブスクライブするには、サブスクライブします。

 

おすすめ

転載: blog.csdn.net/qq_41061437/article/details/108517630