我们是否可以使用AMQP Go consumer将从JMS发布服务器发布的事件映射到结构?
我有一个发布者,它使用JMS通过AMQP将数据发布到主题。它使用一个名为WSO2 message broker的消息代理 在默认java实现中,接收到的消息映射到我们是否可以使用AMQP Go consumer将从JMS发布服务器发布的事件映射到结构?,go,jms,amqp,jms-topic,Go,Jms,Amqp,Jms Topic,我有一个发布者,它使用JMS通过AMQP将数据发布到主题。它使用一个名为WSO2 message broker的消息代理 在默认java实现中,接收到的消息映射到javax.jms.MapMessage对象,并从带有键、值对的映射中提取值 我想从Go客户端订阅一个主题以检索消息。我可以使用库连接到MessageBroker,并使用amqp.Delivery类型检索所需的消息,其正文作为字节数组。但是,当我尝试将其解组/解码为结构/映射时,会出现错误查找值开头的无效字符“\x00” 这是从java
javax.jms.MapMessage
对象,并从带有键、值对的映射中提取值
我想从Go客户端订阅一个主题以检索消息。我可以使用库连接到MessageBroker,并使用amqp.Delivery类型检索所需的消息,其正文作为字节数组。但是,当我尝试将其解组/解码为结构/映射时,会出现错误查找值开头的无效字符“\x00”
这是从java端收到的消息
Body:
{event_type=key_manager_configuration, name=NewKM, action=update, type=Okta, tenantDomain=carbon.super, value=eyJjbGFpbV9tYXBwaW5ncyI6W10sImF1dGhvcml6ZV9lbmRwb2ludCI6Imh0dHBzOi8vZGV2LTI3MzEwNDkub2t0YS5jb20vb2F1dGgyL2RlZmF1bHQvdjEvYXV0aG9yaXplIiwiYXBpS2V5IjoiMDBRakd2aFotVThxNVptQ1dwRVY5Qy0zNVE2QzFjdXhOTEtVMDhidjJYIiwiZ3JhbnRfdHlwZXMiOlsiYXV0aG9yaXphdGlvbl9jb2RlIiwiaW1wbGljaXQiLCJyZWZyZXNoX3Rva2VuIiwicGFzc3dvcmQiLCJjbGllbnRfY3JlZGVudGlhbHMiXSwiZW5hYmxlX29hdXRoX2FwcF9jcmVhdGlvbiI6dHJ1ZSwiaW50cm9zcGVjdGlvbl9lbmRwb2ludCI6Imh0dHBzOi8vZGV2LTI3MzEwNDkub2t0YS5jb20vb2F1dGgyL2RlZmF1bHQvdjEvaW50cm9zcGVjdCIsImNlcnRpZmljYXRlX3ZhbHVlIjoiaHR0cHM6Ly9kZXYtMjczMTA0OS5va3RhLmNvbS9vYXV0aDIvZGVmYXVsdC92MS9rZXlzIiwiZW5hYmxlX3Rva2VuX2dlbmVyYXRpb24iOnRydWUsImNsaWVudF9pZCI6IjBvYTFjeDR5ajI4UVJzMUhINWQ2IiwiaXNzdWVyIjoiaHR0cHM6Ly9kZXYtMjczMTA0OS5va3RhLmNvbS9vYXV0aDIvZGVmYXVsdCIsImVuYWJsZV9tYXBfb2F1dGhfY29uc3VtZXJfYXBwcyI6dHJ1ZSwiZW5hYmxlX3Rva2VuX2hhc2giOmZhbHNlLCJzZWxmX3ZhbGlkYXRlX2p3dCI6ZmFsc2UsInJldm9rZV9lbmRwb2ludCI6Imh0dHBzOi8vZGV2LTI3MzEwNDkub2t0YS5jb20vb2F1dGgyL2RlZmF1bHQvdjEvcmV2b2tlIiwid2VsbF9rbm93bl9lbmRwb2ludCI6Imh0dHBzOi8vZGV2LTI3MzEwNDkub2t0YS5jb20vb2F1dGgyL2RlZmF1bHQvLndlbGwta25vd24vb2F1dGgtYXV0aG9yaXphdGlvbi1zZXJ2ZXIiLCJzY29wZXNfY2xhaW0iOiJzY3AiLCJlbmFibGVfdG9rZW5fZW5jcnlwdGlvbiI6ZmFsc2UsImNsaWVudF9yZWdpc3RyYXRpb25fZW5kcG9pbnQiOiJodHRwczovL2Rldi0yNzMxMDQ5Lm9rdGEuY29tL29hdXRoMi92MS9jbGllbnRzIiwidG9rZW5fZm9ybWF0X3N0cmluZyI6Ilt7XCJpZFwiOjEsXCJlbmFibGVcIjp0cnVlLFwidHlwZVwiOlwiSldUXCIsXCJ2YWx1ZVwiOntcImJvZHlcIjp7fX19XSIsImNvbnN1bWVyX2tleV9jbGFpbSI6ImNpZCIsImNsaWVudF9zZWNyZXQiOiJaclZfNnAtcS0zSy01bzdldFFicmtwUm9MMmI1UDZYeU1rcTZXclNSIiwiY2VydGlmaWNhdGVfdHlwZSI6IkpXS1MiLCJ0b2tlbl9lbmRwb2ludCI6Imh0dHBzOi8vZGV2LTI3MzEwNDkub2t0YS5jb20vb2F1dGgyL2RlZmF1bHQvdjEvdG9rZW4ifQ==, enabled=false}
JMS Correlation ID: null
JMS timestamp: 1607418910052
JMS expiration: 0
JMS priority: 4
JMS delivery mode: 2
JMS reply to: null
JMS Redelivered: false
JMS Destination: topic://amq.topic/keymanager/?routingkey='keymanager'&exclusive='true'&autodelete='true'
JMS Type: null
JMS MessageID: ID:d0ef4dac-9844-3e66-9a4e-a8f2448d360d
JMS Content-Type: amqp/map
AMQ message number: 6
Properties:
JMS_QPID_DESTTYPE = 2
这是从Go端接收的字节数组中转换的字符串
\x00\x00\a\x0f\x00\x00\x00\a\nevent_type\x98\x00\x00\x00\x19key_manager_configuration\x04name\x98\x00\x00\x00\x05NewKM\x06action\x98\x00\x00\x00\x06update\x04type\x98\x00\x00\x00\x04Okta\ftenantDomain\x98\x00\x00\x00\fcarbon.super\x05value\x98\x00\x00\x06\x80eyJjbGFpbV9tYXBwaW5ncyI6W10sImF1dGhvcml6ZV9lbmRwb2ludCI6Imh0dHBzOi8vZGV2LTI3MzEwNDkub2t0YS5jb20vb2F1dGgyL2RlZmF1bHQvdjEvYXV0aG9yaXplIiwiYXBpS2V5IjoiMDBRakd2aFotVThxNVptQ1dwRVY5Qy0zNVE2QzFjdXhOTEtVMDhidjJYIiwiZ3JhbnRfdHlwZXMiOlsiYXV0aG9yaXphdGlvbl9jb2RlIiwiaW1wbGljaXQiLCJyZWZyZXNoX3Rva2VuIiwicGFzc3dvcmQiLCJjbGllbnRfY3JlZGVudGlhbHMiXSwiZW5hYmxlX29hdXRoX2FwcF9jcmVhdGlvbiI6dHJ1ZSwiaW50cm9zcGVjdGlvbl9lbmRwb2ludCI6Imh0dHBzOi8vZGV2LTI3MzEwNDkub2t0YS5jb20vb2F1dGgyL2RlZmF1bHQvdjEvaW50cm9zcGVjdCIsImNlcnRpZmljYXRlX3ZhbHVlIjoiaHR0cHM6Ly9kZXYtMjczMTA0OS5va3RhLmNvbS9vYXV0aDIvZGVmYXVsdC92MS9rZXlzIiwiZW5hYmxlX3Rva2VuX2dlbmVyYXRpb24iOnRydWUsImNsaWVudF9pZCI6IjBvYTFjeDR5ajI4UVJzMUhINWQ2IiwiaXNzdWVyIjoiaHR0cHM6Ly9kZXYtMjczMTA0OS5va3RhLmNvbS9vYXV0aDIvZGVmYXVsdCIsImVuYWJsZV9tYXBfb2F1dGhfY29uc3VtZXJfYXBwcyI6dHJ1ZSwiZW5hYmxlX3Rva2VuX2hhc2giOmZhbHNlLCJzZWxmX3ZhbGlkYXRlX2p3dCI6ZmFsc2UsInJldm9rZV9lbmRwb2ludCI6Imh0dHBzOi8vZGV2LTI3MzEwNDkub2t0YS5jb20vb2F1dGgyL2RlZmF1bHQvdjEvcmV2b2tlIiwid2VsbF9rbm93bl9lbmRwb2ludCI6Imh0dHBzOi8vZGV2LTI3MzEwNDkub2t0YS5jb20vb2F1dGgyL2RlZmF1bHQvLndlbGwta25vd24vb2F1dGgtYXV0aG9yaXphdGlvbi1zZXJ2ZXIiLCJzY29wZXNfY2xhaW0iOiJzY3AiLCJlbmFibGVfdG9rZW5fZW5jcnlwdGlvbiI6ZmFsc2UsImNsaWVudF9yZWdpc3RyYXRpb25fZW5kcG9pbnQiOiJodHRwczovL2Rldi0yNzMxMDQ5Lm9rdGEuY29tL29hdXRoMi92MS9jbGllbnRzIiwidG9rZW5fZm9ybWF0X3N0cmluZyI6Ilt7XCJpZFwiOjEsXCJlbmFibGVcIjp0cnVlLFwidHlwZVwiOlwiSldUXCIsXCJ2YWx1ZVwiOntcImJvZHlcIjp7fX19XSIsImNvbnN1bWVyX2tleV9jbGFpbSI6ImNpZCIsImNsaWVudF9zZWNyZXQiOiJaclZfNnAtcS0zSy01bzdldFFicmtwUm9MMmI1UDZYeU1rcTZXclNSIiwiY2VydGlmaWNhdGVfdHlwZSI6IkpXS1MiLCJ0b2tlbl9lbmRwb2ludCI6Imh0dHBzOi8vZGV2LTI3MzEwNDkub2t0YS5jb20vb2F1dGgyL2RlZmF1bHQvdjEvdG9rZW4ifQ==\aenabled\b\x00
如果有人能指导我找到一个解决方法,使信息可用,那将是一个很大的帮助
这是用于解组消息的代码段
func handle(deliveries <-chan amqp.Delivery, done chan error) {
for d := range deliveries {
var bar map[string]string
err := json.Unmarshal(d.Body, &bar)
if err != nil {
log.Println(err)
}
log.Println(bar)
d.Ack(false)
}
log.Printf("handle: deliveries channel closed")
done <- nil
}
func handle(deliveries不依赖于代理或协议特定的转换。您应该发送协议无关的数据(例如JSON、protobuf、XML等),然后在客户端进行转换
如果您依赖代理来实现这些功能,那么您将任由代理摆布,这意味着如果您更改代理,事情可能会发生变化。这不利于应用程序的可移植性,并最终威胁到应用程序的稳定性。请您添加试图解组正文字节数组的代码,以及正在使用的结构/映射。添加了用于解组正文的代码片段是什么让您认为这是json编码的?如果这JMS内容类型:amqp/map
表示消息正文的内容类型,那么您将无法用json
包解组正文。是的,内容类型以amqp/map的形式给出。我试图找到一个合适的结构类型或方法od无法解码库中的消息。但无法找到方法。在这种情况下,我无法控制/更改发布数据。