当前位置: 代码迷 >> 综合 >> Rabbit MQ 使用(五)
  详细解决方案

Rabbit MQ 使用(五)

热度:25   发布时间:2024-02-22 10:31:24.0
package mainimport ("context""fmt""github.com/streadway/amqp""learning_tools/rabbitmq/mq""time"
)/**
在这里我会建立二个消费者和一个生产者
*/
func main() {ctx, cancel := context.WithCancel(context.Background())//生产者go Sample(ctx)//消费者go mq.SampleConsumption(ctx, "q1", "c1")go mq.SampleConsumption(ctx, "q2", "c2")time.Sleep(2 * time.Second)cancel()
}func Sample(ctx context.Context) {// 创建连接connection := mq.Connection()defer connection.Close()// 开启 channelchannel, err := connection.Channel()if err != nil {panic(err)}defer channel.Close()//创建一个交换器if err = channel.ExchangeDeclare("e3",amqp.ExchangeTopic,true,false,false,true,nil); err != nil {panic(err)}//创建一个队列 q1if _, err := channel.QueueDeclare("q1",true,false,false,true,nil); err != nil {panic(err)}//创建一个队列 q2if _, err := channel.QueueDeclare("q2",true,false,false,true,nil); err != nil {panic(err)}//交换机和队列绑定//这里key以.隔开,#代表任意一个字符串或者没有,*代表任意一个字符串//vvv.orange.rabbit.oo 只能匹配到q2队列里面if err = channel.QueueBind("q1", "*.orange.*", "e3", true, nil); err != nil {panic(err)}if err = channel.QueueBind("q2", "*.*.rabbit.#.#", "e3", true, nil); err != nil {panic(err)}// Publish 生产一条消息 这里生产者和队列没有关系,这是吧消息放在交换器里面,由交换器觉得给那个队列for i := 0; i < 5; i++ {//time.Sleep(time.Second / 4)if err = channel.Publish("e3","vvv.orange.rabbit.oo",false,false,amqp.Publishing{Timestamp:    time.Now(),DeliveryMode: amqp.Persistent,ContentType:  "text/plain",Body:         []byte(fmt.Sprintf("%d:,Hello Rabbit MQ!", i)),}); err != nil {panic(err)}}
}