我正在开发一个分布式系统,它由通过JMS(ActiveMQ)松散(异步)耦合的不同组件(服务)组成。
因此我不想重新发明轮子,我正在寻找一个(良好)已知的协议/库,它有助于在这些组件之间进行远程过程调用,并帮助我处理方法接口。
所以让我们通过肮脏的解决方案分解我现在已经解决的问题:
所以它看起来非常像SOAP,而我认为SOAP对我的应用程序来说很重要,而且我根本不使用HTTP。鉴于我认为人们可能能够将问题解构为不同的组件。
我正在调查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接口并在运行时抛出真正的异常,如果我搞乱了,比如“协议异常:强制参数未设置”等等......
任何已知的项目/库?
要求是
答案 0 :(得分:3)
我认为这个Spring包是您正在寻找的。请参阅JmsInvokerProxyFactoryBean及相关课程。
来自javadoc:
FactoryBean for JMS invoker proxies。公开代理服务 使用指定的服务接口作为bean引用。
序列化远程调用对象并反序列化远程 调用结果对象。像RMI一样使用Java序列化,但是 与JMS提供商一起作为通信基础设施。