本主题将帮助您理解在运行用户定义的解析器时,WebSphere Message Broker 组件之间发生的交互作用。它根据在每个阶段期间后之后发生或引起的事件以及所调用的 API,说明每个阶段。理解本主题中的概念将使您更有效地设计和开发解析器。
在解析器生命周期的实例化阶段期间创建了解析器。当接收到输入消息时,或当在 compute 节点中构建了输出消息时,标识相关的解析器,并从消息头采用解 析器需求(例如,MQMD)。代理启动、装入可装入的实施库(LIL)和解析器工厂。执行组进程创建解析器的实例,并且代理对 cpiCreateContext 作出调用以允许解析器对象获取相应的消息部分。
在调用此函数前,代理已经将名元素作为有效的根元素为解析器进行了创建。然而,未命名此元素。解析器应该在 cpiSetElementName 函数中命名此元素。
然后代理对 cpiParseBuffer 进行了调用。此阶段 cpiParseBuffer 的目的是执行任何必要的初始化,并返回解析器所占用的消息内容长度。解析器访问要解析多少消息数据,并声明相 应的字节数。
无论何时创建用户定义的解析器对象的实例,还由消息代理调用上下文创建实现函数 cpiCreateContext。这允许解析器分配与解析器关联的实例数据。还需要删除解析器对象上下文的 cpiDeleteContext 函数。
处理阶段的目的是在解释解析器的消息对象内处理、改变和引用元素。发生任何消息处理活动时消息流处理阶段开始,例如,导航,需要访问在与消息相关的代理的内 部模型演示中不存在的消息内的元素。
在消息流处理阶段期间,相应调用解析器来试图浏览消息树。当调用 cpiParseBuffer 时,解析器检查已分配的缓冲区,并创建任何必要的消息元素。
当完成导航的任何格式时,将这些功能(例如,指定消息字段的过滤器表达式)调用到语法元素树的一部分中,该树逻辑代表受用户 定义的解析器支持的消息格式的数据。当代理内的操作需要构建或扩展语法元素树时发生此操作。
当解析器完成解析语法元素树相关的部分时,调用 cpiWriteBuffer。此函数将其语法元素树的一部分附加到与解析器对象关联的消息缓冲区的位流中。这创建输出消息。