Hai semuanya!
Ketika Anda harus berkomunikasi dari dunia Erlang / Elixir dengan Java dan sebaliknya - tidak ada begitu banyak pilihan. Sebuah jinterface yang ditinggalkan untuk semua orang dan perpustakaan encon baru, contoh dasar yang disajikan di bawah kucing.
Tambahkan Dependensi
Tambahkan ketergantungan Encon
ke aplikasi JVM
:
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' }
CATATAN: jika ada kebutuhan seperti itu (misalnya, proyek pada Ant
), maka dependensi dalam bentuk file jar dapat ditemukan di GitHub, di bagian rilis .
Luncurkan Erlang Nodes
import io.appulse.encon.Node; import io.appulse.encon.Nodes; import io.appulse.encon.config.NodeConfig;
CATATAN: agar contoh di atas berfungsi, Anda harus menjalankan daemon EPMD
atau implementasi Java -nya.
Membuat Kotak Surat
Kotak surat, alias proses, dalam terminologi Erlang:
import io.appulse.encon.mailbox.Mailbox; Mailbox mailbox = node.mailbox() .name("popa")
Koneksi ke node
CATATAN: Anda dapat memulai koneksi dari Erlang / Elixir atau Java dengan secara otomatis mengirim pesan menggunakan format {, }
Node {, }
atau dengan PID (jika ada).
Anda dapat memulai komunikasi antar node dengan mengirim pesan ping dari Erlang melalui net_adm:ping/1
:
(erlang@localhost)1> net_adm:ping('java@localhost'). pong (erlang@localhost)2>
Dimungkinkan juga untuk mengirim pesan ke {Name, Node}
, di mana Node
adalah atom dari bentuk 'java@localhost'
, dan Name
adalah PID atau nama kotak surat terdaftar yang ada di sisi Java.
(erlang@localhost)1> {my_process, 'java@localhost'} ! hello. hello (erlang@localhost)2>
Jika kotak surat ada di sisi Java, maka itu akan menerima pesan.
Mengirim pesan dari Jawa
Mailbox
seluruh keluarga metode pengiriman yang mengirimkan:
- send ( ErlangPid , ErlangTerm ) - mengirim pesan ke PID jarak jauh atau lokal;
- send ( String , ErlangTerm ) - mengirim istilah ke kotak surat lokal dengan nama simpul yang sama;
- send ( String , String , ErlangTerm ) - mengirim pesan ke node lokal / jauh dan kotak surat dengan namanya.
Mari kita coba, buka Erlang-shell dan daftarkan dengan nama ... 'shell'
:
(erlang@localhost)1> erlang:register(shell, self()). true (erlang@localhost)2>
Sekarang, kita dapat mengirim pesan dari Java (komunikasi dengan node akan dibuat secara otomatis):
import static io.appulse.encon.terms.Erlang.atom; mailbox.send("erlang@localhost", "shell", atom("hello"));
Kami kembali ke Erlang dan membaca pesan yang diterima:
(erlang@localhost) 1> flush(). Shell got hello ok (erlang@localhost) 2>
Menerima Pesan di Jawa
Untuk menerima pesan masuk, Anda harus menggunakan salah satu metode Mailbox
: receive(timeout, timeUnit)
receive()
atau receive(timeout, timeUnit)
, yang dapat tanpa henti menunggu pesan baru atau jumlah waktu yang tetap.
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()); } }
Mulai simpul Erlang dan kirim pesan:
$> erl -sname erlang@localhost ... (erlang@localhost)1> {my_process, 'java@localhost'} ! hello.
Kesimpulan
Ini dan banyak contoh lainnya dapat dipelajari di situs web proyek dan / atau di halaman GitHub .