solace - 使用 AMQP/qpid-proton 将 python dict 发布到 Solace 时出错
问题描述
尝试使用 python dict 的有效负载从 solace-samples-amqp-qpid-proton-python 运行 producer.py
Message(id=(self.sent+1), body={'sequence':(self.sent+1)})
得到以下错误
拒绝消息:1 远程处置:Condition('amqp:not-implemented', 'unsupported AMQP value type: TOK_MAP_START')
尝试在正文中发送整数值时出现类似错误 - TOK_TYPE_INT
solace 是否仅支持 AMQP 上的字符串?
解决方案
Solace 消息代理支持 amqp-value 消息部分,其中包含 null、string、binary、symbol 或 uuid 类型的值。(https://docs.solace.com/Open-APIs-Protocols/AMQP/AMQP-Protocol-Conformance.htm#Sec3-2-8)
这样做是为了保持最大的消息互操作性。
任何使用特定语言语义的已发布消息只能使用相同的语义来使用。即如果您使用 Python dict 发布,则只能使用 Python dict 解码,因此如果您使用 MQTT 或 REST 消费者,它将无法解码消息。
最好的选择是使用跨语言的序列化库,这将使未来的扩展更容易。例如,您可能决定将来添加一个 REST 使用者,它可以使用跨语言序列化库对数据进行解码。
推荐阅读
- java - 从rest api下载文件给了我一些垃圾值
- javascript - 如何通过另一个属性找到猫鼬模型的属性?
- python - 想要以相同的顺序和行从 git 存储库中获取具有详细信息(日期、时间、gmt、文件路径、作者)的日志
- android - 无法解析 ':app@debug/compileClasspath' 的依赖关系:无法解析 com.google.firebase:firebase-messaging:17.1.0
- javascript - 使用 Javascript 替换文本而不丢失内部标签
- django - 将我的 Django 项目上传到 github 是否可取?
- c# - 在双数组中获取给定日期的第一个日期索引
- javascript - Amcharts:如何在 balloonFunction 中传递标题?
- c# - 在 C# 中使用带有 API 的用户 ID 向 Facebook 用户发送消息
- java - ArrayIndexOutOfBoundsException 嵌套循环 if 语句