开始之前
WebSphere Message Broker 为称为 SwitchNode 和 TransformNode 的两个用户定义的样本节点提供了数据源。您可以使用当前状态下的这些节点,也可以修改这些节点。另外您还可以查看用户定义的扩展样本,该样本将展示如何使用包括用 C 语言编写的消息处理节点在内的用户定义节点。
可装入实现库或 LIL 是 C 节点(或解析器)的实现模块。LIL 实现为动态链接库(DLL)。它的文件扩展名为 .lil,而不是 .dll。
必须由开发者写的实施函数在C 节点实施函数中列出。WebSphere Message Broker 提供的用于帮助此过程的实用程序函数在C 节点实用程序函数中列出。
WebSphere Message Broker 为称为 SwitchNode 和 TransformNode 的两个用户定义的样本节点提供了数据源。您可以使用当前状态下的这些节点,也可以修改这些节点。您还可以使用用户定义的扩展样本样本。
在概念上,消息处理节点用于按相同方法处理消息,输出节点用于将消息输出为位流。但是,当您编码消息处理节点或输出节点时,它们本质上是相同的东西。您可以在输出节点中执行消息处理,同样您可以使用消息处理节点将消息输出到位流。为简便起见,本主题在提到节点时大都指的是消息处理节点,不过本主题依然会讲述这两类节点的功能。
要向代理声明定义用户定义的节点,必须将初始化函数 bipGetMessageflowNodeFactory 包含进您的 LIL。以下步骤在配置线程上进行,它们概括了代理如何调用您的初始化函数,以及该初始化函数如何声明和定义用户定义的节点:
每当您启动代理时或当您使用新的值重新部署消息流时,将设置属性。代理通过在配置线程上调用用户代码来设置属性。用户代码需要将这些属性存储在其节点上下文区域中,以便在以后处理消息时使用。
{ const CciChar* ucsAttr = CciString("nodeTraceSetting", BIP_DEF_COMP_CCSID) ; insAttrTblEntry(p, (CciChar*)ucsAttr, CNI_TYPE_INTEGER); _setAttribute(p, (CciChar*)ucsAttr, (CciChar*)constZero); free((void *)ucsAttr) ; } { const CciChar* ucsAttr = CciString("nodeTraceOutfile", BIP_DEF_COMP_CCSID) ; insAttrTblEntry(p, (CciChar*)ucsAttr, CNI_TYPE_STRING); _setAttribute(p, (CciChar*)ucsAttr, (CciChar*)constSwitchTraceLocation); free((void *)ucsAttr) ; }
当代理从队列检索消息并且该消息到达用户定义的消息处理或输出节点的输入终端时,代理调用实施函数 cniEvaluate。此函数在消息处理线程上调用,它将决定如何处理该信息。此函数可在多线程上调用,尤其是在另有附加实例在使用的情况下。