交换机:
生产者将消息发送到交换机上,根据交换机不同的种类,将消息体按照不同的规则转发给不同的消费者。
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)}