如何解决我正在尝试使用go-stom / stomp连接到由网络导轨托管的darwin pushport服务
我正在尝试连接到this处的Darwin Push端口馈送。当我尝试按照here的说明进行连接时,出现2个错误之一。
如果我忽略订阅选项,则会收到身份验证错误, 并且如果包含它们,它说我无法为队列创建持久订阅。
如果有人能告诉我哪个错误更接近连接,那将是一个很大的帮助。
package main
import (
"fmt"
"github.com/Showmax/go-fqdn"
"github.com/go-stomp/stomp"
"github.com/go-stomp/stomp/frame"
)
var serverAddr = "darwin-dist-44ae45.nationalrail.co.uk:61613"
var messageCount = 10
var topic = "topic/darwin.pushport-v16"
var username = "####"
var password = "###"
var stop = make(chan bool)
fqdn,err := fqdn.FqdnHostname()
if err != nil {
panic(err)
}
var connOptions []func(*stomp.Conn) error = []func(*stomp.Conn) error{
stomp.ConnOpt.Login(username,password),stomp.ConnOpt.Host(serverAddr),stomp.ConnOpt.Header("client-id",fmt.Sprintf("%v-%v",username,fqdn)),}
conn,err := stomp.Dial("tcp",serverAddr,connOptions...)
if err != nil {
println("cannot connect to server",err.Error())
return
}
subOptions := []func(*frame.Frame) error{
stomp.SubscribeOpt.Header("activemq.subscriptionName",fqdn),stomp.SubscribeOpt.Header("durable-subscription-name",}
sub,err := conn.Subscribe(topic,stomp.AckClient,subOptions...)
if err != nil {
println("cannot subscribe to",topic,err.Error())
return
}
for i := 1; i <= messageCount; i++ {
msg := <-sub.C
fmt.PrintLn(msg)
}
}
println("receiver finished")
}
我得到的是:
2020/09/04 16:55:35 received ERROR; Closing underlying connection
2020/09/04 16:55:35 Subscription 1: topic/darwin.pushport-v16: ERROR message:Invalid Subscription: cannot durably subscribe to a Queue destination!
Expected: Message #1
Actual: org.apache.activemq.transport.stomp.ProtocolException: Invalid Subscription: cannot durably subscribe to a Queue destination!
at org.apache.activemq.transport.stomp.ProtocolConverter.onStompSubscribe(ProtocolConverter.java:581)
at ...
如果我删除订阅标头:
subOptions := []func(*frame.Frame) error{
// stomp.SubscribeOpt.Header("activemq.subscriptionName",// stomp.SubscribeOpt.Header("durable-subscription-name",}
我明白了:
2020/09/04 17:00:13 received ERROR; Closing underlying connection
2020/09/04 17:00:13 Subscription 1: topic/darwin.pushport-v16: ERROR message:User REDACTED is not authorized to read from: queue://topic/darwin.pushport-v16
Expected: Message #1
Actual: java.lang.SecurityException: User REDACTED is not authorized to read from: queue://topic/darwin.pushport-v16
at org.apache.activemq.security.AuthorizationBroker.addConsumer(AuthorizationBroker.java:159)
at org.apache.activemq.broker.BrokerFilter.addConsumer(BrokerFilter.java:104)
at org.apache.activemq.broker.BrokerFilter.addConsumer(BrokerFilter.java:104)
at
无论是否使用topic/
,我都尝试了这两种方法。
任何帮助将不胜感激。
解决方法
在ActiveMQ中,队列和主题的STOMP客户端的目标前缀分别为import requests
def url_to_file(url,fname= "web_txt.html"):
response = requests.get(url)
html_text = response.text
if response.status_code == 200:
with open(fname,"w") as r:
r.write(str(html_text))
return html_text
return "Failed to perform its task."
url = "https://www.geeksforgeeks.org/absolute-relative-pathnames-unix/"
print(url_to_file(url))
或/queue/
,如果没有前缀或使用无效的前缀,则默认为前缀队列。
为了使 Tim Bish 的回答符合其逻辑结论,您需要在主题描述中添加一个前导斜线,使其显示为 /topic/darwin.pushport-v16
而不仅仅是 topic/darwin.pushport-v16
。然后它将被正确识别为主题(而不是默认为队列)并且应该“正常工作”。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。