RabbitMQ系列 通過Rabbit-client操作mq(exchange,queue奖磁,binding)

1改基,導(dǎo)入依賴包pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.edu.mq</groupId>
    <artifactId>rabbitmq-java-client</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>rabbitmq-java-client</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>com.rabbitmq</groupId>
            <artifactId>amqp-client</artifactId>
            <version>4.0.2</version>
        </dependency>
    </dependencies>
</project>

2,通過rabbitClient創(chuàng)建一個(gè)新的exchange

 public static void main(String[] args) throws IOException, TimeoutException {

        //常見連接工廠
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");
        factory.setPort(5672);
        factory.setVirtualHost("/");
        factory.setUsername("guest");
        factory.setPassword("guest");
//上述創(chuàng)建工廠的時(shí)候咖为,配置factory信息比較繁瑣秕狰,有多種方式
//可以配置。

        //獲取連接
        Connection connection = factory.newConnection();

        //獲取channel躁染,所有的操作都是在channel鸣哀,一個(gè)connection可以創(chuàng)建多個(gè)channel
        Channel channel = connection.createChannel();

        channel.exchangeDeclare("logs","direct");

        channel.close();
        connection.close();
    }

結(jié)果如圖:


image.png

上圖的logs 是一個(gè)沒有任何features的exchange。

通過rabbitMQ的channel吞彤,exchange我衬,queue,binding的創(chuàng)建饰恕,刪除挠羔,屬性等操作
package com.edu.mq.rabbitmq;

import com.rabbitmq.client.*;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeoutException;

/**
 * 類說明:
 *
 * @author zhangkewei
 * @date 2018/11/21下午4:40
 */
public class App {

    public static void main(String[] args) throws IOException, TimeoutException, InterruptedException {

        //常見連接工廠
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");
        factory.setPort(5672);
        factory.setVirtualHost("/");
        factory.setUsername("guest");
        factory.setPassword("guest");

        //獲取連接
        Connection connection = factory.newConnection();

        //獲取channel,所有的操作都是在channel埋嵌,一個(gè)connection可以創(chuàng)建多個(gè)channel
        Channel channel = connection.createChannel();


        /*****************************************  exchange開始   ********************************************/
        /**
         * exchange的一些操作破加,創(chuàng)建,刪除雹嗦,是否存在范舀,添加是否持久化,自動(dòng)刪除俐银,類型尿背,alternate-exchange,其中重復(fù)創(chuàng)建
         * 已經(jīng)存在的exchange是不會(huì)有問題的捶惜,當(dāng)重復(fù)創(chuàng)建的時(shí)候田藐,如果已經(jīng)存在,不會(huì)在創(chuàng)建
         */
        channel.exchangeDeclare("logs", "direct");
        //通過枚舉的方式寫type,防止自己寫的時(shí)候汽久,拼寫錯(cuò)誤鹤竭。
        channel.exchangeDeclare("log.info.first", BuiltinExchangeType.DIRECT);
        //其中的第三個(gè)參數(shù)表示是否持久化。
        AMQP.Exchange.DeclareOk declareOk = channel.exchangeDeclare("log.info.two", BuiltinExchangeType.DIRECT, true);

        //其中的第四個(gè)參數(shù)表示是否自動(dòng)刪除景醇。第五個(gè)參數(shù)表示是否給exchange 添加額外的exchange臀稚,當(dāng)沒有路由到隊(duì)列的時(shí)候,消息轉(zhuǎn)發(fā)到log的exchange中三痰。
        Map<String, Object> arguments = new HashMap();
        arguments.put("alternate-exchange", "log");
        channel.exchangeDeclare("log.warn", BuiltinExchangeType.DIRECT, true, false, arguments);

        //判斷某個(gè)exchange是否存在吧寺。
        channel.exchangeDeclare("log", BuiltinExchangeType.DIRECT);
        AMQP.Exchange.DeclareOk log = channel.exchangeDeclarePassive("log");
        System.out.println(log);
        //如果沒有會(huì)報(bào)錯(cuò)
        // log = channel.exchangeDeclarePassive("log2");
        // System.out.println(log);

        // 刪除某個(gè)exchange,如果沒有這個(gè)這個(gè)exchange會(huì)報(bào)錯(cuò)
        AMQP.Exchange.DeleteOk log1 = channel.exchangeDelete("log");
        /****************************************    exchange結(jié)束    *******************************************/

/*———————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————*/
        /*****************************************  queue開始   ********************************************/

        //創(chuàng)建隊(duì)列(可以重復(fù)執(zhí)行).如果已經(jīng)有該隊(duì)列散劫,而且該隊(duì)列有消息稚机,這個(gè)時(shí)候創(chuàng)建也沒有問題,不會(huì)刪除原有的隊(duì)列中的消息

        //其中第一個(gè)參數(shù)是隊(duì)列名稱获搏,第二個(gè)是是否持久化赖条,第三個(gè)參數(shù)是是否是排他的(ture的時(shí)候,如果connection斷開常熙,就會(huì)消失)
        //第四個(gè)參數(shù)表示是否持久化纬乍,第五個(gè)是隊(duì)列的一些屬性的設(shè)置,可以通過map設(shè)置
        channel.queueDeclare("debug_queue", true, false, false, null);
        //隊(duì)列是否存在裸卫,如果不存在會(huì)報(bào)錯(cuò)仿贬。
        channel.queueDeclarePassive("debug_queue");
        /*****************************************  queue結(jié)束   ********************************************/

 /*———————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————*/
        /*****************************************  binding開始   ********************************************/
        //綁定分為兩種,1彼城,exchange和queue綁定诅蝶。2退个,exchange和exchange綁定募壕。都可以重復(fù)執(zhí)行
        //將隊(duì)列綁定到exchange中,第一個(gè)參數(shù)是隊(duì)列名稱语盈,第二個(gè)參數(shù)表示exchange名稱舱馅,第三個(gè)參數(shù)表示routingKey
        channel.queueBind("debug_queue","log.warn","info");
        channel.exchangeBind("log.warn","log.info","log");

        //逆向操作,解綁刀荒,可以重復(fù)執(zhí)行
       // channel.queueUnbind("debug_queue","log.warn","info");
       // channel.exchangeUnbind("log.warn","log.info","log");
        /*****************************************  binding結(jié)束   ********************************************/

        /**
         * 以上的exchange代嗤,queue,binding都有異步的操作XXXNoWait方法缠借,不等待執(zhí)行結(jié)果干毅。
         */

        Thread.sleep(5000L);
        channel.close();
        connection.close();
    }
}

