适用于RabbitMQ的JSON RPC 2.0的Java客户端

时间:2014-02-27 17:16:37

标签: json json-rpc

我需要编写一个可以通过RabbitMQ进行通信的Java JSON-RPC客户端。我发现的所有实现都假设HTTP作为传输,这对我不起作用。 RabbitMQ拥有自己的RPC客户端/服务器,但它是JSON-RPC 1.1,而不是2.0。

有人有什么建议吗?感谢。

1 个答案:

答案 0 :(得分:1)

JSON-RPC只是一种基于JSON的通信协议; JSON只是一些UTF-16文本。因此,JSON-RPC是传输协议无关的(即:JSON-RPC规范仅关注消息的 CONTENT )。

JSON-RPC“webservice”必须通过HTTP传输。但是,JSON-RPC“服务器”几乎可以使用任何传输(例如:原始TCP,SMTP等)。

你可以有一个简单的面向行(在看到换行符时处理消息)TCP服务器,只要请求是JSON-RPC格式化,并且回复是JSON-RPC格式化的,那么这就是JSON -RPC“服务器”。如果您的传输协议能够接收和发送UCS-2/UTF-16,那么您可以在其上实现JSON-RPC。

人们已经通过“彗星”,websockets,webRTC等实现了JSON-RPC。

JSON-RPC 2.0协议的某些部分在某些传输上更容易实现。例如,如果您的传输没有同时双向通信(例如:HTTP或HTTP),那么您只能实现“通知”消息的简化版本。无论何时“服务器”向客户端发送通知消息,它​​都可以在RPC样式的回复中捎带“通知”消息(可能使用“批处理”消息),或者客户端本身“轮询”服务器“通知“消息。

RabbitMQ有一个名为web-stomp的插件,它实现了websockets,以便Web浏览器可以使用JavaScript与RabbitMQ进行通信。如果您的目标客户端是Web浏览器并且您不需要异步通知支持,,您可以轻松地通过web-stomp提供的websockets polyfill发送JSON-RPC消息。

如果您的客户端语言已经可以与RabbitMQ进行本地通信,那么您只需将UTF-16编码为RabbitMQ可发布的内容,并在另一侧对其进行解码。

编辑:当然,websockets 异步的,你可以在它们上面实现正确的“通知”式消息。