跳到主要内容
版本:4.0

消息模型转换概览

当采用消息队列与媒体服务进行对接时,集成系统与媒体服务之间的数据模型通常存在较大的差异,因此也面临这些消息与集成系统的数据模型之间的适配问题。 而消息模型的适配问题,主要存在于指令、指令应答这两个模型中(其他消息,一般在集成系统中并没有对应的概念,因此也不存在适配问题),针对这两个模型, 媒体服务从 4.0 开始,针对term-cmdcmd-state-chg 两个队列,提供基于JSON数据格式 和 JavaScript 脚本的消息转换机制,为集成企业的消息适配提供便利。 如果企业应用本身已在使用消息队列,并且消息数据使用的也是 JSON 格式,则可以利用本文所述的消息模型转换机制来进行消息转换。如果这个条件不满足, 则需要企业应用另行开发消息模型的转换了。

基本工作方式

消息模型转换的调用过程如下:

  1. 媒体服务加载执行消息转换的 JavaScript 脚本文件,脚本文件中要导出(export) convertTermCmdgetAckInfo 两个函数
  2. 当媒体服务要下发指令时,会将 TermCmd 消息模型转成字符串,并为参数 调用 convertTermCmd 函数,然后从 convertTermCmd 得到转换后的企业应用自身格式的消息,再将消息 term-cmd 队列投递指令消息
  3. 企业应用从 term-cmd 队列获得自己格式的消息并通过网关编码下发到终端
  4. 当指令应答时,企业应用将自已格式的消息投递到 cmd-state-chg,媒体服务收到消息后,会将消息转换成字符串,并作为参数调用 getAckInfo 函数,然后从 getAckInfo 得到转换后的 AckInfoAckInfo 包含了媒体服务需要的应答的相关信息

消息模型转换只用于指令、指令应答的消息模型转换。

启用消息模型转换

  1. 编写 一个JavaScript 的消息转换脚本文件(module),放置到 服务程序的 config/script 目录下,文件名应使用只由字母数字组成的文件名,以 .mjs 为文件扩展名,如 e-eye.mjs,文件名(e-eye)在配置文件要引用到。
  2. 修改 config/config.json 配置文件定义一个 adaptor 配置,如:
{
"mq": {
"adaptor": {
"script": "e-eye",
"logEnabled": true
}
}
}

其中,mq.adaptor.script 是脚本文件的文件名(不包括 .mjs扩展名),将mq.adaptor.logEnabled设置为 true则脚本文件中调用 console.log() 会输出到媒体服务的日志文件,用于辅助调试。

  1. 然后将 mq.termCmd.useAdaptor,和 mq.cmdStateChanged.useAdaptor 设置为 true,如:
{
"mq": {
"termCmd": {
"channel": "rabbit",
"destination": "term-cmd",
"useAdaptor": true
},
"cmdStateChange": {
"channel": "rabbit",
"destination": "cmd-state-change",
"useAdaptor": true
}
}
}

当启用消息队列模型转换后,服务启动时会检查脚本文件是否存在,语法是否正确,并且是否已经导出 convertTermCmdgetAckInfo 两个函数。