1. 程式人生 > >柯南君:看大資料時代下的IT架構(8)訊息佇列之RabbitMQ--案例(topic起航)

柯南君:看大資料時代下的IT架構(8)訊息佇列之RabbitMQ--案例(topic起航)

public class ReceiveLogsTopic {

    private static final String EXCHANGE_NAME = "topic_logs";

    public static void main(String[] argv)
                  throws Exception {

        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");
        Connection connection = factory.newConnection();
        Channel channel = connection.createChannel();

        channel.exchangeDeclare(EXCHANGE_NAME, "topic");
        String queueName = channel.queueDeclare().getQueue();

        if (argv.length < 1){
            System.err.println("Usage: ReceiveLogsTopic [binding_key]...");
            System.exit(1);
        }

        for(String bindingKey : argv){
            channel.queueBind(queueName, EXCHANGE_NAME, bindingKey);
        }

        System.out.println(" [*] Waiting for messages. To exit press CTRL+C");

        QueueingConsumer consumer = new QueueingConsumer(channel);
        channel.basicConsume(queueName, true, consumer);

        while (true) {
            QueueingConsumer.Delivery delivery = consumer.nextDelivery();
            String message = new String(delivery.getBody());
            String routingKey = delivery.getEnvelope().getRoutingKey();

            System.out.println(" [x] Received '" + routingKey + "':'" + message + "'");
        }
    }
}

Run the following examples, including the classpath as in Tutorial 1 - on Windows, use %CP%.

To receive all the logs:

$ java -cp $CP ReceiveLogsTopic "#"

To receive all logs from the facility "kern":

$ java -cp $CP ReceiveLogsTopic "kern.*"

Or if you want to hear only about "critical" logs:

$ java -cp $CP
ReceiveLogsTopic "*.critical"

You can create multiple bindings:

$ java -cp $CP ReceiveLogsTopic "kern.*" "*.critical"

And to emit a log with a routing key "kern.critical" type:

$ java -cp $CP EmitLogTopic "kern.critical" "A critical kernel error"

Have fun playing with these programs. Note that the code doesn't make any assumption about the routing or binding keys, you may want to play with more than two routing key parameters.

Some teasers:

  • Will "*" binding catch a message sent with an empty routing key?
  • Will "#.*" catch a message with a string ".." as a key? Will it catch a message with a single word key?
  • How different is "a.*.#" from "a.#"?

五、註釋版的程式例項(全部程式碼)

相關推薦

資料時代IT架構8訊息佇列RabbitMQ--案例topic起航

public class ReceiveLogsTopic { private static final String EXCHANGE_NAME = "topic_logs"; public static void main(String[] argv)

資料時代IT架構2訊息佇列RabbitMQ-基礎概念詳細介紹

在實際應用中,可能會發生消費者收到Quque中的訊息,但沒有處理完成就宕機的情況,這種情況下,就可能導致資訊丟失,為了避免這種情況發生,我們可以要求消費者在消費完訊息後傳送一個回執給RabbitMQ,RabbitMQ收到訊息回執(Message acknowledge)後,才將該訊息從Quque中移除。如果R

教你如何對待大型電商平臺的效能優化?方法、指標、工具、定位

3)Web Capacity Analysis Tool (WCAT)  這是一種輕量級負載生成實用工具,不僅能夠重現對 Web 伺服器(或負載平衡伺服器場)的指令碼 HTTP 請求,同時還可以收集效能統計資料供日後分析之用。WCAT 是多執行緒應用程式,並且支援從單個源控制多個負載測試客戶端,因此您可以模

教你敏捷開發のScrum是如何工作的?

     現在敏捷開發是越來越火,人人都在談敏捷,人人都在學習Scrum和XP,柯南君的朋友“遠哥”是一位專案leader,柯南君與遠哥促膝長談,遠哥也毫不避諱,知無不言言無不盡,把自己對Scrum的理解和自己工作中的經驗積累與柯南君分享,在這裡柯南君代替遠哥與大家分享一

京東推薦系統架構揭祕資料時代的智慧化改造

在電商領域,推薦的價值在於挖掘使用者潛在購買需求,縮短使用者到商品的距離,提升使用者的購物體驗。 京東推薦的演進史是絢麗多彩的。京東的推薦起步於2012年,當時的推薦產品甚至是基於規則匹配做的。整個推薦產品線組合就像一個個鬆散的原始部落一樣,部落與部落之前沒有任何工程、演算法的交集。201

一步步教你資料時代的“使用者畫像”

  什麼是使用者畫像      互動設計之父Alan Cooper最早提出了使用者畫像(persona)的概念,認為“使用者畫像是真實使用者的虛擬代表,是建立在一系列真實資料之上的目標使用者模型”。通過對客戶多方面的資訊的瞭解,將多種資訊集合在一起並形成在一定型別上的獨特的特徵與氣質,這就形成了使用者

資料時代IT行業的熱門崗位有哪些?

雲端計算、大資料、BYOD、社交媒體、3D印表機、物聯網……在網際網路時代,各種新詞層出不窮,令人應接不暇。這些新的技術、新興應用和對應的IT發展趨勢,使得IT人必須瞭解甚至掌握最新的IT技能。 另一方面,雲端計算和大資料乃至其他助推各個行業發展的IT基礎設施的新一輪部署與運維,都將帶來更多的I

