在注册阶段期间,用 Java 编写的、用户定义的输入节点使其本身为代理所知。此节点是通过静态 getNodeName 方法用代理注册的。 无论何时启动代理,它都装入所有相关的 Java 类。在此点调用静态方法 getNodeName,并且代理 getNodeName 方法中指定的节点名注册输入节点。如果您没有指定节点名,则代理会根据包含的包为节点自动创建名称。
在此使用静态方法表示可以在实例化节点本身前通过代理调用方法。
当代理部署包含用户定义的输入节点的消息流时,例示 Java 用户定义的输入节点。实例化节点时,将调用输入节点的类的构造函数。
实例化节点时,会创建任何已指定的终端。消息处理节点可以具有与其相关的任何个数的输入和输出终端。为了声明这些终端,您必须在您的节点构造函数中包含 createInputTerminal 和 createOutputTerminal 方法。
如果您要处理传递回输入节点的异常,则应该使用 createOutputTerminal 为输入节点创建 catch 终端。当输入节点捕获错 误时,catch 终端将用常规 MQInput 节点所用的相同方法处理它。您可以允许大多数异常,例如,由部署问题引起的、要传回到代理的异常,代理将警告可能有任何配置错误的用户。
作为最小值,您的构造函数类仅需要在输入节点上创建这些输出终端。然而,如果您需要初始化属性值(例如,定义将初始解析从输入节点传递的消息 ),则您还应该在输入节点的这一点包括该代码。
当代理调用 run 方法时,开始处理输入节点的消息。运行方法创建输入消息,并且应该包含输入节点的处理函数。
run 方法定义在 MbInputNodeInterface 中,它是在用户定义的输入 节点(将其定义为输入节点)中使用的接口。您必须在节点中包含运行方法。如果在用户定义的输入节点中不包含 run 方法,则不会编译节点源代码。
当包含用户定义的输入节点的消息流部署成功时,代理调用节点的运行实现方法并在等待消息处理时,继续调用此方法。
当消息流启动时,由代理分派单个线程,并且调用到输入节点的 run 方法中。 如果调用了 dispatchThread() 方法,则在同一个 run 方法中还可以创建更多线程。 这些新线程立即调入到输入节点的 run 方法中,并且可以与原始线程作相同的处理。可以创建的新线程数由 additionalInstances 属性定义。 建议的模型是用来确保在消息创建后、传播前分派线程。这确保此时只有一 个线程在等待新消息。
用户定义的输入节点可以选择不同的线程技术模型,并且负责实现所选模型。如果输入节点支持 additionalInstances 属性,并且调用了 dispatchThread(),则代码必须是完全重新输入的,并且节点调用的任何函数也应该是重新输入的。如果输入节点强制单线程处理方式,则不调用 dispatchThread(),应该向用户说明设置 additionalInstances 属性的节点对输入节点是没有作用的。
有关用户定义的输入节点的线程技术模型的更多信息,请参阅线程技术。