【rabbitMQ之一】rabbitMQ之helloworld傳送與接受訊息-go語言
阿新 • • 發佈:2019-01-06
1.準備工作
啟動rabbitmq_server,在瀏覽器上開啟rabbitMQ的管理器
2.傳送端程式
開始如果匯入
"github.com/streadway/amqp" 出現錯誤,則先在goLand下面的終端,執行go get "github.com/streadway/amqp"
package main import ( "log" "github.com/streadway/amqp" "strconv" ) func failOnError(err error, msg string) { if err != nil { log.Fatalf("%s: %s", msg, err) } } func main() { conn, err := amqp.Dial("amqp://guest:
[email protected]:5672/") // 建立連線 failOnError(err, "Failed to connect to RabbitMQ") defer conn.Close() ch, err := conn.Channel() // 建立channel failOnError(err, "Failed to open a channel") defer ch.Close() /* Delivery Exchange Key Queue ----------------------------------------------- key: alerts -> "" -> alerts -> alerts */ q, err := ch.QueueDeclare( // 建立訊息佇列,queue,並分配預設binding,empty exchange "hello", // name 訊息佇列的名字 false, // durable // 佇列持久化 false, // delete when unused false, // exclusive false, // no-wait nil, // arguments ) failOnError(err, "Failed to declare a queue") for i:=0; i<100; i++ { body := "hello" + strconv.Itoa(i) err = ch.Publish( // 釋出訊息,第一個引數表示路由名稱(exchange),""則表示使用預設訊息路由 "", // exchange q.Name, // routing key "hello" false, // mandatory false, // immediate amqp.Publishing{ ContentType: "text/plain", Body: []byte(body), }) log.Printf(" [x] Sent %s", body) } failOnError(err, "Failed to publish a message") }
3.接受端程式
package main import ( "log" "github.com/streadway/amqp" ) func failOnError(err error, msg string) { if err != nil { log.Fatalf("%s: %s", msg, err) } } func main() { conn, err := amqp.Dial("amqp://guest:[email protected]:5672/") failOnError(err, "Failed to connect to RabbitMQ") defer conn.Close() ch, err := conn.Channel() failOnError(err, "Failed to open a channel") defer ch.Close() q, err := ch.QueueDeclare( // 訊息佇列 "hello", // name false, // durable 佇列持久化 false, // delete when unused false, // exclusive false, // no-wait nil, // arguments ) failOnError(err, "Failed to declare a queue") msgs, err := ch.Consume( q.Name, // queue "", // consumer true, // auto-ack 自動ACK false, // exclusive false, // no-local false, // no-wait nil, // args ) failOnError(err, "Failed to register a consumer") forever := make(chan bool) // 建立bool型的channel go func() { for d := range msgs { log.Printf("Received a message: %s", d.Body) } }() log.Printf(" [*] Waiting for messages. To exit press CTRL+C") <-forever // 從forever通道中取資料,必須要有資料流進來才可以,不然main在此阻塞 }
4.執行程式
啟動一個傳送程式,啟動兩個接受程式
傳送方:
接受方1 | 接受方2 |
管理介面: