使用Go-Stomp缓存ActiveMQ的连接

时间:2016-03-10 20:00:51

标签: go stomp

使用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))
    }

2 个答案:

答案 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
        }
    }