我正在编写一个应用程序,我遇到了这个问题,一遍又一遍地查看代码,似乎没有任何问题,用下面的基本代码片段测试,问题是可重现的...... RabbitMQ 说队列总是空的不是。
下面的 Golang 代码片段显示了生产者发送消息的频率高于消费者消费消息的频率。消费者始终处于活动状态,但睡眠时间更长,以使队列在其积压中具有消息。结果?消费者每次尝试都会获取消息,但是 API 总是说没有消息 -> 消息计数为 0。
package main
import (
"encoding/json"
"fmt"
"github.com/streadway/amqp"
"io/ioutil"
"net/http"
"testing"
"time"
)
func main() {
username := "guest"
password := "guest"
scheme := "amqp"
rabbitMqHost := "localhost"
port := "5672"
connectionString := fmt.Sprintf("%s://%s:%s@%s:%s/", scheme, username, password, rabbitMqHost, port)
conn, err := amqp.Dial(connectionString)
if err != nil {
panic(err)
}
ch, err := conn.Channel()
if err != nil {
panic(err)
}
exchangeName := "my-exchange"
// Declare exchange
err = ch.ExchangeDeclare(
exchangeName, // name
"fanout", // type
true, // durable
true, // auto-deleted
false, // internal
false, // no-wait
nil, // arguments
)
if err != nil {
panic(err)
}
// Create first Queue
queueName := "my-queue"
q, err := ch.QueueDeclare(
queueName, // name
true, // durable
true, // delete when unsused
false, // exclusive
false, // no-wait
nil, // arguments
)
if err != nil {
panic(err)
}
// Bind Exchange to Queue
err = ch.QueueBind(
q.Name, // queue name
"", // routing key
exchangeName, // exchange
false,
nil,
)
// Listen
eventQueue, err := ch.Consume(
q.Name, // queue
"", // consumer
true, // auto-ack
false, // exclusive
false, // no-local
false, // no-wait
nil, // args
)
if err != nil {
panic(err)
}
}
您可以使用以下 RabbitMQ 服务器进行测试:
docker run --rm --hostname my-rabbit --name some-rabbit -p 5672:5672 -p 15672:15672 rabbitmq:3-management
四季花海
汪汪一只猫
相关分类