Zum Inhalt springen

Maschine-Maschine-Kommunikation via http? (C#, .NET)


Bioernus

Empfohlene Beiträge

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!

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 :)

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

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. 

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 8 Monate später...

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.

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...