1. 程式人生 > >訂閱與釋出的實現與應用

訂閱與釋出的實現與應用

每次學習新東西,接觸新領域的時候,常常會想學了後能應用到什麼地方。用了它能改善什麼東西,為什麼非他不可?

1.訂閱與釋出是啥:我個人的理解是:你關注了某個人,他發了一條資訊,你能馬上知道。

知道了是啥,有哪些技術能實現我需要的這種功能呢:腦海裡,網上搜索一番,發現類似的開源產品還是很多的。譬如:Redis,ActiveMQ,RabbitMQ等等。

先來說說理論上的的實現:以Redis為例:java來實現。

第一步:訂閱頻道:繼承JedisPubSub,重寫其下的多個方法:然後寫個主方法去訂閱:

public class PubRedis extends JedisPubSub{
	@Override
    public  void onMessage(String channel, String message) {
	    System.out.println("訊息: 來自頻道["+channel+"], 的訊息:["+message+"]");
    }

 

    @Override
    public void onPMessage(String pattern, String channel, String message) {
    	System.out.println("模式:"+pattern);
    	System.out.println("頻道:"+channel);
    	System.out.println("訊息:"+message);
    }

 

    @Override
    public void onSubscribe(String channel,int subscribedChannels) {
        System.out.println("onSubscribe: channel["+channel+"],"+
                                                "subscribedChannels["+subscribedChannels+"]");
    }

 

    @Override

    public void onUnsubscribe(String channel,int subscribedChannels) {
        System.out.println("onUnsubscribe: channel["+channel+"], "+

                                               "subscribedChannels["+subscribedChannels+"]");
    }

 

    @Override

    public void onPUnsubscribe(String pattern,int subscribedChannels) {
        System.out.println("onPUnsubscribe: pattern["+pattern+"],"+
                                               "subscribedChannels["+subscribedChannels+"]");
    }

 

    @Override

    public void onPSubscribe(String pattern,int subscribedChannels) {
        System.out.println("onPSubscribe: pattern["+pattern+"], "+

                                               "subscribedChannels["+subscribedChannels+"]");
    }
	public static void main(String[] args) {
        Jedis jr = null;
        try {
            jr = new Jedis("localhost", 6379, 0);//redis服務地址和埠號
            PubRedis sp = new PubRedis();
            sp.proceed(jr.getClient(),"news.share", "news.blog");   //訂閱了"news.share", "news.blog"兩個頻道
            //sp.proceedWithPatterns(jr.getClient(), "news.*");

        } catch (Exception e) {
            e.printStackTrace();
        }
        finally{
            if(jr!=null){
                jr.disconnect();
            }
        }
    }

}

訂閱完後寫個釋出的類:讓某個頻道釋出訊息,那麼訂閱了該頻道的,將收到訊息:
public class PublishMasage {
public static void main(String str[])
{
	 Jedis jr = null;
     try {
         jr = new Jedis("localhost", 6379, 0);//redis服務地址和埠號
         jr.publish("news.blog", "發一條只有1和2都有的");
     } catch (Exception e) {
         e.printStackTrace();
     }

     finally{
         if(jr!=null){
             jr.disconnect();
         }

     }
}
}
這邊是一個大致機制的一種實現。

相關推薦

zookeeper訂閱釋出實現

方式一: import org.apache.curator.RetryPolicy; import org.apache.curator.framework.CuratorFramework; import org.apache.curator.framework.Cur

maven deploy 快照釋出 -- RELEASESNAPSHOT

maven package、install、deploy的聯絡與區別:  mvn clean package依次執行了clean、resources、compile、testResources、testCompile、test、jar(打包)等7個階段。 mvn clean insta

訂閱釋出實現應用

每次學習新東西,接觸新領域的時候,常常會想學了後能應用到什麼地方。用了它能改善什麼東西,為什麼非他不可? 1.訂閱與釋出是啥:我個人的理解是:你關注了某個人,他發了一條資訊,你能馬上知道。 知道了是啥,有哪些技術能實現我需要的這種功能呢:腦海裡,網上搜索一番,發現類似的開源

Apache Apollo 服務端搭建mqtt客戶端(java)訂閱釋出實現

注意:本部落格純屬娛樂,不接受任何批評!一、Apache Apollo伺服器搭建:       略。       搭建好後訪問http://localhost:61680  登入賬號密碼:admin/password,然後熟悉下頁面。二、java版客戶端實現訂閱與釋出    

redisTemplate 實現訂閱釋出

package testMaven2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.connection.Messa

[Nginx]用Nginx實現應用結合的訪問控制 - 防盜鏈

計算公式 index user use 鏈接 vtk 兩個 link img 應用場景:圖片等資源須要設置權限,如:僅僅有認證過的用戶才幹訪問自己的圖片。 解決的方法:使用Nginx的防盜鏈模塊http_secure_link能夠實現,該模塊默認情況下不包括。故在

20162313 苑洪銘 實驗四 圖的實現應用

isempty 元素 list div 包含 之間 分代 自己 png 20162313 苑洪銘 實驗四 圖的實現與應用 實驗1 要求 用鄰接矩陣實現無向圖(邊和頂點都要保存),實現在包含添加和刪除結點的方法,添加和刪除邊的方法,size(),isEmpty(),廣度優先叠

