我今天正在使用https://github.com/streadway/amqp库,并根据示例here进行了粗略的实施。使用域名时工作正常,但连接到本地计算机上的流浪盒时需要相当长的时间。当我在功能中添加JSON请求到同一个服务器时遇到了问题,我遇到了各种与Rabbitmq关闭连接有关的超时问题,因为它等待了很长时间。
所以我运行以下代码,看看我是否可以隔离这个问题。
package main
import (
"log"
"net/http"
"time"
)
func main() {
start := time.Now()
_, err := http.Get("http://local.test.dev/test")
if err != nil {
log.Println("%s", err.Error())
}
log.Printf("Time: %v", time.Since(start))
}
在运行一些测试之后,这导致了一些令人惊讶的输出。
2015/02/09 01:27:33 Time: 1.131834476s
2015/02/09 01:27:37 Time: 828.873332ms
2015/02/09 01:27:40 Time: 862.059803ms
2015/02/09 01:27:41 Time: 207.781482ms
2015/02/09 01:27:43 Time: 810.567042ms
2015/02/09 01:27:45 Time: 197.555383ms
2015/02/09 01:27:55 Time: 776.675657ms
这是traceroute命令的样子,以确保它不是其他问题。
traceroute to local.test.dev (192.168.56.101), 64 hops max, 52 byte packets
1 local.test.dev (192.168.56.101) 0.368 ms 0.430 ms 0.252 ms
我也从上面尝试过相同的剪辑,但是用IP代替。它只有大约60ms,我发现令人惊讶,但让我认为问题不是net / http包,而是amqp库。我在amqp库中使用域名的唯一地方是以下call。
amqp.Dial(amqpURI)
使用域名会有问题吗?除此之外,我无法想到可能导致查询时间过长的原因。
编辑: 我认为这是一个DNS问题,但在玩了IP与域名之后似乎并非如此。此外,amqp Dial似乎不是问题。返回连接只需4毫秒。这只留下channel.Consume作为罪魁祸首。将一些孤立的示例代码放在一起并更新......