`
mozhenghua
  • 浏览: 324520 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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

    jinterface是一款用于在Java和Erlang之间建立通信桥梁的应用程序包。它不仅支持Java与Erlang进程之间的交互,还允许与其他使用相同包的Java进程以及通过Erl_Interface库的C进程进行通信。 #### 二、jinterface包 ...

    erlang调用java

    `Jinterface`允许`Erlang`进程和`Java`虚拟机(JVM)之间进行消息传递,实现跨语言的通信。 1. **设置环境**:在使用`Jinterface`之前,确保你的`Erlang`系统已经配置了对`Java`的支持。这通常意味着在`Erlang`的...

    Erlang-or-java.rar_erlang

    5. **Erlang分布协议**:虽然Java本身不支持Erlang的分布协议,但有一些库如Jinterface允许Java程序与Erlang节点进行交互。Jinterface提供了Erlang term到Java对象的转换,并支持Erlang的分布式特性。 压缩包中的...

    jinterface-sample:使用JInterface的示例Erlang应用程序

    7. **实例解析**:深入研究示例代码,了解JInterface的具体用法,如如何创建Erlang节点,如何发送和接收消息,以及如何调用Erlang函数。 通过学习和理解这个示例项目,开发者可以更好地掌握Erlang和Java混合开发的...

    Erlang otp_win64_21和22版本 exe

    - **Jinterface**:Erlang提供了一个名为Jinterface的库,用于与Java应用程序进行交互,允许两者之间的跨语言通信和协作。 - **混合系统**:Erlang OTP可以与Java平台结合,构建混合系统,利用两者的优点,例如...

    一个我自己学习Erlang的聊天室服务器及客户端代码

    总结,这个项目展示了如何利用Erlang强大的并发和分布式特性构建聊天室服务器,同时利用Java的广泛库和GUI支持创建用户友好的客户端。通过学习这个案例,开发者可以加深对Erlang并发编程和Java网络编程的理解,以及...

    erlang简介

    10. **平台移植性**:Erlang可以运行在多种操作系统上,包括Windows和各种*nix系统,并可通过C节点(ei)、Java接口(jinterface)与其他语言集成。 在开发、测试和部署方面,Erlang提供了一系列工具,如开发环境、...

    jiface:围绕Erlang的JInterface的Clojure惯用语言包装器

    Erlang OTP(开放电信平台)是一个强大的分布式计算框架,以其容错性和高并发性而闻名,而 `jinterface` 是 Erlang 提供的用于 Java 与 Erlang 之间通信的原生接口。 1. **Erlang 与 JVM 交互** Erlang 的 ...

    clojang:用于ErlangOTP通信的Clojure API(基于jiface构建)

    在标签中提到了“java”、“distributed-systems”、“clojure”、“erlang”、“otp”、“jvm”、“beam”、“lfe”、“jinterface”和“jiface”,这些关键词揭示了clojang所涉及的技术领域。其中,“lfe”(Lisp ...

    otp_win64_21.0.zip

    Erlang提供了一个名为Jinterface的库,它允许Erlang节点与Java虚拟机(JVM)上的Java应用进行通信。这种跨语言通信能力使得开发者能够利用两个不同生态系统的优点,例如Erlang的并发特性和Java的广泛库支持。 在...

    lfecljapp:使用OTP和监督树的示例LFEClojure多节点系统

    6. **多节点系统**:在LFEClojure中,可以构建跨多个计算节点的分布式系统,利用Erlang的分布式能力实现节点间的通信和协作。 7. **函数式编程**:Clojure是函数式的,这意味着程序主要由可组合的函数构成,减少了...

    hinterface:Haskell Erlang互操作性库

    Haskell端会创建一个中间层,将Haskell的数据结构转换为Erlang能理解的格式,然后通过Erlang节点发送消息。Erlang接收到消息后,执行相应的操作,再将结果以同样的方式返回给Haskell。 1. **数据转换**:Hinterface...

    lfecljapp:已移动-请使用lfex回购

    创建一个使用Erlang JInterface与LFE节点进行通信的Clojure项目, 在LFE中启动受监督的Clojure节点, 从LFE向Clojure节点发送消息,并 从LFE中的Clojure节点接收响应。 依存关系 房屋的LFE侧面 埃尔朗 lfetool + ...

Global site tag (gtag.js) - Google Analytics