本文最后更新于:June 30, 2023 pm
本文作者:[wangwenhai] # 概要:本文主要讲EMQX和Java直连的过程。
1.背景概述
ErlangVm要求我们用Erlang编写代码,但是有时候我们可能对Erlang不熟悉或者是Erlang驱动太少,别担心,Erlang提供了一种接口技术,可以实现用Java来伪装成一个Erlang节点,从而实现ErlangVm的扩展。
The Jinterface package provides a set of tools for communication with Erlang processes. It can also be used for communication with other Java processes using the same package, as well as C processes using the Erl_Interface library.
2.基本概念
关于Java就不多讲了,我们说一下类型映射。Erlang的数据类型和Java是一一对应起来的,如下表所示:
我们熟悉Java以后很容易可以利用这些基本数据类型和ErlangVm通信。
3.代码案例
下面展示一个很基础的Demo:
// 省略部分代码
// 创建一个节点,名字为node1
OtpNode self = new OtpNode("node1");
// 模拟Erlang创建一个进程 name是process1
OtpMbox mbox = self.createMbox("process1");
OtpErlangObject o;
OtpErlangTuple msg;
OtpErlangPid from;
// 用一个循环来实现消息接受,这里有点像Socket通信
while (true) {
try {
// 注意 这个方法是个阻塞方法,会一直卡在这里 直到消息到达
o = mbox.receive();
if (o instanceof OtpErlangTuple) {
msg = (OtpErlangTuple)o;
from = (OtpErlangPid)(msg.elementAt(0));
mbox.send(from,msg.elementAt(1));
}
catch (Exception e) {
System.out.println("" + e);
}
}
// 省略部分代码
用java来实现一些计算型强的业务是一种很好的做法。
4.注意事项
因为Jinterface是用EPMD进行通信的,所以要把本机的EPMD打开,参考命令如下:
epmd -daemon
5.参考文档
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!