GO获取rabbitMQ
go get github.com/streadway/amqp
1、创建连接
1 2 3
| conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/") failOnError(err, "Failed to connect to RabbitMQ") defer conn.Close()
|
2、创建管道
1 2 3
| ch, err := conn.Channel() failOnError(err,"Failed to open a channel") defer ch.Close()
|
3、创建queueDeclare这一步相当于设定一个key 设置一个queue的key
1 2 3 4 5 6 7 8 9
| q,err := ch.QueueDeclare( "queue", true, false, false, false, nil, ) failOnError(err,"Failed To declare a queue")
|
4、存值调用
1 2 3 4 5
| body := `定义value值将值push到rabbitmq中` err = ch.Publish("",q.Name,false,false,amqp.Publishing{ ContentType: "texp/plain", Body: []byte(body), })
|
5、取值调用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| msgs, err := ch.Consume( q.Name, // queue "", // consumer true, // auto-ack false, // exclusive false, // no-local false, // no-wait nil, // args ) failOnError(err, "Failed to register a consumer") forever := make(chan bool) go func() { for d := range msgs { log.Printf("Received a message: %s", d.Body) } }() log.Printf(" [*] Waiting for messages. To exit press CTRL+C") <-forever
|
6、task_work存值
1 2 3 4 5 6 7 8 9 10 11
| err = ch.Publish( "", q.Name, false, false, amqp.Publishing{ ContentType: "text/plain", DeliveryMode: amqp.Persistent, Body: []byte(body), }, )
|
7、work取值 可这只多个worker执行task队列
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| err = ch.Qos( 1, 0, false, ) failOnError(err,"Failed to Set Qos") msgs, err := ch.Consume( q.Name, // queue "", // consumer false, // auto-ack false, // exclusive false, // no-local false, // no-wait nil, // args ) failOnError(err,"Failed to regster a consumer") forever:= make(chan bool) go func() { for d := range msgs { log.Printf("Received a message: %s", d.Body) dot_count := bytes.Count(d.Body, []byte(".")) t := time.Duration(dot_count) time.Sleep(t * time.Second) d.Ack(false) } }()
|