您好,登錄后才能下訂單哦!
本篇內容主要講解“Spring Boot中如何使用redis的發布和訂閱模式”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Spring Boot中如何使用redis的發布和訂閱模式”吧!
redis不僅是一個非常強大的非關系型數據庫,它同時還擁有消息中間件的pub/sub功能,在spring boot中進行如下設置就可以使用redis的pub/sub功能:
@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); } }
[@Service](https://my.oschina.net/service) public class RedisReceiver { @Autowired RedisService redisService; public void receiveMessage(String message) { //這里是收到通道的消息之后執行的方法 } }
@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的發布和訂閱模式”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。