亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

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

思茅市| 长海县| 乳山市| 佳木斯市| 吴川市| 南江县| 合山市| 张家口市| 盐山县| 东台市| 卫辉市| 镇康县| 五指山市| 鄯善县| 揭西县| 大丰市| 仪陇县| 奉化市| 万山特区| 新巴尔虎右旗| 敖汉旗| 阿拉善左旗| 城固县| 休宁县| 桃江县| 南康市| 安陆市| 临朐县| 团风县| 孟津县| 丰城市| 石城县| 寻甸| 阿克| 汉阴县| 大埔区| 中方县| 饶河县| 吉木萨尔县| 台湾省| 修武县|