-
 Zitat von dschroeder
Ich habe auch gelesen, dass Redis als Cache Unterstützung verwendet werden kann. Bei uns haben wir aber einen anderen Einsatzzweck: Wir nutzen Redis als Message System für Events. Wenn z.B. in einer (nicht auf der i laufenden) Java Anwendung ein neuer Datensatz angelegt wird, sendet die Java Anwendung per Redis ein entsprechendes Ereignis. Jede andere Anwendung, die sich auf genau dieses Ereignis abonniert hat, weiß dann, das es neue Daten gibt und dass diese (per Webservice) vom anderen System geholt werden können.
Das heißt, Geschwindigkeit ist gar nicht so entscheidend in unserem Fall.
In diesem Fall sieht es so aus, dass es einen fertigen Node.js Client gibt https://www.npmjs.com/package/redis der das Event abonniert. Diese Events schreibt man dann in eine DTAQ oder in eine DB2 Tabelle mit Trigger für die weitere Verarbeitung. Auf https://github.com/RainerRoss/Send-S...taFromQueue.js hab ich ein Beispiel für ein Programm das Daten aus einer DTAQ liest, um zu zeigen, dass es nicht sehr kompliziert ist. Wir können auch über das Thema telefonieren.
-
Hallo Rainer,
danke für deine Antwort. Du hast richtig erkannt, dass ich mich auf dem Redis für ein Event abonnieren möchte. Für die meisten gängigen Programmiersprachen (Java, Node.js, ...) gibt es dafür bereits fertige Clients. Ich würde das aber gerne direkt im RPG machen. Du kennst ja den Node.js Code. Bist du der Meinung, dass man das Abonnieren auch im RPG nachbauen kann? Das Schreiben eines Events haben wir ja bereits vor Jahren in RPG gebaut. Ich fürchte, dass das Abonnieren aber komplizierter ist, oder?
Hier mal unser Schreibprogramm für Redis. ist nicht sehr lang, finde ich. Wenn man so etwas für's Lesen hinbekäme, wäre ich am Ziel. Wenn nicht, werden wir es wahrscheinlich mit in RPG eingebettetem Java realisieren.
Code:
*============================================================================================* * Programm-Aufgabe Event an Redis Server schicken *
* Generierung 27.08.2013 *
* Programmierer HIN *
*============================================================================================*
D/COPY LIBHTTP/QRPGLESRC,socket_h
*
*=========================================================================
D translate PR ExtPgm('QDCXLATE')
D Length 5P 0 const
D Data 32766A options(*varsize)
D Table 10A const
*
*=========================================================================
D ecc_ip_addr S 10U 0
D ecc_socket S 10I 0
D ecc_connection S 10I 0
D ecc_sockaddr DS LIKEDS(sockaddr_in)
*
D ecc_cmd S 1000A
D ecc_len S 10I 0
*
D ecc_temp S 100A
D ecc_response S 100A varying
*
D CRLF C x'0d25'
D KlammerAuf C x'c0'
D KlammerZu C x'd0'
*=========================================================================
* Main
*=========================================================================
C *ENTRY PLIST
C PARM P#SCode 3 Steuercode
C PARM host 100
C PARM port 5 0
C PARM topic 100
C PARM data 1000
C PARM response 5 0
C PARM errMsg 100
ecc_ip_addr = inet_addr(%trim(host));
if (ecc_ip_addr = INADDR_NONE);
p_hostent = gethostbyname(%trim(host));
if (p_hostent = *null);
errMsg = 'Host not found!';
else;
ecc_ip_addr = h_addr;
endif;
endif;
ecc_socket = socket(AF_INET:SOCK_STREAM:IPPROTO_IP);
if (ecc_socket = -1);
errMsg = 'Error has occurred during create socket';
endif;
ecc_sockaddr = *allx'00';
ecc_sockaddr.sin_family = AF_INET; // Type of address
ecc_sockaddr.sin_addr = ecc_ip_addr; // IP adress
ecc_sockaddr.sin_port = port; // port number
ecc_connection = connect(ecc_socket
:%addr(ecc_sockaddr)
:%size(ecc_sockaddr));
if (ecc_connection = -1);
errMsg = 'Error has occurred during connect';
endif;
ecc_cmd = '*3' + CRLF
+ '$7' + CRLF + 'PUBLISH' + CRLF
+ '$' + %char(%len(%trim(topic))) + CRLF + %trim(topic) + CRLF
+ '$' + %char(%len(%trim(data ))) + CRLF + %trim(data ) + CRLF;
callp translate(%len(%trimr(ecc_cmd)):ecc_cmd:'QTCPASC');
ecc_len = send(ecc_socket
:%addr(ecc_cmd)
:%len(%trimr(ecc_cmd))
: 0);
if (ecc_len < %len(%trimr(ecc_cmd)));
errMsg = 'Error during send.';
endif;
ecc_len = recv(ecc_socket:%addr(ecc_temp):%size(ecc_temp):0);
if (ecc_len = -1);
errMsg = 'Error during recv.';
else;
ecc_response = %subst(ecc_temp:1:ecc_len);
ecc_len = %len(ecc_response);
ecc_temp = ecc_response;
callp translate(ecc_len:ecc_temp:'QTCPEBC');
ecc_response = %subst(ecc_temp:2:ecc_len - 3);
response = %dec(ecc_response:5:0);
endif;
callp close(ecc_socket);
return;
-
 Zitat von dschroeder
