05 rabbitmq之Routing

在介紹了rabbitmq的Publish/subscrige模式之后拳亿,這一節(jié)我們將闡述它的Routing模式的用法逾苫。

1吧黄、前提約束

  • 已經完成rabbitmq的第一個簡單的測試程序
    http://www.reibang.com/p/77bfc4fe5a1a
  • 2氛濒、操作步驟
    我們馬上要測試的rabbitmq的工作模式如下:


    Routing
  • 在src/main/java文件夾下創(chuàng)建包net.wanho.rabbitmq.routing
  • 在net.wanho.rabbitmq.routing創(chuàng)建Producer.java
package net.wanho.rabbitmq.routing;

import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

public class Producer {

    public static void main(String[] argv) throws Exception {
        String queue_inform_email = "queue_inform_email";
        String queue_inform_sms = "queue_inform_sms";
        String exchange_routing_inform = "exchange_routing_inform";
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("127.0.0.1");
        factory.setPort(5672);
        factory.setUsername("guest");
        factory.setPassword("guest");
        factory.setHost("localhost");
        //創(chuàng)建一個連接
        Connection connection = factory.newConnection();
        //創(chuàng)建與交換機的通道产场,每個通道代表一個會話
        Channel channel = connection.createChannel();
        /**
         聲明交換機 String exchange, BuiltinExchangeType type
         參數(shù)明細
         1、交換機名稱
         2舞竿、交換機類型京景,fanout、topic骗奖、direct确徙、headers
         */
        channel.exchangeDeclare(exchange_routing_inform, BuiltinExchangeType.DIRECT);
        channel.queueDeclare(queue_inform_email, true, false, false, null);
        channel.queueDeclare(queue_inform_sms, true, false, false, null);
        channel.queueBind(queue_inform_email, exchange_routing_inform, queue_inform_email);
        channel.queueBind(queue_inform_sms, exchange_routing_inform, queue_inform_sms);
        for (int i = 0; i < 10; i++) {
            String message = "email inform to user" + i;
            channel.basicPublish(exchange_routing_inform, queue_inform_email, null,
                    message.getBytes());
            System.out.println("Send Message is:'" + message + "'");
        }
        for (int i = 0; i < 10; i++) {
            String message = "sms inform to user" + i;
            channel.basicPublish(exchange_routing_inform, queue_inform_sms, null, message.getBytes());
            System.out.println("Send Message is:'" + message + "'");
        }
    }
}
  • 在net.wanho.rabbitmq.routing創(chuàng)建Consumer1.java
package net.wanho.rabbitmq.routing;

import com.rabbitmq.client.*;

import java.io.IOException;

public class Consumer1 {
    public static void main(String[] args) throws Exception {
        String QUEUE_INFORM_EMAIL = "queue_inform_email";
        String EXCHANGE_ROUTING_INFORM = "inform_exchange_routing";
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("127.0.0.1");
        factory.setPort(5672);
        factory.setUsername("guest");
        factory.setPassword("guest");
        factory.setVirtualHost("/");
        Connection connection = factory.newConnection();
        Channel channel = connection.createChannel();
        channel.exchangeDeclare(EXCHANGE_ROUTING_INFORM, BuiltinExchangeType.DIRECT);
        channel.queueDeclare(QUEUE_INFORM_EMAIL, true, false, false, null);
        channel.queueBind(QUEUE_INFORM_EMAIL, EXCHANGE_ROUTING_INFORM, QUEUE_INFORM_EMAIL);
        DefaultConsumer defaultConsumer = new DefaultConsumer(channel) {
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope,
                                       AMQP.BasicProperties properties, byte[] body) throws IOException {
                long deliveryTag = envelope.getDeliveryTag();
                String exchange = envelope.getExchange();
                String message = new String(body, "utf-8");
                System.out.println(message);

            }
        };
        channel.basicConsume(QUEUE_INFORM_EMAIL, true, defaultConsumer);
    }
}
  • 在net.wanho.rabbitmq.routing創(chuàng)建Consumer2.java
package net.wanho.rabbitmq.routing;

import com.rabbitmq.client.*;

import java.io.IOException;

