C 用户定义的消息处理节点生命周期

本主题指导您通过用 C 编程语言编写的、用户定义的消息处理节点的生命的各个阶段。它涉及已创建和已破坏的对象,以及在以下阶段中调用的实施函数和类:

本主题中的信息适用于输出节点和消息处理节点。这两种节点类型可以视为一体,这是因为尽管消息处理节点通常用于处理消息,而输出节点用于提供位流格式的输出,但是您可以使用这两个节点类型中的任何一个来执行这两种功能中的任何一种。

注册

操作系统装入并初始化包含节点的 LIL 后,用户定义的消息处理节点向代理进行注册。

代理调用 bipGetMessageflowNodeFactory 来确定 LIL 的函数及如何调用 LIL。

bipGetMessageflowNodeFactory 函数又调用 cniCreateNodeFactory 函数,该函数为 LIL 支持的所有节点返回工厂或组名。

然后,LIL 应该调用实用程序函数 cniDefineNodeClass,以传递每个节点的名称和实施函数的函数指针的虚函数表。

实例化

在实例化阶段,将创建用户定义的消息处理节点的实例。当代理创建消息流并为该消息流中用户定义节点的每个实例化调用 cniCreateNodeContext 函数时,该阶段开始。cniCreateNodeContext 函数是在 CNI_VFT 结构的 iFpCreateNodeContext 字段中指定的函数,该 CNI_VFT 结构被传递到该节点类型的 cniDefineNodeClass。此函数应该为该节点分配所需的资源(包括内存),这样用户定义节点的实例化就可以保留已配置属性的值。

代理将在以下情况中创建节点实例并调用 cniCreateNodeContext
  • 创建消息流:
    • 正在启动代理(用户已运行 mqsistart)。当代理启动时,将重新创建以前部署的所有消息流。
    • 正在重新装入执行组(用户已运行 mqsireload)。当重新装入执行组时,将重新创建以前部署的所有消息流。
    • 执行组中出现严重错误,导致执行组正在重新启动。
  • 重新部署消息流。当对消息流进行更改及重新部署时,代理将通过删除消息流中的所有节点,然后再用新的配置重新创建它们来进行重新部署。
注: 启动执行组时不创建消息流。停止执行组只是简单地停止所有流,它不会删除流或停止进程。重新启动执行组将启动消息流,但不会重新创建消息流。

cniCreateContext 内,用户定义的扩展调用两个函数 cniCreateInputTerminalcniCreateOutputTerminal,来确定消息处理节点所具有的输入和输出终端。

处理

在用户定义的消息处理节点生命周期的处理阶段,当在输入消息上进行一些处理操作时,会以某些方式转换消息。

当代理从队列检索消息并且该消息到达用户定义节点的输入终端时,代理调用实施函数 cniEvaluate。此函数用于确定对消息进行什么处理。

您可以在用户定义的消息处理节点中使用一系列的节点实用程序函数来执行一系列的消息处理函数,例如,访问消息数据、访问 ESQL、转换消息对象和传播消息。您应该将要用于处理消息的节点实用程序函数包含在 cniEvaluate 函数内。

此接口不为消息自动生成属性子树。不要求消息一定要具有属性子树,尽管您可能会发现创建一个 properties 子树对于提供一致的消息树结构(不考虑输入节点)十分有用。如果您要在消息中创建属性子树,并且还使用用户定义的输入节点,则必须自行执行此操作。

消除

用户定义的消息处理节点已经对消息进行处理之后,您应该确保它已被破坏,来释放它使用的任何系统资源,并释放任何特定于节点实例的数据区,例如,当构造或处理消息时获取的上下文。

当代理调用 cniDeleteNodeContext 函数时,将破坏用户定义的消息处理节点的实例。

当删除节点的实例时,代理将调用 cniDeleteNodeContext。以下事件可能导致节点被删除:
  • 执行组进程的受控终止:
    • 正在停止代理(用户已运行 mqsistop)
    • 正在重新装入执行组(用户已运行 mqsireload)
    • 执行组中出现严重错误,导致执行组正在重新启动。
    注: 这不包括停止执行组。停止执行组只是简单地停止所有流,它不会删除流或停止进程。
  • 删除消息流。例如,从工具的“代理管理”透视图删除消息流。
  • 重新部署消息流。当对消息流进行更改及重新部署时,代理将通过删除消息流中的所有节点,然后再用新的配置重新创建它们来进行重新部署。
声明 | 商标 | 下载 | 书库 | 支持 | 反馈
Copyright IBM Corporation 1999, 2006 最后一次更新时间:2006/08/14
as01394_