C 用户定义的输入节点生命周期

本主题指导您通过用 C 编程语言编写的、用户定义的输入节点的生命的各个阶段。它包括输入节点生命周期中的以下阶段:

注册

注册阶段期间,代理发现可用的资源,以及可以为它们提供的 LIL。在此示例中,可用资源是节点。当执行组启动时该阶段开始。执行组启动时装入 LIL,并且代理将查询它们以找出它们可以提供的资源。

在注册阶段期间,当用户定义的节点调用 cniCreateNodeFactory 时,创建 CciFactory 结构。

在此阶段期间,代理调用了以下 API:
  • biGetMessageflowNodeFactory
  • bipGetParserFactory
在此阶段期间,用户定义的节点调用了以下 API:
  • cniCreateNodeFactory

实例化

当启动 mqsistart 命令或重新启动执行组进程时,或当部署与节点关联的消息流时,将创建用户定义的输入节点的实例。

在此阶段期间调用了以下 API:
  • cniCreateNodeContext。此 API 为用户定义的节点的实例化分配内存来为配置的属性保留值。为每个使用用户定义的 Input 节点的 消息流调用一次 API。
  • cniCreateInputTerminal。在 cniCreateNodeContext API 内调用此 API,并且用于告诉代理用户定 义的输入节点有什么输入终端(如果有)。
    注: 如果用户定义的输入节点还作为消息处理节点,则用户定义的节点仅具有输入终端。如果是这种情况,则通常最好使用分隔的用户定义的消息处理节点来执行消息处理,而不是将两种操作组合在一个更复杂的节点中。
  • cniCreateOutputTerminal。在 cniCreateNodeContext API 内调用此 API,并且用于告诉代理用户 定义的输入节点具有什么输出终端。
  • cniSetAttribute。此 API 由代理调用,为已配置的用户定义的节点的属性建立值。

在此阶段期间,创建 CciTerminal 结构。当调用 cniCreateTerminal 时,创建此结构。

处理

当代理调用 cniRun 函数时开始处理阶段。代理使用 cniRun 函数来确定如何处理消息,包括确定定义消息的域,以及为该域调用相关的解析器。

需要来自消息流的线程池,并在输入节点的运行方法中开始的线程。该线程连接到代理的队列管理器,并为其生命期保留此连接。当线程已经分配时,当节点等待接收消息时,它进入消息处理循环。直到接收到消息,它才会跳出循环。如果消息流配置为使用多个线程,则激活线程分派。

现在可以下行传播消息。

在此阶段期间调用了以下 API:
  • cniRun。此函数由代理调用来确定如何处理输入消息。
  • cniSetInputBuffer。此函数提供输入缓冲区,或告诉代理输入缓冲区的位置,并将它与消息对象关联起来。

消除

当重新部署消息流时,或当使用 mqsistop 来停止执行组进程时,将破坏用户定义的输入节点。您可以通过实现 cniDeleteNodeContext 函 数破坏节点。

当用这些方法之一破坏用户定义的输入节点时,您应该释放由节点使用的任何内存,并释放任何保持的资源(例如,套接字)。

在此阶段期间调用了以下 API:
  • cniDeleteNodeContext。此函数由代理调用来破坏输入节点的实例。
声明 | 商标 | 下载 | 书库 | 支持 | 反馈
Copyright IBM Corporation 1999, 2006 最后一次更新时间:2006/08/14
as01391_