Java 已知的RPC协议用于将JMS放在ontop上

Java 已知的RPC协议用于将JMS放在ontop上,java,jms,protocols,rpc,thrift,Java,Jms,Protocols,Rpc,Thrift,我正在开发一个分布式系统,它由通过JMS(ActiveMQ)松散(异步)耦合的不同组件(服务)组成 因此,我不想重新发明轮子,我正在寻找一个(众所周知的)协议/库,它可以促进这些组件之间的远程过程调用,并帮助我处理方法接口 因此,让我们通过肮脏的解决方案来分解我现在已经在解决的问题: 消费者组件希望调用服务,因此它构造了一个请求字符串(手写和脏的) 然后将请求字符串压缩并放入JMS消息中(也是脏的) 请求消息通过JMS和路由机制传输(这部分还可以) 服务首先需要解压缩和解析请求字符串,以确定正确

我正在开发一个分布式系统,它由通过JMS(ActiveMQ)松散(异步)耦合的不同组件(服务)组成

因此,我不想重新发明轮子,我正在寻找一个(众所周知的)协议/库,它可以促进这些组件之间的远程过程调用,并帮助我处理方法接口

因此,让我们通过肮脏的解决方案来分解我现在已经在解决的问题:

  • 消费者组件希望调用服务,因此它构造了一个请求字符串(手写和脏的)
  • 然后将请求字符串压缩并放入JMS消息中(也是脏的)
  • 请求消息通过JMS和路由机制传输(这部分还可以)
  • 服务首先需要解压缩和解析请求字符串,以确定正确的方法(脏)
  • 该方法被调用,其响应类似于#2-#4
  • 所以这看起来很像SOAP,而我认为SOAP对于我的应用程序来说太重了,而且我根本不使用HTTP。考虑到这一点,我认为可以将问题分解为不同的部分

  • 第A部分:HTTP被JMS取代(这一个没问题)
  • 第二部分:XML被一些更轻量级的东西所取代(好的,在这里很方便)
  • C部分:解析请求/应答字符串以识别操作名称和参数值的机制(这是真正的问题)
  • 我一直在研究,等等,但我不喜欢他们介绍自己处理实际(TCP)通信的方式。绕过我已经很复杂的JMS基础设施(它也处理负载平衡等)

    为了进一步阐述上面的C部分,我现在是这样处理的:好吧,我知道如果消费者调用服务,我会做如下操作,让我们假设服务接收文本并回复关键字。我将让使用者创建一条JMS消息,并将其(通过ActiveMQ)传输到服务。该信息将包括:

     Syntax: OPERATION_NAME [PARAMETERS]
     Method: GET_ALL_KEYWORDS [String text] returns [JSON String[] keywords]
    
     Example Request: GET_ALL_KEYWORDS "Hello world, this is my input text..."
     Example Reply: ["hello", "world", "text"]
    
    不用说,这感觉就像是被砍成了一块。我看到的问题是,如果要通过添加或删除参数来更改方法接口,我必须检查所有请求/回复字符串构造/解构以同步更改。这很容易出错。我宁愿让库通过查看java接口并在运行时抛出真正的异常来构造正确的请求/应答语法,如果我把事情搞砸了,比如“协议异常:未设置强制参数”之类的

    是否有已知的项目/LIB

    要求将是

  • 它体积小、重量轻、速度快
  • 它是用JAVA实现的
  • 它没有太多的用途(比如一些成熟的框架)

  • 我想这个春季套餐正是你想要的。请参阅和相关类

    从javadoc:

    用于JMS调用程序代理的FactoryBean。公开的代理服务 使用指定的服务接口作为bean引用

    序列化远程调用对象并反序列化远程调用对象 调用结果对象。与RMI一样使用Java序列化,但是 使用JMS提供程序作为通信基础设施


    你的问题不清楚?您是否正在尝试将jms中的异步操作转换为同步java API?如果是这样,为什么要使用JMS?不,不需要异步/同步桥。一切都是异步的。我使用JMS进行所有服务到服务的通信。目前正在应用自写协议和自写数据序列化/反序列化。哪种看起来很难看。很好的提示,谢谢。我非常了解Spring在Web应用程序环境中的应用,我看到Spring的缺点是它带来了大量依赖项。在所描述的应用程序体系结构中,我希望使事物保持真正的纤细和微小。因此,我更愿意寻找一种轻量级的替代方案。我通过JMS使用SpringRemoting来精确地描述您描述的情况,并且它工作得非常好。如果您不想将Spring添加为依赖项,那么最好的选择可能是将其作为您自己实现的灵感。