利用jinterface在java和erlang节点之间通讯
在分布式环境当中使用erlang语言来构建底层应用,利用erlang的简洁的脚本语言可以简化代码的复杂度,并且还能很大程度地提高系统的容错性和稳定性。
erlang固然有他的优势,但是,它在开源社区开发人员的活跃性远远不及java社区,在java社区中,在分布式场景中使用的中间件,比如,memecached 还有hadoop 的hsfs 等都能非常完美地解决分布式环境中的常见问题。
为了让erlang这个工具和java社区的众多开源框架相结合,让他们优势互补。可以在生产环境中让erlang来调用java写的中间件。
erlang开源社区提供了一个jinterface代码包,通过它可以让java和erlang之间进行通信。通过这个方式,在erlang节点端可以将 java构建的节点看成就是一个erlang节点,可以接收erlang传过来的消息,并且处理之后以异步的方式将处理结果反馈。
下面介绍一下具体如何实现:
首先需要依赖jinterface包,在maven pom.xml中添加jinterface的依赖:
<dependency> <groupId>org.erlang.otp</groupId> <artifactId>jinterface</artifactId> <version>1.5.3.2</version> </dependency>
写一个ReceiveMessage的类,专门来接收其他erlang节点发送过来的消息:
import com.ericsson.otp.erlang.OtpNode; import com.ericsson.otp.erlang.OtpMbox; public class ReceiveMessage { public static void main(String[] args) throws Exception { OtpNode node = new OtpNode("testt"); OtpMbox mbox = node.createMbox(); mbox.registerName("java"); System.out.println("start to listen....."); while (true) { System.out.println(mbox.receive());// 这里和Socket编程一样也是阻塞式的 } } }
接下来需要启动本机erlang node,注意,必须先启动这个erlang节点,不然的话,如果先执行ReceiveMessage类的main函数系统会抛出异常,原因是所有erlang节点之间的通讯都要依赖一个底层的EMPD的服务,这个模块的主要功能是提供通过相互通过name来识别机器的机制(这个机制在分布式环境中非常重要,一般一个服务要向另外一个服务发送数据,系统为了稳定性,往往会通过一个名称服务中间件,将name所对应的ip地址取得,然后再利用这个ip地址常见connection连接)。
启动node:
D:\erlwork>erl -sname erlangside
然后再执行ReceiveMessage的main函数。 java 节点开始等待接收消息
在erlnag的控制台上写一个 节点发送消息的脚本:
(erlangside@aliyun-18097n)3> {java,'testt@aliyun-18097n'}!{self(),"baisui"}. {<0.36.0>,"baisui"}
java端就会接受到其发送过来的消息:
start to listen..... {#Pid<erlangside@aliyun-18097n.36.0>,"baisui"}
阅读更多
- 利用jinterface在java和erlang节点之间通讯
- 利用Socket来实现Erlang与C#之间的通讯
- 利用OTP.NET框架来实现C#与Erlang Node之间的通讯
- erlang与java构建的节点通讯
- java线程之间通讯
- java利用反射完成不同类之间相同属性的复制
- java TCP客户端与服务端之间的通讯
- 利用Java实现串口全双工通讯
- 利用java读取xml节点数据
- Java利用反射实现对象之间相同属性复制
- Java和一些windows编程语言如c、c++、delphi所写的网络程序进行通讯时,需要进行高、低字节之间的转换
- java实现树的节点之间距离;向下递归,注意找到一个满足条件的节点要break
- 系统之间通讯方式之(Java阻塞同步模式和非阻塞同步模式详解)(三)
- 利用xstream进行java对象和xml之间的互相转化
- 利用java框架实现java和.net之间的传值
- 利用java读取xml节点数据
- 网络-两远程客户端之间的通讯原理-Java基础-Java-编程开发
- android与PC,C#与Java 利用protobuf 进行无障碍通讯【Socket】 推荐
- 求利用邻接矩阵求多有节点最短路径的java程序 可运行
- Spring MVC中利用注解实现XML和Java对象之间的转换