如何连接到不在Golang中排队的AMQP 1.0主题

如何连接到不在Golang中排队的AMQP 1.0主题,go,activemq,amqp,Go,Activemq,Amqp,我一直在尝试上的示例代码,但我想连接到一个主题,而不是一个队列,如自述文件上的示例代码所示 我所做的只是把主题名放在“队列名”的位置,就像这样 主程序包 进口( “上下文” “fmt” “日志” “时间” “github.com/Azure/go-amqp” ) const host=“example.com” const topic=“/topic/my_topic” const port=“5672” const username=“我的用户名” const password=“我的密码”

我一直在尝试上的示例代码,但我想连接到一个主题,而不是一个队列,如自述文件上的示例代码所示

我所做的只是把主题名放在“队列名”的位置,就像这样

主程序包
进口(
“上下文”
“fmt”
“日志”
“时间”
“github.com/Azure/go-amqp”
)
const host=“example.com”
const topic=“/topic/my_topic”
const port=“5672”
const username=“我的用户名”
const password=“我的密码”
//处理错误的hleper函数
func failOnError(错误,消息字符串){
如果错误!=零{
log.Fatalf(“%s%s”,消息,错误)
}
}
func main(){
//连接到远程amqp服务器
主机地址:=fmt.Sprintf(“amqps://%s:%s”,主机,端口)
log.Println(“连接到”,主机地址)
客户端,错误:=amqp.Dial(主机地址,
amqp.connsasslplain(用户名、密码),
)
FailOneError(错误,“连接到服务器失败”)
延迟客户端。关闭()
//开课
会话,错误:=client.NewSession()
FailOneError(错误,“未能创建AMQP会话”)
ctx:=context.Background()
//持续阅读信息
{
//创建接收器
receiver,错误:=session.NewReceiver(
amqp.LinkSourceAddress(主题),
amqp.LinkCredit(10),
)
FailOneError(错误,“创建接收器链接失败”)
延迟函数(){
ctx,cancel:=context.WithTimeout(ctx,1*time.Second)
接收器关闭(ctx)
取消
}()
log.Printf(“[*]正在等待消息。要退出,请按CTRL+C”)
为了{
//接收下一条消息
msg,err:=receiver.Receive(ctx)
FailOneError(错误,“从AMQP读取消息失败:”)
//接受消息
msg.Accept(context.Background())
fmt.Printf(“收到的消息:正文:%s\n”,消息值)
}
}
}
我一直犯这个错误

创建接收器链接失败*错误{条件:amqp:未经授权的访问,
说明:未授权用户my_用户名读取以下内容:queue:///topic/my_topic,信息:地图[]}
看起来它把我的话题当作一个队列。如何将接收者设置为尝试附加到主题而不是队列

编辑
我正在使用一个使用AMQP1.0的代理。它是由其他人管理的,所以我只需要使用AMQP1.0。
这意味着我不能使用更流行的软件包,因为它不支持AMQP1.0。感谢您提醒我添加此内容。

经过反复尝试,我想您可以将主题更改为'topic://my_topic"

const主题=”topic://my_topic"
代码的其余部分保持不变。我创建了一个用于发送和接收主题的


我希望这能帮助像我这样的新手在键盘上敲打他们的脑袋。

你应该澄清你使用的是什么AMQP经纪人,因为这会帮助人们提供有意义的服务answers@TimBish,我已更新了问题。感谢您提醒我。需要注意的是,目标前缀是ActiveMQ 5独有的,其他AMQP代理不会做出相同的反应。