RabbitMQ消費(fèi) 發(fā)送

package connectors

import (
    "../commons"
    "github.com/streadway/amqp"
    log "github.com/sirupsen/logrus"
    "bytes"
    "strconv"
    "fmt"
)

func failOnError(err error, msg string) {
    if err != nil {
        log.Fatalf("%s: %s", msg, err)
        panic(fmt.Sprintf("%s: %s", msg, err))
    }
}

func rabbitConnector() (*amqp.Connection, error) {
    rabbitConfig := commons.RabbitConfig
    addr := bytes.Buffer{}
    addr.WriteString("amqp://")
    addr.WriteString(rabbitConfig.Username)
    addr.WriteString(":")
    addr.WriteString(rabbitConfig.Password)
    addr.WriteString("@")
    addr.WriteString(rabbitConfig.Host)
    addr.WriteString(":")
    addr.WriteString(strconv.Itoa(rabbitConfig.Port))
    addr.WriteString("/")
    addr.WriteString(rabbitConfig.Vhost)
    conn, err := amqp.Dial(addr.String())
    if err != nil {
        failOnError(err, "Failed to connect to RabbitMQ")
    }
    return conn, err
}

func Send(msg string) {

    defer func() {
        if err := recover(); err != nil {
            log.Errorf("RabbitMQ發(fā)送存儲消息錯誤 %s", err)
        }
    }()
    rabbitConfig := commons.RabbitConfig
    conn, err := rabbitConnector()
    failOnError(err, "Failed to connect to RabbitMQ")
    defer conn.Close()
    ch, err := conn.Channel()
    failOnError(err, "Failed to open a channel")
    defer ch.Close()

    err = ch.ExchangeDeclare(
        rabbitConfig.Exchange, // name
        "topic",              // type
        true,                  // durable
        false,                 // auto-deleted
        false,                 // internal
        false,                 // no-wait
        nil,                   // arguments
    )
    failOnError(err, "Failed to declare an exchange")

    err = ch.Publish(
        rabbitConfig.Exchange, // exchange
        "custom",              // routing key
        false,                 // mandatory
        false,                 // immediate
        amqp.Publishing{
            ContentType: "text/plain",
            Body:        []byte(msg),
        })
    failOnError(err, "Failed to publish a message")

}

func RabbitConsume() {
    conn, err := amqp.Dial(fmt.Sprintf("amqp://%s:%s@%s:%d/dashboard", commons.RabbitConfig.Username, commons.RabbitConfig.Password, commons.RabbitConfig.Host, commons.RabbitConfig.Port))
    failOnError(err, "Failed to connect to RabbitMQ")
    defer conn.Close()

    ch, err := conn.Channel()
    failOnError(err, "Failed to open a channel")
    defer ch.Close()

    err = ch.ExchangeDeclare(
        "dashboard", // name
        "topic",     // type
        true,        // durable
        false,       // auto-deleted
        false,       // internal
        false,       // no-wait
        nil,         // arguments
    )
    failOnError(err, "Failed to declare an exchange")

    q, err := ch.QueueDeclare(
        "", // name
        true,        // durable
        false,        // delete when usused
        false,        // exclusive
        false,        // no-wait
        nil,          // arguments
    )
    failOnError(err, "Failed to declare a queue")

    err = ch.QueueBind(
        q.Name,      // queue name
        "custom",    // routing key
        "dashboard", // exchange
        false,
        nil)
    failOnError(err, "Failed to bind a queue")

    msgs, err := ch.Consume(
        q.Name, // queue
        "",     // consumer
        true,   // auto-ack
        false,  // exclusive
        false,  // no-local
        false,  // no-wait
        nil,    // args
    )
    failOnError(err, "Failed to register a consumer")

    forever := make(chan bool)

    go func() {
        for d := range msgs {
            log.Printf(" [x] %s", d.Body)
        }
    }()

    log.Printf(" [*] Waiting for logs. To exit press CTRL+C")
    <-forever
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末趣避,一起剝皮案震驚了整個濱河市读规,隨后出現(xiàn)的幾起案子恰起,更是在濱河造成了極大的恐慌赘娄,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件故黑,死亡現(xiàn)場離奇詭異儿咱,居然都是意外死亡庭砍,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進(jìn)店門混埠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來怠缸,“玉大人,你說我怎么就攤上這事钳宪〗冶保” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵使套,是天一觀的道長罐呼。 經(jīng)常有香客問我鞠柄,道長侦高,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任厌杜,我火速辦了婚禮奉呛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘夯尽。我一直安慰自己瞧壮,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布匙握。 她就那樣靜靜地躺著咆槽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪圈纺。 梳的紋絲不亂的頭發(fā)上秦忿,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天,我揣著相機(jī)與錄音蛾娶,去河邊找鬼灯谣。 笑死,一個胖子當(dāng)著我的面吹牛蛔琅,可吹牛的內(nèi)容都是我干的胎许。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼罗售,長吁一口氣:“原來是場噩夢啊……” “哼辜窑!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起寨躁,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤谬擦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后朽缎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體惨远,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡谜悟,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了北秽。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片葡幸。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖贺氓,靈堂內(nèi)的尸體忽然破棺而出蔚叨,到底是詐尸還是另有隱情,我是刑警寧澤辙培,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布蔑水,位于F島的核電站,受9級特大地震影響扬蕊,放射性物質(zhì)發(fā)生泄漏搀别。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一尾抑、第九天 我趴在偏房一處隱蔽的房頂上張望歇父。 院中可真熱鬧,春花似錦再愈、人聲如沸榜苫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽垂睬。三九已至,卻和暖如春抗悍,著一層夾襖步出監(jiān)牢的瞬間驹饺,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工檐春, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留逻淌,地道東北人。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓疟暖,卻偏偏與公主長得像卡儒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子俐巴,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,465評論 2 348

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