关于golang:rabbitMq-交换机介绍-系列二-Fanout-golang-版本

58次阅读

共计 1624 个字符,预计需要花费 5 分钟才能阅读完成。

4 种不同的交换机类型

直连交换机:Direct exchange
扇形交换机:Fanout exchange
主题交换机:Topic exchange
首部交换机:Headers exchange

交换机具体含意参考 https://www.jianshu.com/p/469…

Fanout 交换机

以下代码参数具体含意能够参考 https://segmentfault.com/a/11…

Demo

生产者示例 producer.go
package main
import (
"fmt"
"github.com/streadway/amqp"
"time"
)
// 因:疾速实现逻辑,故:不处理错误逻辑
func main() {conn, _ := amqp.Dial("amqp://user:password@host:ip/vhost")
ch, _ := conn.Channel()
body := "Hello World!" + time.Now().Format("2006-01-02 15:04:05")
fmt.Println(body)
// 申明交换器
ch.ExchangeDeclare("j_exch_fanout", amqp.ExchangeFanout, true, false, false, false, nil)
// fanout
ch.Publish(
"j_exch_fanout", // exchange 这里为空则不抉择 exchange
"j_exch_fanout_key", // routing key
false, // mandatory
false, // immediate
amqp.Publishing{
ContentType: "text/plain",
Body: []byte(body),
//Expiration: "3000", // 设置过期工夫
})
// defer 关键字
defer conn.Close() // 压栈 后进先出
defer ch.Close() // 压栈 后进先出}
消费者 consumer.go
package main
import (
"github.com/streadway/amqp"
"log"
)
func main() {conn, _ := amqp.Dial("amqp://user:password@host:ip/vhost")
ch, _ := conn.Channel()
var exchange_name string = "j_exch_fanout"
var routing_key string = "j_exch_fanout_key"
var queue_name string = "j_queue"
ch.QueueDeclare(queue_name, true, false, true, false, nil)
// 申明交换器 amqp.ExchangeFanout // 扇形交换机
ch.ExchangeDeclare(exchange_name, amqp.ExchangeFanout, true, false, false, false, nil)
ch.QueueBind(
queue_name, // queue name
routing_key, // routing key: fanout 模式不失效
exchange_name, // exchange
false,
nil)
// 监听
msgs, _ := ch.Consume(
queue_name, // queue name
"", // consumer
true, // auto-ack
false, // exclusive
false, // no-local
false, // no-wait
nil, // args
)
forever := make(chan bool)
go func() {
for d := range msgs {//println("tset")
log.Printf("[x] %s", d.Body)
}
}()
log.Printf("[*] Waiting for logs. To exit press CTRL+C")
<-forever
}

正文完
 0