利用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"}
 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值