資料時代IT行業的熱門崗位有哪些?9前景分析!

最近幾年,特別是今年,好像經常聽到一句話:兄弟,今年生意真難做。是啊,時代在發展,市場也在變,很多人的處境越發艱難,只有適應了市場的變化才能生存。 大資料的市場前景廣闊,而技術能否達到預期的效果,關鍵是在於能否找到適合資訊社會需求的應用模式。而無論是在競爭還是合作的過程中,如果沒有切實的應用,大

資料時代的SQL Server第三方負載均衡方案----Moebius測試

一.本文所涉及的內容(Contents) 二.背景(Contexts)   前幾天在SQL Server MVP宋大俠(宋沄劍)的一篇文章"資料庫叢集技術漫談”中看到了格瑞趨勢在SQL Server上的負載均衡產品Moebius,搞資料庫的都知道:在Oracle上有RAC,MySQL也有對應的方案(可

資料時代IT行業竟有如此多高薪職位!

 近年來雲端計算、大資料、BYOD、社交媒體、3D印表機、物聯網……在網際網路時代,各種新詞層出不窮,令人應接不暇。這些新的技術、新興應用和對應的IT發展趨勢,使得IT人必須瞭解甚至掌握最新的IT技能。   另一方面,雲端計算和大資料乃至其他助推各個行業發展的IT基礎設施的新一輪部署與運維,都將帶來更多的I

資料時代資料探勘技術的應用

原文連結:https://mp.weixin.qq.com/s/bxSEO4gKQ-BbDWT1BNnwyw 隨著社會資訊化的迅速發展,無論是資料的變化速率,還是資料的新增種類都在不斷更新,資料研究變得越來越複雜,這意味著“大資料時代”到來。2011年,網際網路資料中心(internet dat

資料時代對馬克思主義的一些探討

1 引言 最近因為查閱文獻的原因,讓我接觸到了大資料,以前也聽到過“大資料”這個詞語,但卻從未引起我的重視。平時需要查閱大量文獻,相比於數十年前,現在的搜尋引擎為學習提供了莫大的方便。我們可以依據自己感興趣的主題,利用搜索引擎來尋找相關的文獻資料。這為我們帶來方便的時候卻也

資料時代來臨 IT如何做好準備

  不管你有沒有準備好,大資料時代都將來臨。目前,IT經理需要做好以下5件事來迎接未來的海量資料的挑戰。 By David Linthicum | InfoWorld 你的“大資料”計劃準備就緒了嗎?如果沒有,你可能要開始考慮設計一個了。 現今,大資料作為未來一項關鍵的戰

資料時代的計算機和網際網路

    21世紀 由於科技發展速度飛快,計算機軟體技術也廣泛應用到了各個行業的各個領域,對我們的日常生活與工作均產生了一定的影響,在大資料時代的影響下,社會各個領域必須要提高計算機技術,進而促進計算機軟體技術在大資料時代的使用,方可產生更多的綜合效益。本文主要對計算機軟體技

Thinking in BigData資料時代的變革

大資料時代的思維變革         A Revolution That Will Transform How We Live, Work, and Think.        不期而遇的一本《大資料時代》將我引進大資料的領域。這個浪裡淘沙的時代,我們都站在這個時代改革的前

談談資料時代資料倉庫

大資料背景 眾所周知,當前是一個數據爆炸的時代,大資料背景下的資料治理是每一個企業應該重點考慮的問題。例如金融機構、電信運營商這種“傳統”行業每日需要處理的資料量都已經十分巨大了,更不必說掌握著上千萬日活的網際網路公司。 傳統行業的資料治理 以電信運營

數字化時代的企業進取心精神建立資料和機器學習戰略

本文轉載自:https://digitx.cn/2018/03/30/bigdata-strategy-with-greenplum/ 大資料和機器學習:未來企業終極競爭點 《Cloud Foundry:從數字化戰略到實現》著作當中的第二章節中我們闡述了汽車行業數字化的方方面面。假設

一文懂 BDTC 2018探祕資料新應用附 PPT 下載

12 月 8 日,北京新雲南皇冠假日酒店,由中國計算機學會主辦,CCF 大資料專家委員會承辦,CSDN、中科天璣資料科技股份有限公司協辦的 2018 中國大資料技術大會(BDTC)圓滿落下帷幕。 從 2008 第一屆 Hadoop 沙龍,到 2018 的千人大會,活動已

一文懂BDTC 2018探祕資料新應用附PPT下載

12 月 8 日,北京新雲南皇冠假日酒店,由中國計算機學會主辦,CCF 大資料專家委員會承辦,CSDN、中科天璣資料科技股份有限公司協辦的 2018 中國大資料技術大會(BDTC)圓滿落下帷幕。 從 2008 第一屆 Hadoop 沙龍,到 2018 的千人大會,活動已

資料時代最熱門的資料技術

隨著大資料技術滲透到各行各業,很多人也轉行到大資料,有很多的哪些大資料技術掌握後在工作運用中會輕鬆一些,下面列十大最熱門的大資料技術,大家可以學習瞭解。 預測分析 : 預測分析 是一種統計或資料探勘解決方案,包含可在結構化和非結構化資料中使用以確定未來結果的演算