Hallo Rainer,
danke für deine Antwort. Du hast richtig erkannt, dass ich mich auf dem Redis für ein Event abonnieren möchte. Für die meisten gängigen Programmiersprachen (Java, Node.js, ...) gibt es dafür bereits fertige Clients. Ich würde das aber gerne direkt im RPG machen. Du kennst ja den Node.js Code. Bist du der Meinung, dass man das Abonnieren auch im RPG nachbauen kann? Das Schreiben eines Events haben wir ja bereits vor Jahren in RPG gebaut. Ich fürchte, dass das Abonnieren aber komplizierter ist, oder?
Hier mal unser Schreibprogramm für Redis. ist nicht sehr lang, finde ich. Wenn man so etwas für's Lesen hinbekäme, wäre ich am Ziel. Wenn nicht, werden wir es wahrscheinlich mit in RPG eingebettetem Java realisieren.
Hallo Dieter,
die Kommunikation mit Redis geht auch bei Node.js über Sockets. Das müsste auch im RPG machbar sein. Das Abonnieren eines Events sollte auch nicht komplizierter sein. Das RPG-Programm ist eine gute Basis dafür.
In Node.js geht, dass es im Programm asynchrone Funktionen gibt, die auf die abonnierten Events lauschen. Da bin ich mir nicht sicher, ob man es mit RPG nachbauen kann.
-
ich habe gerade gesehen, dass redis auch über das "Open Source Package Management" auf der IBM i zur Verfügung steht. Im Moment habe ich gerade leider keine Zeit es auszuprobieren, aber ich finde es sehr interessant, es zu testen.
-
Das klingt erstmal interessant. Ich gucke mal, was es damit auf sich hat. Vielen Dank!
-
Heute habe ich redis über das "Open Source Package Management" auf meiner IBM i installiert und es läuft - siehe Screenshots

-
OK. Allerdings ist das nicht mein Problem, glaube ich. Unsere Java Kollegen betreiben schon lange einen Redis Server (nicht auf der IBM i). Den muss ich ansprechen!
Aber trotzdem Danke für deine Mühen!
-
Man könnte einen schlanken zwischenlayer auf dem redis Server installieren.
Z.b. ein nodejs Service entwickeln der einfach redis abonniert hat und beim Event reagiert und einen Webservice call auf der IBM i macht. Ggf können dabei direkt alle wichtigen Daten zur IBM i übergeben werden, sodass keine weitere Kommunikation notwendig wird.
Laut Google kann man den noch redis Server mit einem wrapper modifizieren, dann sind auch Rest calls möglich.
Das wäre wahrscheinlich der sinnvollste weg.
Also redis Server registriert selber dass das bestimmte Ereignis eingetreten ist und übergibt die Daten via Webservice call an die ibm i.
-
Hallo xenofob,
danke für deine Idee. Eigentlich bin ich noch auf der Suche nach eine nativen RPG-Lösung. (Kann auch embedded SQL sein.)
Similar Threads
-
By RPG_KL in forum IBM i Hauptforum
Antworten: 5
Letzter Beitrag: 30-07-20, 19:04
-
By berg01796 in forum IBM i Hauptforum
Antworten: 10
Letzter Beitrag: 15-11-16, 11:55
-
By Der Gute in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 01-07-02, 11:11
-
By Bärnd in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 29-05-02, 15:58
-
By Andreas Herzfeldt in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 02-07-01, 06:51
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks