Hallo zusammen!
Wenn Sie mit Java aus der Erlang / Elixir-Welt kommunizieren müssen und umgekehrt, gibt es nicht so viele Optionen. Ein verlassenes Jinterface für alle und eine neue Encon- Bibliothek, von der ein grundlegendes Beispiel unter der Katze präsentiert wird.
Abhängigkeiten hinzufügen
Fügen Encon
der JVM
Anwendung die Encon
Abhängigkeit hinzu:
Maven :
<dependencies> ... <dependency> <groupId>io.appulse.encon</groupId> <artifactId>encon</artifactId> <version>1.6.4</version> </dependency> ... </dependencies>
Gradle :
dependencies { compile 'io.appulse.encon:encon:1.6.4' }
HINWEIS: Wenn ein solcher Bedarf besteht (z. B. ein Projekt auf Ant
), finden Sie Abhängigkeiten in Form von JAR- Dateien auf GitHub im Abschnitt " Releases ".
Starten Sie Erlang Nodes
import io.appulse.encon.Node; import io.appulse.encon.Nodes; import io.appulse.encon.config.NodeConfig;
HINWEIS: Damit das obige Beispiel funktioniert, müssen Sie entweder den EPMD
Dämon oder dessen Java-Implementierung ausführen.
Postfächer erstellen
Mailbox, auch bekannt als Prozess, in der Erlang-Terminalologie:
import io.appulse.encon.mailbox.Mailbox; Mailbox mailbox = node.mailbox() .name("popa")
Verbindung zu Knoten
HINWEIS: Sie können eine Verbindung über Erlang / Elixir oder Java herstellen, indem Sie automatisch eine Nachricht im Format {, }
Knoten {, }
oder per PID (falls vorhanden) senden.
Sie können die Kommunikation zwischen Knoten starten, indem Sie eine Ping-Nachricht von Erlang über net_adm:ping/1
:
(erlang@localhost)1> net_adm:ping('java@localhost'). pong (erlang@localhost)2>
Es ist auch möglich, eine Nachricht an {Name, Node}
zu senden, wobei Node
ein Atom der Form 'java@localhost'
ist und Name
die PID oder der registrierte Postfachname ist, der auf der Java-Seite vorhanden ist.
(erlang@localhost)1> {my_process, 'java@localhost'} ! hello. hello (erlang@localhost)2>
Wenn das Postfach auf der Java-Seite vorhanden ist, erhält es eine Nachricht.
Senden einer Nachricht von Java
Mailbox
ganze Familie von send
, die Folgendes liefern:
- send ( ErlangPid , ErlangTerm ) - sendet eine Nachricht an eine entfernte oder lokale PID ;
- send ( String , ErlangTerm ) - sendet den Begriff mit dem Namen desselben Knotens an das lokale Postfach.
- send ( String , String , ErlangTerm ) - sendet eine Nachricht mit ihrem Namen an einen entfernten / lokalen Knoten und ein Postfach.
Probieren wir es aus, öffnen Sie die Erlang-Shell und registrieren Sie sie mit dem Namen ... 'shell'
:
(erlang@localhost)1> erlang:register(shell, self()). true (erlang@localhost)2>
Jetzt können wir eine Nachricht von Java senden (die Kommunikation mit dem Knoten wird automatisch hergestellt):
import static io.appulse.encon.terms.Erlang.atom; mailbox.send("erlang@localhost", "shell", atom("hello"));
Wir kehren nach Erlang zurück und lesen die empfangene Nachricht:
(erlang@localhost) 1> flush(). Shell got hello ok (erlang@localhost) 2>
Empfangen von Nachrichten in Java
Um eine eingehende Nachricht zu empfangen, müssen Sie eine der Mailbox
Methoden verwenden: receive()
oder receive(timeout, timeUnit)
, die endlos auf eine neue Nachricht oder eine festgelegte Zeit warten können.
import io.appulse.encon.Node; import io.appulse.encon.Nodes; import io.appulse.encon.config.NodeConfig; import io.appulse.encon.connection.regular.Message; import io.appulse.encon.mailbox.Mailbox; public class Main { public static void main (String[] args) { NodeConfig config = NodeConfig.builder() .shortName(true) .build(); Node node = Nodes.singleNode("java@localhost", config); Mailbox mailbox = node.mailbox() .name("my_process") .build(); Message message = mailbox.receive(); System.out.println("Incoming message: " + message.getBody().asText()); } }
Starten Sie den Erlang-Knoten und senden Sie eine Nachricht:
$> erl -sname erlang@localhost ... (erlang@localhost)1> {my_process, 'java@localhost'} ! hello.
Fazit
Diese und viele andere Beispiele können auf der Projektwebsite und / oder auf der GitHub-Seite untersucht werden .