Frage

Ich bin neu in beiden Web Services und RMI und ich frage mich, was der bessere Weg ist Remote zwischen verschiedenen Web-Anwendungen zu tun, wenn diese Anwendungen alle in Java geschrieben sind, das ist, wenn verschiedene Programmiersprachen keine Rolle spielen (was hätte den Vorteil, WS sein).

Während auf der einen Seite würde ich denke, dass es eine Performance-Overhead ist, wenn Web-Services (jemand ein paar Zahlen hat das beweisen?), Auf der anderen Seite scheint es mir, dass Web-Services wesentlich sind lose gekoppelt und können verwendet wird, um eine serviceorientierte Architektur (SOA) (die mit RMI nicht möglich ist, nicht wahr?) zu implementieren.

Das ist zwar eine ganz allgemeine Frage, was ist Ihre Meinung?

Danke

War es hilfreich?

Lösung

Die Web-Services eine lose gekoppelte Architektur erlauben. Mit RMI, müssen Sie sicherstellen, dass die Klassendefinitionen synchron in allen Anwendungsinstanzen bleiben, was bedeutet, dass Sie immer alle von ihnen zur gleichen Zeit einsetzen müssen, auch wenn nur einer von ihnen geändert wird (nicht unbedingt, aber es ist sehr oft erforderlich, weil der seriellen UUIDs und so weiter)

Auch ist es nicht sehr skalierbar, was ein Problem sein könnte, wenn Sie Loadbalancer haben wollen.

In meinem Kopf arbeitet RMI am besten für kleinere, lokale Anwendungen, die nicht internetbezogenen, sondern müssen noch entkoppelt werden. Ich habe es verwendet, um eine Java-Anwendung, die die elektronische Kommunikation behandelt und ich war ziemlich zufrieden mit den Ergebnissen. Für andere Anwendungen, die komplexere Bereitstellung und Arbeit über das Internet benötigen, ich eher Web-Dienste nutzen.

Andere Tipps

Ob Sie Web-Services oder eine „native“ Ansatz verwenden die Umwelt hängt von als gut. Wenn Sie über einen Proxy oder einen Unternehmens-Firewall passieren müssen (s), sind Web Service eher zu arbeiten, da sie nur auf HTTP setzen. RMI erfordert, dass Sie einen anderen Port für Ihre Anwendung zu öffnen, die schwierig sein kann (nicht technisch, obwohl) in einigen Umgebungen ...

Wenn Sie wissen, dass dieses Problem kein Problem ist, sollten Sie mit RMI betrachten. SOA hängt nicht von Technologie so viel wie auf guten Service Design. Wenn Sie ein EJB-Container haben, können Sie Session Beans über RMI anrufen und zusätzlich setzen sie als Web-Services, wenn Sie wirklich brauchen, nebenbei gesagt.

Die Leistung ist abhängig von den Daten, die Sie zum Austausch planen. Wenn Sie komplexe Objektnetze von einer Anwendung zur anderen senden, ist es wahrscheinlich schneller mit RMI, da es in einem binären Format (in der Regel) übertragen wird. Wenn Sie irgendeine Art von textuellen / XML-Inhalte sowieso, Web Services gleichwertig sind oder sogar schneller, da dann würden Sie nicht überhaupt etwas zu konvertieren (für Kommunikation).

HTH,
Martin

Eine Sache, die WS über RMI begünstigt ist, dass WS arbeitet über HTTP-Port 80/443, die normalerweise nicht bei Firewalls blockiert, kann sich hinter NAT arbeiten usw. RMI hat ein viel komplexes zugrunde liegendes Netzwerkprotokoll, das Sie erfordert RMI-Ports zu öffnen, und auch möglicherweise nicht, wenn der Kunde natted ist. Zweitens mit RMI beschränken Sie Ihre slef auf JAVA-JAVA-Kommunikation, während mit Webservies es keine solche Beschränkung ist. Es ist viel einfacher Webservices über den Draht zu debuggen, da die Daten SOAP / HTTP ist, die leicht über Sniffing-Tools für die Fehlersuche erfasst werden können. Ich weiß nicht, von einem einfachen Weg, dies über RMI zu tun. Neben RMI ist wirklich sehr alt und hat nicht viel Aufmerksamkeit für letzten Jahren erhalten haben. Es war in den Tagen groß zurück, als CORBA war groß, und beide RMI CORBA sind wirklich veraltete Technologien. Die beste Möglichkeit ist REST-Stil Webservices.

