溫馨提示×

溫馨提示×

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

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

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

發布時間:2021-07-07 16:04:06 來源:億速云 閱讀:223 作者: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

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女