美文网首页
Redis发布与订阅

Redis发布与订阅

作者: 蓝色Hippie | 来源:发表于2020-08-19 06:36 被阅读0次

一、发布与订阅

实际中,redis很少使用发布与订阅来代替MQ角色。

二、使用redis客户端实现

    Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。一个redis客户端可以订阅任意多大频道channel,一个频道也可以被多个客户端订阅。

    1.创建并监听频道

发布

    2.向创建的频道发送一条消息

订阅

三、demo

1.订阅者需要继承抽象类JedisPubSub;重写方法onMessage接收发布者发送的消息

Farmer Worker Programmer

2.定义发布者

3.测试类

public class Main {

    public static final String CHANNEL_NAME = "MyChannel";

    public static final String REDIS_HOST = "localhost";

    public static final int REDIS_PORT = 6379;

    private final static Logger logger = Logger.getLogger(Main.class);

    private final static JedisPoolConfig POOL_CONFIG = new JedisPoolConfig();

    private final static JedisPool JEDIS_POOL =

            new JedisPool(POOL_CONFIG, REDIS_HOST, REDIS_PORT, 0);

    public static void main(String[] args) throws Exception {

        PropertyConfigurator.configure("src/log4j.properties");

        /*订阅者redis客户端*/

        final Jedis farmerJedis = JEDIS_POOL.getResource();

        final Jedis workerJedis = JEDIS_POOL.getResource();

        final Jedis programmerJedis = JEDIS_POOL.getResource();

        /*发布者redis*/

        final Jedis publisherJedis = JEDIS_POOL.getResource();

        final Farmer farmer = new Farmer();

        final Worker worker = new Worker();

        final Programmer programmer  = new Programmer();

        //订阅线程:接收消息,因为Jedis是以阻塞的方式等待发布者消息的,所以每个Jedis客户端必须对应一个独立的线程。不然只会有第一个Jedis接受到消息。

        new Thread(new Runnable() {

            public void run() {

                try {

                    farmerJedis.subscribe(farmer,CHANNEL_NAME);

                    logger.info("Subscription ended.");

                } catch (Exception e) {

                    logger.error("Subscribing failed.", e);

                }

            }

        }).start();

        new Thread(new Runnable() {

            public void run() {

                try {

                    workerJedis.subscribe(worker,CHANNEL_NAME);

                    logger.info("Subscription ended.");

                } catch (Exception e) {

                    logger.error("Subscribing failed.", e);

                }

            }

        }).start();

        new Thread(new Runnable() {

            public void run() {

                try {

                    programmerJedis.subscribe(programmer,CHANNEL_NAME);

                    logger.info("Subscription ended.");

                } catch (Exception e) {

                    logger.error("Subscribing failed.", e);

                }

            }

        }).start();

        //主线程:发布消息到CHANNEL_NAME频道上

        WeatherServer weatherServer = new WeatherServer();

        weatherServer.publishMessage(publisherJedis,CHANNEL_NAME,"rain");

        farmerJedis.close();

        workerJedis.close();

        programmerJedis.close();

    }

}

相关文章

  • redis-订阅与发布

    redis-订阅与发布 Redis 通过 PUBLISH 、 SUBSCRIBE 等命令实现了订阅与发布模式, 这...

  • 101-Redis 订阅与发布

    订阅与发布 ¶Redis 发布订阅 http://www.redis.net.cn/order/3633.html...

  • Redis实现不可靠发布/订阅功能

    Redis的发布/订阅模型 Redis 通过 PUBLISH 、 SUBSCRIBE 等命令实现了订阅与发布模式,...

  • Redis发布与订阅

    一、发布与订阅 实际中,redis很少使用发布与订阅来代替MQ角色。 二、使用redis客户端实现 Redis 发...

  • Redis源码研究之订阅与发布

    本文主要说明Redis的两种订阅模式的实现。 建议阅读: 1、Redis订阅与发布理论说明见:Redis之发布与...

  • Redis 实战 —— 05. Redis 其他命令简介

    发布与订阅 P52 Redis 实现了发布与订阅(publish/subscribe)模式,又称 pub/sub ...

  • Redis发布订阅模式

    Redis支持发布订阅模式,先了解一下与发布订阅相关的命令。 发布订阅模式命令 SUBSCRIBE命令用于订阅ch...

  • Redis高级

    Redis高级 发布订阅 Redis提供了发布订阅功能,可以用于消息的传输 Redis的发布订阅机制包括三个部分,...

  • redis 事务

    redis的发布与订阅订阅一个频道:subscribe channel(频道名称) ...发布消息:publish...

  • redis发布与订阅

    Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息。 发...

网友评论

      本文标题:Redis发布与订阅

      本文链接:https://www.haomeiwen.com/subject/ycqhjktx.html