原创 死信隊列+TTL實現延遲重試

思路 MQ配置: 1.設置正常處理隊列及綁定關係,exchange,queue,key 2.創建5s延遲隊列queue_5s,10s延遲隊列queue_10s,20s延遲隊列queue_20s,差錯處理隊列queue_error,分別於

原创 Java虛擬機學習-(1)概要

一、JVM、JRE、JDK分別是啥 JVM:Java虛擬機 JRE:Java運行時環境 JDK:Java開發工具 其中從大到小:JDK → JRE → JVM 二、Java字節碼     .java文件通過javac命令編譯成.class

原创 Java虛擬機學習-(2)內存區域

一、JVM內存佈局   1.虛擬機棧 棧裏存放的內調數據,叫棧幀。 每個棧幀都包含四個區域:局部變量表、操作數棧、動態連接、返回地址   局部變量表:方法參數、方法內部定義的局部變量。 操作數棧:運行時操作碼操作的的操作數。 動態連接:

原创 Java虛擬機學習-(3)垃圾回收

垃圾收集(GC)需要兩件事:     如何找出需要回收的內存?     如何回收這些內存?     找出需要回收的內存     引用計數法(僅供學習)、可達性分析法、方法區回收條件   引用計數法     給對象頭添加一個引用計數器,被引

原创 java面試題:英雄PK(無答案)

2014年6月,即將面臨畢業找工作,無意間在網上看到這道題,並且附有招聘信息及郵箱,因爲自己也是個愛玩遊戲的仔,就抱着試一試的態度,花了半小時寫了個代碼,簡單的測試了一下就發送到了招聘郵箱,對方也回覆郵件指明瞭其中的bug,經過修改再次

原创 ReentrantLock學習(三)公平鎖與非公平鎖

一、概念理解 公平鎖:申請所的時候排隊,誰也不插隊 非公平鎖:申請的時候插隊(先插隊,不行了再排隊)   二、差別 ReentrantLock的公平鎖與非公平鎖的差別在於,內部的同步器不一樣,lock()方法調用的是sync的lock(

原创 《Redis設計與實現》2.單機數據庫的實現

一、數據庫 redis的key過期時間設置:EXPIRE設置ttl秒,PEXPIRE設置ttl毫秒,EXPIREAT設置過期時間戳秒,PEXPIREAT設置過期時間戳毫秒。 保存過期時間:redis過期時間存放於expires字典中

原创 《Redis設計與實現》1.數據結構域對象

一、SDS:simple dynamic string int len:已使用的buf長度 int free:未使用的長度 char buf[]:存儲字符串 二、鏈表:雙向鏈表,包含head、tail指針,head的prev爲

原创 《Redis設計與實現》3.多機數據庫的實現

一、複製SLAVEOF 舊版本複製功能:sync同步、command propagate命令傳播 同步:當客戶端像從服務器發送SLAVEOF 從服務器向主服務器發送SYNC命令 主服務器收到SYNC命令,執行BGSAVE,並使用

原创 《Redis設計與實現》4.獨立功能的實現

一、發佈與訂閱 通過PUBLISH發佈、SUBSCRIBE訂閱、PSUBSCRIBE模式訂閱組成。         1.頻道訂閱與退訂 虛線爲新增訂閱,如果channel已經存在,則直接添加到對應鏈表尾端,如果不存在,則現在pubsub

原创 《RabbitMQ實戰》11.提升性能,保障安全

一、對速度的需求 消息持久化:持久化消息降低投遞性能 消息確認:降低性能 路由算法與綁定規則 direct:查詢一條 fanout:忽略路由鍵,查詢所有路由關係 topic:佔用內存更多,性能低   二、消息投遞

原创 《RabbitMQ實戰》5.集羣並處理失敗

一、集羣架構 RabbitMQ始終會記錄元數據: 隊列元數據:隊列的名稱及屬性(持久化、自動刪除) 交換器元數據:交換器名稱及屬性(持久化) 綁定元數據:消息路由綁定表 vhost元數據:vhost的隊列、交換器、綁定關係及

原创 《RabbitMQ實戰》6.從故障中恢復

一、爲RabbitMQ做負載均衡   二、連接丟失和從故障中恢復 消費者感知恢復,代碼如下 while(true){     try{         //建立連接         //創建隊列、交換器、綁定關係         

原创 《RabbitMQ實戰》7.warren和Shovel:故障轉移和複製

一、warren模式 模式1:每個MQ服務器都是獨立的,當主節點故障後,故障轉移工具會將其切換到副節點上,可以發佈新消息,消費新消息。待故障節點恢復,也允許消費者重新連接到該節點進行消息消費。   模式2:每個節點是相互獨立的,但

原创 《RabbitMQ實戰》2.理解消息通信

一、隊列 1)消費消息 通過AMQP的basic.consume命令訂閱。 通過AMQP的basic.get從隊列獲取單條消息。 隊列有多個消費者,則會採取循環(round-robin)的方式發給消費者。 消息必須確認:可