我正在开发一个由不同组件(服务)组成的分布式系统,这些组件(服务)通过 JMS(ActiveMQ)松散(异步)耦合。
因此我不想重新发明轮子,我正在寻找一个(众所周知的)协议/库来促进这些组件之间的远程过程调用并帮助我处理方法接口。
因此,让我们通过肮脏的解决方案分解我现在已经解决的问题:
- 消费者组件想要调用服务,因此它构造了一个请求字符串(手写和脏)
- 请求字符串被压缩并放入 JMS 消息中(也很脏)
- 请求消息通过 JMS 和路由机制传输(那部分没问题)
- 服务首先需要解压解析请求字符串,识别正确的方法(脏)
- 该方法被调用,回复类似于#2 - #4。
所以这看起来很像 SOAP,而我认为 SOAP 对我的应用程序来说太重了,而且我根本没有使用 HTTP。鉴于我在想一个人可能能够将问题解构为不同的组件。
- A 部分:HTTP 被 JMS 取代(那个没问题)
- B 部分:XML 被更轻量级的东西取代(好吧,MessagePack在这里派上用场)
- C部分:解析请求/回复字符串以识别操作名称和参数值的机制(这是真正的问题)
我正在研究MessagePack、ProtocolBuffers、Thrift等,但我不喜欢它们的是它们引入了自己的处理实际 (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接口并在运行时抛出真正的异常来构建正确的请求/回复语法,如果我搞砸了一些东西,比如“协议异常:未设置强制参数”或其他东西......
任何为此而闻名的项目/库?
要求是
- 它体积小、重量轻、速度快。
- 它是用 JAVA 实现的
- 它没有太多用途(比如一些成熟的框架,例如Spring)