rabbitmq——交换机fanout和direct

114 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路 交换机: 生产者将消息发送到交换机上,根据交换机不同的种类,将消息体按照不同的规则转发给不同的消费者。

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)
	}