go - 从 golang 使用 AMQP 1.0 连接到 IBM MQ 时出现 EOF

标签 go ibm-mq amqp

我已经在本地 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 的任何相关结果,所以我被卡住了。有没有人有任何想法?

最佳答案

所以解决方案显然是使用 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 似乎在发送初始 header 数据包后就关闭了 channel 。无论如何,EOF 都是从接收 goroutine 中冒出来的。

关于go - 从 golang 使用 AMQP 1.0 连接到 IBM MQ 时出现 EOF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59390981/

相关文章:

google-app-engine - 从 Flex 迁移到标准时,GAE Go 1.11 实例启动问题

go - 如何使用神经网络建立一个基本的围棋项目?

go - 带有 $lookup 查询的 MGO 管道不会附加来自 "joined"集合的匹配文档

java - UTF 到 EBCDIC 的转换是无损的吗?

java - IBM MQ-FFDC-CSIException : JMSCS0002 when I try to run from console

ruby-on-rails - 工作客户端在启动后几秒钟内停止

rabbitmq - 在rabbitmq中广播消息并等待所有回复

amazon-web-services - 在 Golang 中使用 UploadPartCopy 到 MultiPartUpload 时遇到 AccessDenied

ibm-mq - MQ SYSTEM.CLUSTER.REPOSITORY.QUEUE深度不断增加

python - celery 不释放内存