Bioernus Geschrieben 14. Juli 2018 Teilen Geschrieben 14. Juli 2018 Hallo Leute, ich habe da zwei Systeme, die miteinander Daten austauschen sollen. Besser gesagt, sie tun es bereits, aber irgendwie suboptimal. Daher mache ich mir derzeit Gedanken über Optimierungsmöglichkeiten und Alternativen. Aktuell läuft das folgender Maßen ab: System A legt einen Datensatz als XML-Datei (nennen wir das Ding messageA) in einem Ordner ab. Die Datei wird über einen FTP verschickt und in einem anderen Ordner dem System B zum Einlesen zur Verfügung gestellt. In umgekehrter Richtung passiert das Gleiche, System B schickt eine messageB zu System A. (wobei messageB aber keine direkte Antwort auf messageA ist). Man muß vielleicht dazu sagen, dass System A ein externes System ist und der Datenaustausch zwar schon produktiv läuft, aber als Pilot in gedrosselter Form, sowohl in Bezug auf die Anzahl der zu verschickenden Nachrichten als auch in Bezug auf die Komplexität des dahintersteckenden Business Cases. Insgesamt sind die dahinterstehenden Businessprozesse neu und.... unausgereift. In absehbarer Zukunft werden vor Allem zeitkritische Nachrichten dazukommen. Ich bin irgendwann auf die idee gekommen, den Datenaustausch über FTP zu ersetzen durch einen http-basierten Datenaustausch. Das ist (zumindest in meinem konkreten Fall) schneller. Ich erhoffe mir mehr Transparenz der Kommunikation durch http-Statuscodes (und ggf auch durch eigene http-Header) und vielleicht auch, durch die Statuscodes die einen oder anderen auftretenden Probleme automatisiert und damit zeitnah lösen zu können. WebServices und sowas alles ist eigentlich überhauptnicht mein Arbeitsfeld, hab ich keine Ahnung von. Ich hab mich jetzt in die Materie etwas eingelesen und habe so eine Kommunikation entwerfen wollen: Server: System A Client: System B messageA hole ich mir von System A mittels GET messageB schicke ich mittels POST oder PUT zu System A Soweit ok, nur was ich total doof finde ist, dass ich den Server bei dieser Architektur mit GET-Requests zuspammen müsste, um zeitnah an meine messages A zu kommen. Ich bin auf drei möglich Lösungen gestoßen: für messageA müssen die Systeme die Rollen tauschen (ok, dafür muß aber auf beiden Seiten doppelt entwickelt werden) websockets ??? Damit könnte man wohl eine echte bidirectionale Kommunikation herstellen. Klingt kompliziert, ist es bestimmt auch. Server Sent Events ??? Hab ich mich noch nicht weiter eingelesen, klingt aber irgendwie vielversprechend. Meine Frage ist jetzt, wie man dieses Problem am sinnvollsten löst. Oder vielleicht weiss jemand, wie der Profi mit sowas umgeht, weil er/sie ein Profi ist :-) Bin für jeden Hinweis dankbar! Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Whiz-zarD Geschrieben 14. Juli 2018 Teilen Geschrieben 14. Juli 2018 Schaue dir mal RabbitMQ an. Das ist genau das, das du haben willst. Bioernus und JimTheLion reagierten darauf 1 1 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Gast Arvi Geschrieben 15. Juli 2018 Teilen Geschrieben 15. Juli 2018 Kann auch nur zu RabbitMQ raten. Das ist inzwischen ein Standard Problem dass du besser nicht mit einer Eigenentwicklung löst. RabbitMQ kann man auch sehr einfach clustern. Einfach dann noch einen Loadbalancer vorschalten und ab gehts Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Bioernus Geschrieben 15. Juli 2018 Autor Teilen Geschrieben 15. Juli 2018 Hallo und vielen Dank für den Tip. Ich habe mir das mal durchgelesen. Verstehe ich das richtig, übertragen auf mein Problem hiesse das, man hat irgendwo so eine RabbitMQ-Anwendung laufen. Die gibt den Server und meine Systeme A und B agieren als Clients? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Whiz-zarD Geschrieben 16. Juli 2018 Teilen Geschrieben 16. Juli 2018 Jop. Genau so. Deine beiden Systeme verbinden sich mit RabbitMQ und tauschen darüber ihre Nachrichten aus. System A schickt eine Nachricht an RabbitMQ und System B nimmt dann die Nachricht entgegen und umgekehrt. Der Vorteil ist nun, dass die Systeme nichts voneinander wissen müssen und die Anzahl der Systeme könnten nun auch unendlich sein. Kann sein, dass du noch ein weiteres System hat, was grundsätzlich alle Nachrichten empfangen soll, z.B. fürs Logging, fürs Monitoring oder für ein Event Store. Es gibt nun auch mehrere Lösungsansätze. Je nach dem, wie groß die vom System A erstellte Datensatz ist, kann mich sich nun überlegen, den Datensatz als Nachricht zu verschicken. Ich habe aber schon Systeme gesehen, die legen den Datensatz auf einem Dateisystem oder in eine Datenbank ab und schicken als Nachricht, dass eine neuer Datensatz vorhanden sei und wo er liegt, um somit den Netzwerktraffic gering zu halten. Für C# gibt es sogar noch EasyNetQ, was die Nutzung von RabbitMQ erleichtert. Bioernus reagierte darauf 1 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
DevCouch Geschrieben 11. April 2019 Teilen Geschrieben 11. April 2019 Einfach Protokol A durch B zu ersetzen bringt aus meiner Sicht erstmal nix, ich würde also nicht direkt mit Technologie werfen sondern erstmal fragen wieso beide Systeme sich gegenseitig Push-Messages senden. Das ist häufig ein Architekturproblem was zu Folgeproblemen führt. Was passiert denn wenn A Offline ist während B eine Message pusht? Wie macht man ein zentrales Monitoring von dem Prozess wenn beide Systemen senden können? * Ist es nicht ausreichend wenn nur System A der Akteur ist und B Informationen bereitstellt die B aktiv abrufen kann? * Muss der Prozess asynchron oder synchron funktionieren? * Was sendet B denn zurück? * Wie groß sind die Daten? Für 100 MB Xml-Files ist RabbitMQ nicht geeignet und auch sonst wäre der einzige Vorteil Transaktionallität auf der Datenübertragungsschicht - die du vielleicht gar nicht benötigst. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.