使用Go-Stomp,可以使用以下代码获取连接。
IE.navigate
是否可以缓存连接以重用以发送不同请求的消息?
或者每次想要发送消息时我们是否需要获取连接?
后来听起来效率不高。
连接实例上的发送方法会在出现故障时关闭连接。因此,如果我们对其进行缓存,则必须检查连接是否仍然存在以用于后续发送消息调用。但是我找不到检查连接是否关闭的方法? Conn struct有已关闭成员,但不会通过任何方法公开。
if conn, err = stomp.Dial("tcp",
Broker.URI,
stomp.ConnOpt.Login(Broker.User, Broker.Password)); err != nil {
panic(fmt.Sprintf("Could not connect to ActiveMQ using brokerUri %v. Can not continue.", Broker.URI))
}
答案 0 :(得分:0)
您可以重用连接直到失败,请参阅go-stomp示例中的example。
如果打开与否,无法测试。
在库本身中,他们会在读取时出错,但不会发送:
if err != nil {
if err == io.EOF {
log.Println("connection closed:", c.rw.RemoteAddr())
答案 1 :(得分:0)
我添加了代码来处理失败并检查特定错误。
if err := conn.Send(queue, "text/plain", []byte(message)); err != nil {
if err == stomp.ErrAlreadyClosed {
log.Println("ActiveMQ Connection is in closed state. Reconnecting ...")
conn = ConnectToBroker()
err = conn.Send(queue, "text/plain", []byte(message))
}
if err != nil {
log.Printf("Failed to send message to Queue %v. Error is %v, Payload is %v", queue, err.Error(), message)
}
return err
}
}