/*************************rabbitmq初始化start**********************/
// 除了****** 模式外、其他的模式都是由 佇列 交換機 key 不同組合實現的
type rabbitmq struct
// 建立rabbitmq 例項
func newrabbitmq(queuename, exchange, key string) (*rabbitmq, error)
var err error
// dial mq
rabbitmq.conn, err = amqp.dial(rabbitmq.mqurl)
rabbitmq.failonerr(err, "建立連線錯誤")
if err != nil
// get channel
rabbitmq.channel, err = rabbitmq.conn.channel()
if err != nil
return rabbitmq, nil}
// 錯誤處理
func (r *rabbitmq) failonerr(err error, message string) }
/****************rabbitmq初始化end**********************************/
/******************和work 模式 start******************/
// step 1. ****** 建立例項
func newrabbitmq******(queuename string) (*rabbitmq, error)
return rabbitmq, nil}
// step 2. ****** producer code
func (r *rabbitmq) publish******(message string) error
// 2.2 傳送訊息到佇列中
err = r.channel.publish(
r.exchange,
r.queuename,
// 如果為true 根據exchange 型別 和 routkey規則、 如果無法找到符合條件的佇列、那麼會把傳送完的訊息返回給傳送者
false,
// 如果為true 當exchange傳送訊息 到佇列後發現佇列上沒有繫結消費者, 則會把訊息還給 傳送者
false,
amqp.publishing,
) if err != nil
return nil}
// step 3. ****** consumer code
func (r *rabbitmq) consume******()
message, err := r.channel.consume(
r.queuename,
// 用來區分多個消費者
"",// 是否自動應答 (消費完了後 是否自動告訴rabbitmq服務 消費完了 預設為true)
true,
// 是否具有排他性 (true 就是 建立了自己可見的佇列)
false,
// 如果為true 表示 不能將同乙個 connection 中傳送的訊息傳遞給這個connection中的消費者 (預設為false)
false,
// 是否阻塞 false為不阻塞 (阻塞就是 這個消費完 下個再進來、我們系統中是需要的)
true,
// 其他引數
nil,
) if err != nil
//不讓協程終止
forever := make(chan bool)
// 啟用 goroutine 處理訊息
go func()
}()// 在沒有訊息處理後 進行阻塞
}
package main
import (
"mqtest/rabbitmq"
"fmt"
)func main()
rabbitmq.consume******()
}
package main
import (
"mqtest/rabbitmq"
"fmt"
)func main()
rabbitmq.consume******()
}
package main
import (
"mqtest/rabbitmq"
"fmt"
"strconv"
)func main()
for i:=0; i<10;i++
fmt.println("傳送成功")
}
RabbitMQ工作模式
rabbitmq工作模式有六種 工作佇列模式,發布訂閱模式,路由模式,萬用字元模式,header模式和rpc模式。1.工作佇列模式 2.發布訂閱模式 交換機型別為funout。3.路由模式 交換機型別為direct。路由模式和發布訂閱模式區別 1 發布訂閱模式不需要繫結routingkey,訊息傳送...
rabbitmq 工作模式
c1 c2輪流接收訊息 啟動兩個接受者 channel.queuedeclare queue que durable false,exclusive false,autodelete false,arguments null 交換機設定為空字串 p發給乙個交換機,這個交換機繫結兩個佇列,c1 c2各...
RabbitMQ 工作模式
第一種 簡單模式 一 生產者 public static void main string args throws ioexception,timeoutexception二 消費者 public static void main string args throws ioexception,tim...