Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我们是否可以使用AMQP Go consumer将从JMS发布服务器发布的事件映射到结构?_Go_Jms_Amqp_Jms Topic - Fatal编程技术网

我们是否可以使用AMQP Go consumer将从JMS发布服务器发布的事件映射到结构?

我们是否可以使用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

我有一个发布者,它使用JMS通过AMQP将数据发布到主题。它使用一个名为WSO2 message broker的消息代理

在默认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无法解码库中的消息。但无法找到方法。在这种情况下,我无法控制/更改发布数据。