本文已参与「新人创作礼」活动,一起开启掘金创作之路 交换机: 生产者将消息发送到交换机上,根据交换机不同的种类,将消息体按照不同的规则转发给不同的消费者。
fanout
此模式是将生产者生产的消息,通过交换机绑定的所有队列,发送到所有绑定到此交换机上的队列。
product.go
err = c.ExchangeDeclare("j" , amqp.ExchangeFanout , false, false , false , false , nil)
fmt.Println(err)
qu , err := c.QueueDeclare("hello-test" , false , false , false , false , nil)
fmt.Println(err)
err = c.QueueBind(qu.Name , "" , "j" , false ,nil)
fmt.Println(err)
msg , err := c.Consume(qu.Name ,"" , false , false , false , false , nil)
fmt.Println(err)
for d := range msg {
fmt.Println(string(d.Body))
d.Ack(false)
}
fanout模式是将接收到的消息转发给绑定此交换机的所有队列。
direct
direct模式将生产者的消息通过key转发给不同的队列。
product.go
err = c.ExchangeDeclare("jht" , amqp.ExchangeDirect, false , false ,false , false , nil)
fmt.Print(err)
_ = c.Publish("jht" , "ok", false , false , amqp.Publishing{
Body: []byte("test hello"),
})
consumer.go
err = c.ExchangeDeclare("jht" , amqp.ExchangeDirect, false, false , false , false , nil)
fmt.Println(err)
qu , err := c.QueueDeclare("" , false , false , false , false , nil)
fmt.Println(err)
err = c.QueueBind(qu.Name , "ok" , "jht" , false ,nil)
fmt.Println(err)
msg , err := c.Consume(qu.Name ,"" , false , false , false , false , nil)
fmt.Println(err)
for d := range msg {
fmt.Println(string(d.Body))
d.Ack(false)
}