public class Consumer2 {
    public static void main(String[] args) throws Exception {
        String QUEUE_INFORM_SMS = "queue_inform_sms";
        String EXCHANGE_ROUTING_INFORM = "inform_exchange_routing";
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("127.0.0.1");
        factory.setPort(5672);
        factory.setUsername("guest");
        factory.setPassword("guest");
        factory.setVirtualHost("/");
        Connection connection = factory.newConnection();
        Channel channel = connection.createChannel();
        channel.exchangeDeclare(EXCHANGE_ROUTING_INFORM, BuiltinExchangeType.DIRECT);
        channel.queueDeclare(QUEUE_INFORM_SMS, true, false, false, null);
        channel.queueBind(QUEUE_INFORM_SMS, EXCHANGE_ROUTING_INFORM, QUEUE_INFORM_SMS);
        DefaultConsumer defaultConsumer = new DefaultConsumer(channel) {
            @Override
            public void handleDelivery(String consumerTag, Envelope envelope,
                                       AMQP.BasicProperties properties, byte[] body) throws IOException {
                long deliveryTag = envelope.getDeliveryTag();
                String exchange = envelope.getExchange();
                String message = new String(body, "utf-8");
                System.out.println(message);

            }
        };
        channel.basicConsume(QUEUE_INFORM_SMS, true, defaultConsumer);
    }
}
  • 測試
    啟動Consumer1兩次,啟動Consumer2一次执桌,啟動Producer鄙皇,我們會看到屬于consumer1的消息會被兩個consumer1實例合起來消費,屬于consumer2的消息會被consumer2全部消費仰挣。
    以上就是我們完成的rabbitmq的Routing模式的測試伴逸。
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市膘壶,隨后出現(xiàn)的幾起案子错蝴,更是在濱河造成了極大的恐慌,老刑警劉巖颓芭,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件顷锰,死亡現(xiàn)場離奇詭異,居然都是意外死亡亡问,警方通過查閱死者的電腦和手機官紫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人束世,你說我怎么就攤上這事悼吱。” “怎么了良狈?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵后添,是天一觀的道長。 經常有香客問我薪丁,道長遇西,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任严嗜,我火速辦了婚禮粱檀,結果婚禮上,老公的妹妹穿的比我還像新娘漫玄。我一直安慰自己茄蚯,他們只是感情好,可當我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布睦优。 她就那樣靜靜地躺著渗常,像睡著了一般。 火紅的嫁衣襯著肌膚如雪汗盘。 梳的紋絲不亂的頭發(fā)上皱碘,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天,我揣著相機與錄音隐孽,去河邊找鬼癌椿。 笑死,一個胖子當著我的面吹牛菱阵,可吹牛的內容都是我干的踢俄。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼晴及,長吁一口氣:“原來是場噩夢啊……” “哼都办!你這毒婦竟也來了?” 一聲冷哼從身側響起抗俄,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤脆丁,失蹤者是張志新(化名)和其女友劉穎世舰,沒想到半個月后动雹,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡跟压,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年胰蝠,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡茸塞,死狀恐怖躲庄,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情钾虐,我是刑警寧澤噪窘,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站效扫,受9級特大地震影響倔监,放射性物質發(fā)生泄漏。R本人自食惡果不足惜菌仁,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一浩习、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧济丘,春花似錦谱秽、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至峡碉,卻和暖如春听绳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背异赫。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工椅挣, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人塔拳。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓鼠证,卻偏偏與公主長得像,于是被迫代替她去往敵國和親靠抑。 傳聞我的和親對象是個殘疾皇子量九,可洞房花燭夜當晚...
    茶點故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內容

  • 介紹 RabbitMQ MQ全稱為Message Queue,即消息隊列颂碧, RabbitMQ是由erlang語言開...
    蒲韌如絲閱讀 4,981評論 2 10
  • 什么叫消息隊列 消息(Message)是指在應用間傳送的數(shù)據(jù)荠列。消息可以非常簡單,比如只包含文本字符串载城,也可以更復雜...
    lijun_m閱讀 1,346評論 0 1
  • 關于消息隊列肌似,從前年開始斷斷續(xù)續(xù)看了些資料,想寫很久了诉瓦,但一直沒騰出空川队,近來分別碰到幾個朋友聊這塊的技術選型力细,是時...
    中v中閱讀 1,970評論 0 20
  • 1.RabbitMQ簡介 1.1 什么是RabbitMQ RabbitMQ 是一個消息中間件 , 一個由 Erl...
    studymachine閱讀 2,207評論 0 1
  • title: RabbitMQ入門進階學習categories: RabbitMQtags: RabbitMQda...
    COPASTERS閱讀 689評論 0 0