【问题标题】:EOF when connecting to IBM MQ with AMQP 1.0 from golang从 golang 使用 AMQP 1.0 连接到 IBM MQ 时出现 EOF
【发布时间】:2019-12-20 03:37:54
【问题描述】:

我在本地 Windows VM 上安装了 IBM MQ (8.0.0.4) 并按照文档中的说明启用 AMQP (https://www.ibm.com/support/knowledgecenter/en/SSFKSJ_8.0.0/com.ibm.mq.con.doc/tamqp_creating.htm),并且还禁用了身份验证,因为这只是一个本地开发环境。完成后,我可以使用 IBM 的 mqlight 包中的 node.js 示例从我的主机操作系统进行连接:

>npm install mqlight
...
>node node_modules/mqlight/samples/recv.js -s amqp://windows-10:5672
Connected to amqp://windows-10:5672 using client-id recv_126117c
Subscribed to pattern: public

但是,当尝试使用 vcabbage/amqp(版本 0.12.5)从 golang 应用程序连接时,它会在尝试拨打主机时返回 EOF 错误。最小的例子:

package main

import (
    "fmt"

    "pack.ag/amqp"
)

func main() {
    _, err := amqp.Dial("amqp://windows-10:5672")
    fmt.Println(err) // EOF
}

IBM MQ 错误日志中未显示任何内容。

不幸的是,谷歌没有提供通过 golang 中的 AMQP 1.0 连接到 IBM MQ 的任何相关结果,所以我被卡住了。有人有什么想法吗?

【问题讨论】:

  • 你应该尝试启用调试模式见github.com/vcabbage/amqp/blob/master/log_debug.go尝试go run -tags debug main.go
  • 在调试模式下不会记录其他信息(看起来库在创建会话之前不会进行调试日志记录)。
  • 也许值得进一步挖掘并尝试找出 EOF 的来源。在使用wireshark 或其他方法之前,您可以使用%+v 动词打印错误吗?正如github.com/vcabbage/amqp 末尾所记录的那样,它正在使用github.com/pkg/errors,这可能会报告有关堆栈跟踪错误。

标签: go ibm-mq amqp


【解决方案1】:

所以解决方案显然是使用 SASL 匿名模式;这允许客户端连接。

package main

import (
    "fmt"

    "pack.ag/amqp"
)

func main() {
    _, err := amqp.Dial("amqp://windows-10:5672", amqp.ConnSASLAnonymous())
    fmt.Println(err) // nil
}

如果有人想让它在“正常”模式下工作,IBM MQ 似乎在发送初始标头数据包后就关闭了通道。无论如何,EOF 都是从接收 goroutine 中冒出来的。

【讨论】:

    猜你喜欢
    • 2020-04-23
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 2018-05-22
    相关资源
    最近更新 更多