執(zhí)行上面代碼之后,結(jié)果如下:


創(chuàng)建的exchange信息
創(chuàng)建的隊(duì)列信息
隊(duì)列和exchange綁定
exchange和exchange綁定

提示:有些說明在代碼中泼返。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末硝逢,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌渠鸽,老刑警劉巖叫乌,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異徽缚,居然都是意外死亡憨奸,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門凿试,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)排宰,“玉大人,你說我怎么就攤上這事那婉《罡鳎” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵吧恃,是天一觀的道長(zhǎng)虾啦。 經(jīng)常有香客問我,道長(zhǎng)痕寓,這世上最難降的妖魔是什么傲醉? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮呻率,結(jié)果婚禮上硬毕,老公的妹妹穿的比我還像新娘。我一直安慰自己礼仗,他們只是感情好吐咳,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著元践,像睡著了一般韭脊。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上单旁,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天沪羔,我揣著相機(jī)與錄音,去河邊找鬼象浑。 笑死蔫饰,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的愉豺。 我是一名探鬼主播篓吁,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蚪拦!你這毒婦竟也來(lái)了杖剪?” 一聲冷哼從身側(cè)響起节腐,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎摘盆,沒想到半個(gè)月后翼雀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡孩擂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年狼渊,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片类垦。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡狈邑,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蚤认,到底是詐尸還是另有隱情米苹,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布砰琢,位于F島的核電站蘸嘶,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏陪汽。R本人自食惡果不足惜训唱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望挚冤。 院中可真熱鬧况增,春花似錦、人聲如沸训挡。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)澜薄。三九已至为肮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間表悬,已是汗流浹背弥锄。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蟆沫,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓温治,卻偏偏與公主長(zhǎng)得像饭庞,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子熬荆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容

  • 來(lái)源 RabbitMQ是用Erlang實(shí)現(xiàn)的一個(gè)高并發(fā)高可靠AMQP消息隊(duì)列服務(wù)器舟山。支持消息的持久化、事務(wù)、擁塞控...
    jiangmo閱讀 10,344評(píng)論 2 34
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理累盗,服務(wù)發(fā)現(xiàn)寒矿,斷路器,智...
    卡卡羅2017閱讀 134,601評(píng)論 18 139
  • rabbitMQ是一款基于AMQP協(xié)議的消息中間件若债,它能夠在應(yīng)用之間提供可靠的消息傳輸符相。在易用性,擴(kuò)展性蠢琳,高可用性...
    點(diǎn)融黑幫閱讀 2,988評(píng)論 3 41
  • RabbitMQ 簡(jiǎn)介 MQ 消息隊(duì)列啊终,上承生產(chǎn)者,下接消費(fèi)者傲须。從生產(chǎn)者側(cè)獲取消息蓝牲,然后將消息轉(zhuǎn)發(fā)給消費(fèi)者。由此可...
    2205閱讀 3,482評(píng)論 1 11
  • 騎天大勝 焦點(diǎn)少年班堅(jiān)持分享第332天 星期二 2018.6.12 最近我考試是這件事情所困擾泰讽,而且明天語(yǔ)文模擬測(cè)...
    騎天大勝閱讀 184評(píng)論 0 0