中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring Boot中如何使用redis的發布和訂閱模式

發布時間:2021-07-07 16:04:06 來源:億速云 閱讀:187 作者:chen 欄目:大數據

本篇內容主要講解“Spring Boot中如何使用redis的發布和訂閱模式”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Spring Boot中如何使用redis的發布和訂閱模式”吧!

redis不僅是一個非常強大的非關系型數據庫,它同時還擁有消息中間件的pub/sub功能,在spring boot中進行如下設置就可以使用redis的pub/sub功能:

1.創建redis監聽的設置類

@Configuration
public class RedisSubListenerConfig {
   //初始化監聽器
    [@Bean](https://my.oschina.net/bean)
    RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,
            MessageListenerAdapter listenerAdapter) {
        RedisMessageListenerContainer container = new RedisMessageListenerContainer();
        container.setConnectionFactory(connectionFactory);
        container.addMessageListener(listenerAdapter, new PatternTopic("這里是監聽的通道的名字"));
        return container;
    }
   //利用反射來創建監聽到消息之后的執行方法
    [@Bean](https://my.oschina.net/bean)
    MessageListenerAdapter listenerAdapter(RedisReceiver redisReceiver) {
        return new MessageListenerAdapter(redisReceiver, "receiveMessage");
    }
  
  //使用默認的工廠初始化redis操作模板
    [@Bean](https://my.oschina.net/bean)
    StringRedisTemplate template(RedisConnectionFactory connectionFactory) {
        return new StringRedisTemplate(connectionFactory);
    }
}

2.創建監聽之后的receiver方法類

[@Service](https://my.oschina.net/service)
public class RedisReceiver {
    @Autowired
    RedisService redisService;

    public void receiveMessage(String message) {
        //這里是收到通道的消息之后執行的方法
    }
}

3.使用reidsTemplate向通道發送消息

@Service
public class RedisService {
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
  //向通道發送消息的方法
    public void sendChannelMess(String channel, String message) {
        stringRedisTemplate.convertAndSend(channel, message);
    }
}

附:有些設置在RedisReceiver接受類構造器中傳入了CountDownLatch來控制線程,如果不需要控制線程可以不用。

舉例

@Component
@Slf4j
public class MessageReceiver {

    @Autowired
    ISocketService socketService;

    /**接收消息的方法
     * @throws Exception */
    public void receiveMessage(String message) throws Exception {
        log.info("收到一條消息From Redis:" + message);
        Message msg = JSON.parseObject(message, Message.class);
        if (null == msg.getAction()) {
            throw new Exception("必須設置客戶端收到消息后需要執行的動作");
        }
        if (null == msg.getTableId() || "".equals(msg.getTableId())) {
            throw new Exception("必須設置接收消息的桌碼!");
        }
        if (msg.getAction().equals(Event.NOTICEOTHER)) {
            NoticeOtherDto noticeOtherDto = JSON.parseObject(msg.getData().toString(), NoticeOtherDto.class);
            msg.setData(noticeOtherDto.getData());
            socketService.noticeOther(msg.getTenantId() + "-" + msg.getTableId(), noticeOtherDto.getEventName(), msg);
        } else {
            // 通過WebSocket群發消息
            socketService.sendMessageToTable(msg.getTenantId() + "-" + msg.getTableId(), msg.getAction(), msg);
        }

    }
}
@Component
public class MessageSender {

    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    public void sendMessage(Message message) {
        stringRedisTemplate.convertAndSend(RedisConstant.TOPIC_KEY, JSON.toJSONString(message));
    }
}

到此,相信大家對“Spring Boot中如何使用redis的發布和訂閱模式”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

寻甸| 灵寿县| 浠水县| 凌海市| 邹平县| 百色市| 南皮县| 大关县| 英山县| 宁海县| 南江县| 巴林右旗| 萨嘎县| 凤台县| 东辽县| 德昌县| 时尚| 望奎县| 威远县| 达孜县| 盐山县| 汉沽区| 卓资县| 汤阴县| 光山县| 工布江达县| 锦屏县| 桂阳县| 沭阳县| 大化| 吴堡县| 墨竹工卡县| 新巴尔虎左旗| 溧水县| 渝北区| 菏泽市| 新竹市| 岳西县| 三原县| 高邮市| 河南省|