Redis必知必會(huì)——發(fā)布訂閱-創(chuàng)新互聯(lián)

銀行卡消費(fèi)的時(shí)候,銀行往往會(huì)通過(guò)微信、短信或郵件通知用戶(hù)交易的詳細(xì)信息,這便是發(fā)布訂閱模式。
Redis必知必會(huì)——發(fā)布訂閱
我們可以使用下面的命令進(jìn)行模擬

創(chuàng)新互聯(lián)為您提適合企業(yè)的網(wǎng)站設(shè)計(jì)?讓您的網(wǎng)站在搜索引擎具有高度排名,讓您的網(wǎng)站具備超強(qiáng)的網(wǎng)絡(luò)競(jìng)爭(zhēng)力!結(jié)合企業(yè)自身,進(jìn)行網(wǎng)站設(shè)計(jì)及把握,最后結(jié)合企業(yè)文化和具體宗旨等,才能創(chuàng)作出一份性化解決方案。從網(wǎng)站策劃到成都網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、外貿(mào)網(wǎng)站建設(shè), 我們的網(wǎng)頁(yè)設(shè)計(jì)師為您提供的解決方案。

先打開(kāi)一個(gè)客戶(hù)端1,輸入命令

SUBSCRIBE chat

表示客戶(hù)端1訂閱一個(gè)名為chat的渠道,之后打開(kāi)客戶(hù)端2,輸入命令

publish chat "Hello World!"

Redis必知必會(huì)——發(fā)布訂閱
在Spring中,我們自定義接收消息的類(lèi),需要實(shí)現(xiàn)MessageListener接口,并實(shí)現(xiàn)接口定義的方法onMessage,代碼如下。

public class RedisMessageListener implements MessageListener {

    @SuppressWarnings("rawtypes")
    private RedisTemplate rt;

    @SuppressWarnings("rawtypes")
    public RedisTemplate getRt() {
        return rt;
    }

    @SuppressWarnings("rawtypes")
    public void setRt(RedisTemplate rt) {
        this.rt = rt;
    }

    @Override
    public void onMessage(Message message, byte[] pattern) {
        // 獲取消息
        byte[] body = message.getBody();
        // 使用值序列化器轉(zhuǎn)換
        String msgBody = (String)getRt().getValueSerializer().deserialize(body);
        System.out.println(msgBody);
        // 獲取channel
        byte[] channel = message.getChannel();
        // 使用字符串序列化器轉(zhuǎn)換
        String channelStr = (String)getRt().getStringSerializer().deserialize(channel);
        System.out.println(channelStr);
        // 渠道名稱(chēng)轉(zhuǎn)換
        String bytesStr = new String(pattern);
        System.out.println(bytesStr);
    }

}

這里我們沒(méi)有使用注解,所以要去spring.xml中注冊(cè)bean

<!-- 實(shí)例化類(lèi) -->
<bean id="redisMsgListener" class="com.codeliu.transaction.RedisMessageListener">
    <property name="rt" ref="redisTemplate"></property>
</bean>

實(shí)例化監(jiān)聽(tīng)類(lèi)之后還不行,還得給一個(gè)監(jiān)聽(tīng)容器,在Spring中對(duì)應(yīng)的類(lèi)為RedisMessageListenerContainer,它可以用來(lái)監(jiān)聽(tīng)Redis的發(fā)布訂閱消息。同樣在Spring.xml中進(jìn)行配置

<!-- 配置監(jiān)聽(tīng)容器 -->
<bean id="topicContainer" class="org.springframework.data.redis.listener.RedisMessageListenerContainer" destroy-method="destroy">
    <!-- redis連接工廠(chǎng) -->
    <property name="connectionFactory" ref="connectionFactory"></property>      
    <!-- 連接池,只有線(xiàn)程池生存,才能繼續(xù)監(jiān)聽(tīng) -->
    <property name="taskExecutor">
        <bean class="org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler">
            <property name="poolSize" value="3"></property>
        </bean>
    </property>     
    <!-- 消息監(jiān)聽(tīng)map -->
    <property name="messageListeners">
        <map>
            <!-- 配置監(jiān)聽(tīng)者,key-ref與bean id保持一致 -->
            <entry key-ref="redisMsgListener">
                <!-- 監(jiān)聽(tīng)類(lèi) -->
                <bean class="org.springframework.data.redis.listener.ChannelTopic">
                    <constructor-arg value="chat"></constructor-arg>
                </bean>
            </entry>
        </map>
    </property>
</bean>

這里配置了線(xiàn)程池,這個(gè)線(xiàn)程池將會(huì)持續(xù)的生存以等待消息傳入,而這里配置了容器用id為redisMsgListener的Bean進(jìn)行渠道chat的監(jiān)聽(tīng)。當(dāng)消息通過(guò)渠道chat方法的時(shí)候,就會(huì)使用id為redisMsgListener的Bean處理消息。

下面進(jìn)行測(cè)試

public static void main(String[] args) {
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml");
    RedisTemplate rt = applicationContext.getBean(RedisTemplate.class);
    String channel = "chat";
    // 向渠道chat發(fā)送消息
    rt.convertAndSend(channel, "Hello World!");
}

convertAndSend方法就是向指定的渠道發(fā)送消息。

輸出

Hello World!
chat
chat

本文的重點(diǎn)是你有沒(méi)有收獲與成長(zhǎng),其余的都不重要,希望讀者們能謹(jǐn)記這一點(diǎn)。同時(shí)我經(jīng)過(guò)多年的收藏目前也算收集到了一套完整的學(xué)習(xí)資料,包括但不限于:分布式架構(gòu)、高可擴(kuò)展、高性能、高并發(fā)、Jvm性能調(diào)優(yōu)、Spring,MyBatis,Nginx源碼分析,Redis,ActiveMQ、、Mycat、Netty、Kafka、Mysql、Zookeeper、Tomcat、Docker、Dubbo、Nginx等多個(gè)知識(shí)點(diǎn)高級(jí)進(jìn)階干貨,希望對(duì)想成為架構(gòu)師的朋友有一定的參考和幫助

需要更詳細(xì)架構(gòu)師技能思維導(dǎo)圖和以下資料的可以加一下技術(shù)交流分享群:“708 701 457”免費(fèi)獲取

Redis必知必會(huì)——發(fā)布訂閱
Redis必知必會(huì)——發(fā)布訂閱

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線(xiàn),公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿(mǎn)足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。

本文標(biāo)題:Redis必知必會(huì)——發(fā)布訂閱-創(chuàng)新互聯(lián)
標(biāo)題網(wǎng)址:http://muchs.cn/article36/djhdsg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、外貿(mào)網(wǎng)站建設(shè)、標(biāo)簽優(yōu)化、企業(yè)建站、網(wǎng)站建設(shè)、軟件開(kāi)發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)