Ein Nachrichtenverarbeitungsknoten wird zur Verarbeitung einer Nachricht und ein Sendeknoten zur Erstellung einer Nachricht als Bitstrom verwendet.
Im Hinblick auf die Codierung eines Nachrichtenverarbeitungsknotens und eines Sendeknotens lässt sich feststellen, dass die Knoten im Wesentlichen dieselben Services bereitstellen. Sie können an einem Sendeknoten Nachrichten verarbeiten und ebenso können Sie mit einem Nachrichtenverarbeitungsknoten eine Nachricht als Bitstrom senden. Um den Abschnitt überschaubar zu halten, wird hier vorrangig auf den Knoten als Nachrichtenverarbeitungsknoten eingegangen; Sie finden hier aber auch Informationen zu den Funktionen beider Knotentypen.
Eine ladbare Implementierungsbibliothek (LIL) ist das Implementierungsmodul für einen C-Knoten. Eine LIL wird als gemeinsam genutzte Bibliothek oder als Dynamic Link Library (DLL) implementiert, hat jedoch die Dateierweiterung .lil, nicht .dll.
Weitere Informationen zu den C-Knoten-Implementierungsfunktionen, die Sie für den Knoten schreiben, erhalten Sie im Abschnitt Implementierungsfunktionen für C-Knoten. Sie können die im Laufzeitbroker implementierten Dienstprogrammfunktionen des C-Knotens zur Unterstützung der Knotenoperation aufrufen (siehe Dienstprogrammfunktionen für C-Knoten).
Informationen zu Beispielen können nur bei Verwendung des in das WebSphere Message Broker Toolkit integrierten bzw. online verfügbaren Information Center angezeigt werden. Muster können nur ausgeführt werden, wenn das im WebSphere Message Broker Toolkit integrierte Information Center verwendet wird.
Sie müssen zum Deklarieren und Definieren eines benutzerdefinierten Knotens für den Broker eine Initialisierungsfunktion, bipGetMessageflowNodeFactory, in Ihrer LIL einfügen. Die folgenden Schritte werden im Konfigurations-Thread ausgeführt und legen fest, wie die Initialisierungsfunktion vom Broker aufgerufen wird und wie durch diese Funktion der benutzerdefinierte Knoten deklariert und definiert wird:
So instanziieren Sie Ihren Knoten:
Attribute werden festgelegt, wenn Sie den Broker starten oder einen Nachrichtenfluss mit neuen Werten erneut einsetzen. Die Attribute werden von dem Broker festgelegt, der den Benutzercode im Konfigurations-Thread aufruft. Der Benutzercode muss diese Attribute zur späteren Verwendung bei der Verarbeitung von Nachrichten im Knotenkontextbereich speichern.
{
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) ;
}
Wenn der Broker eine Nachricht aus der Warteschlange empfängt und diese Nachricht den Eingabeterminal Ihres benutzerdefinierten Nachrichtenverarbeitungs- oder Sendeknoten erreicht, wird vom Broker die Implementierungsfunktion cniEvaluate aufgerufen. Diese Funktion wird im Nachrichtenverarbeitungs-Thread aufgerufen und muss entscheiden, welche Maßnahmen für die Nachricht ergriffen werden. Möglicherweise wird diese Funktion in mehreren Threads aufgerufen, besonders bei Verwendung von zusätzlichen Instanzen.
Wird ein Knoten gelöscht, ruft der Broker die Funktion cniDeleteNodeContext auf. Diese Funktion wird im gleichen Thread gestartet wie cniCreateNodeContext. Von dieser Funktion müssen alle Ressourcen freigegeben werden, die von Ihrem benutzerdefinierter Knoten verwendet werden. Beispiel:
void _deleteNodeContext(
CciContext* context
){
static char* functionName = (char *)"_deleteNodeContext()";
free ((void*) context);
return;
}