Meine Erfahrung mit RMI und Web Services spiegelt Ihre Vermutungen über. Im Allgemeinen RMI die Leistung übersteigt bei weitem Web-Service, aber die Schnittstellen-Spezifikation ist explizit für Web Service angegeben.

Beachten Sie, dass keines dieser Protokolle erfordert , dass die Anwendungen auf beiden Seiten Java sein. Ich würde dazu neigen, Web Services zu verwenden, wenn ich einen hätte oder mehrere externe Partner, die die Schnittstelle wurden umgesetzt, sondern RMI, wenn ich die Kontrolle über den beiden Enden der Verbindung war.

RMI kann die bessere Richtung sein, wenn Sie komplexen Zustand zu halten brauchen.

@ Martin Klinke

"Die Leistung ist abhängig von den Daten, die Sie zum Austausch planen. Wenn Sie komplexe Objektnetze von einer Anwendung zur anderen senden möchten, ist es wahrscheinlich mit RMI schneller, da es in einem binären Format (in der Regel) übertragen wird. Wenn Sie haben eine Art von textuellen / XML-Inhalte wie auch immer, Web-Services gleichwertig sind oder sogar schneller, da dann würden Sie gar nichts konvertieren müssen (für Kommunikation). "

Soweit ich das Leistungsproblem wissen macht Unterschied bei der Serialisierung-Deserialisierung mit anderen Worten Rangier-demarshalling process.I ist nicht sicher, diese beiden Begriffe sind gleiche btw In verteilten Programmierung, rede ich nicht über den Prozess, der in der gleichen JVM geschieht, ist es darüber, wie Sie kopieren data.It entweder als Wert übergeben oder durch reference.Binary Format passieren entspricht nach Wert zu übergeben, das bedeutet, das Kopieren eines Objekts Fern Server in binaries.If Sie irgendwelche Zweifel haben, bis jetzt habe ich d mögen

hören

Was ist der Unterschied zwischen im binären Format zu senden und Text / xml Inhalt in Bezug auf der Rangier-demarshalling oder Serialisierung-Deserialisierung?

Ich bin gerade guessin.It hängt nicht davon ab, welche Art von Daten, die Sie send.Whatever Datentyp senden Sie es wird Teil des Rangier-demarshalling Prozess und am Ende wird in Binär-Dateien gesendet werden, nicht wahr?

prost Hakki

Was über Spring Remoting. Es kombiniert REST-wie HTTP-Protokoll mit Binärformat von RMI. Funktioniert perfekt für mich.

Als Frühling Frömmler und ein Exponent von SOA seit vielen Jahren würde ich Frühling Remoting beraten. Dieser Geschmack von Service Exporteur den Trick für RMI tun.

org.springframework.remoting.rmi.RmiServiceExporter

Weitere Transporte sind selbstverständlich vorhanden. Die Serialisierung Sache ist recht überschaubar, wenn Sie Version Ihre Schnittstellen (Endpunkte) und DTOs vernünftig und richtig Serialisierung UUIDs verwalten. Wir postfix ‚Alpha‘, ‚Bravo‘ an unsere Schnittstellen und Objekte und Erhöhung, Senkung und neu zu erfinden, wo und wann erforderlich. Wir reparieren auch unsere Serialisierung UUIDs zu 1 und sicherzustellen, Änderungen nur addative sind, sonst bewegen wir uns aus sagen: ‚Bravo‘ zu ‚Charlie‘. Alle managable in einem Enterprise-Setup.

Für das Frühjahr Remoting (Ich vermutete, meinen Sie HTTP Invoker), sollten beide Seiten Frühling verwenden, wenn es der Fall ist, kann es diskutiert werden.

Für eine Java Java-Anwendung RMI ist ein guter solutionö, JAX-RPC oder JAX-WS für Java-to-Java-Kommunikation sollte vermieden werden, wenn die Kunden nicht unter Kontrolle sind oder vielleicht auf eine andere Plattform bewegen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top