20162304 2017-2018-1 實驗四-圖的實現應用

連線 寫實 int 鏈式 http 同時 lis 遇到 初始化 實驗四-圖的實現與應用 實驗四 圖的實現與應用-1 試驗內容 用鄰接矩陣實現無向圖(邊和頂點都要保存),實現在包含添加和刪除結點的方法,添加和刪除邊的方法,size(),isEmpty(),廣度優先叠代器,深度

實驗四-圖的實現應用

取出 現在 結果 java 一個數 鏈表實現 頂點 廣度遍歷 矩陣 實驗四-圖的實現與應用 圖的實現與應用-1 實驗要求: 用鄰接矩陣實現無向圖(邊和頂點都要保存),實現在包含添加和刪除結點的方法,添加和刪除邊的方法,size(),isEmpty(),廣度優先叠代器,深度優

20162328蔡文琛 實驗四 圖的實現應用

創建 參考 完全 沒有 position iter 循環 由器 gen 20162328蔡文琛 大二 實驗四 任務詳情 實驗1 用鄰接矩陣實現無向圖(邊和頂點都要保存),實現在包含添加和刪除結點的方法,添加和刪除邊的方法,size(),isEmpty(),廣度優先叠代器,深

C++ RCSP智能指針簡單實現應用

自定義類 例子 定義 memcpy 智能指針 cto ted 分配 思路 智能指針的實現代碼來源博客:《http://blog.csdn.net/to_be_better/article/details/53570910》 修改:添加 get()函數,用以獲得原始指針(ra

SpringBoot整合ActiveMQ訊息佇列和雙向佇列、點對點釋出訂閱

ActiveMQ 是Apache出品,最流行的,能力強勁的開源訊息匯流排。ActiveMQ 是一個完全支援JMS1.1和J2EE 1.4規範的 JMS Provider實現,儘管JMS規範出臺已經是很久的事情了,但是JMS在當今的J2EE應用中間仍然扮演著特殊的地位。 &nbs

實驗二:棧佇列的實現應用

1、順序棧: #include <iostream> using namespace std; const int StackSize=10; class SeqStack{ public: SeqStack(); //建構函式,初始化一個空棧 ~SeqStack(){

HBase Coprocessor的實現應用

本文來自於中國HBase技術社群武漢站HBase MeetUp線下交流會的烽火大資料平臺研發負責人葉鏗(雲端浪子)。 HBase Coprocessor的實現與應用PPT下載:http://hbase.group/slides/159 本次分享的內容主要分為以下

Redis訂閱釋出原理

記錄下來以後方便回憶,需要時隨時翻閱 Redis 訂閱與釋出 原理 client->pubsub_channels 是客戶端維護的一個以dict結構的維護的訂閱頻道雜湊表,VAL是NULL,不需要值。 server->pubsub_channels 是服務端維護的一

ml課程:最大熵EM演算法及應用(含程式碼實現

以下是我的學習筆記,以及總結,如有錯誤之處請不吝賜教。 本文主要介紹最大熵模型與EM演算法相關內容及相關程式碼案例。 關於熵之前的文章中已經學習過,具體可以檢視:ml課程:決策樹、隨機森林、GBDT、XGBoost相關(含程式碼實現),補充一些 基本概念: 資訊量:資訊的度量,即

高校新聞管理釋出系統的設計實現——論文隨筆(十六)

一、基本資訊 標題:高校新聞管理與釋出系統的設計與實現 時間:2016-04 出版源:湖北大學 領域分類:系統架構和設計 二、研究背景 問題定義:由於資訊獲取渠道較之以往發生了太大的改變,無論是學校還是學生對新聞資訊的獲取和傳播速度已大大區別於前,新聞資訊的影響力也大大提高 相關工作:設計一個新聞資訊管

Redis系列-生產應用篇-分散式鎖(5)-單程序Redis分散式鎖的Java實現(Redisson使用底層實現)-原子鎖類

Redisson單程序Redis分散式樂觀鎖的使用與實現 本文基於Redisson 3.7.5 4. 原子鎖類 Redisson中實現了兩種原子鎖類:RAtomicLong和RAtomicDouble,還有RLongAdder和RDoubleAdder RA

《資料結構演算法設計》實驗報告書之二叉樹的基本操作實現及其應用

《資料結構與演算法設計》實驗報告書之二叉樹的基本操作實現及其應用 實驗專案 二叉樹的基本操作實現及其應用 實驗目的 1.熟悉二叉樹結點的結構和對二叉樹的基本操作。 2.掌握對二叉樹每一種操作的具體實現。 3.學會利用遞迴方法編寫對二叉樹這種遞迴資料結構進行處理的演算法。 4.會用二叉

圖知識小結6-十字連結串列的陣列實現應用

十字連結串列是一種高效儲存稀疏圖並可以顯著提高查詢效率的一種儲存結構,解決了圖的遍歷過程中鄰接表空間消耗大而鄰接矩陣求一個點入度又需要遍歷全部表的問題,下面給出其陣列實現: //十字連結串列的陣列實現 #include <bits/stdc++.h> using namesp