如何在Anypoint MQ订阅者后读取Java对象Payload?
解决Anypoint MQ订阅端无法读取Java Payload的问题
问题根源
发布端直接输出Java对象时,Anypoint MQ会默认用Java序列化把对象转成二进制存储,订阅端直接读取payload.^raw只能拿到原始二进制流,没法直接解析成可读结构。
推荐解决方案:改用通用格式传输(优先选择)
直接在发布端把Java对象转成JSON这类通用格式,避开二进制序列化的兼容性问题:
修改发布端DataWeave代码
%dw 2.0 output application/json --- { key1: "value1", key2: "value2" }
订阅端处理代码
这时订阅端不用调用^raw,直接读取payload即可:
%dw 2.0 output application/java --- payload
若必须传输Java序列化对象的处理方式
如果业务要求必须用Java对象序列化传输,需要在订阅端做反序列化操作:
使用DataWeave Java模块反序列化
%dw 2.0 import java!java::io::ByteArrayInputStream import java!java::io::ObjectInputStream output application/java --- ObjectInputStream::new(ByteArrayInputStream::new(payload.^raw)).readObject()
注意:要保证发布端和订阅端的Java类版本一致,且类实现了
Serializable接口,否则会反序列化失败。
内容的提问来源于stack exchange,提问作者SP-
相关产品推荐
相关产品推荐

