我正在设计一个自定义消息系统的替代品,该系统目前用于通知 JavaScript Web 应用程序有关来自服务器端 (Java) 的更改内容。这个遗留的消息系统通过使用基于文本的自定义协议和纯 Java 套接字通过 Flash XMLSocket 工作。
替换将不仅由 Web 应用程序(通过 Web 套接字而不是 Flash)使用,而且由用 C# 编写的附加桌面客户端应用程序使用。
我的要求是:
- 用户认证
- 传输加密 (SSL/TLS)
- 双向消息交换
- 某种(自动)发布/订阅,以便用户只获得他们被允许接收的消息
- 基于既定协议的消息交换(以便我们可以在可能的情况下使用现有库)
- 可集群的服务器组件
此时消息系统将仅用于向客户端发布更新。客户端将对这些消息做出反应并直接从服务器获取更多信息(而不是通过消息传递系统)。如果这个新的消息传递系统成功建立,它可能会在未来用于更高级的用例。一些可能性可能包括用户聊天、文件交换和服务器组件的远程控制。
我对实现这些要求的可行技术做了一些研究,我认为我的选择归结为使用ejabberd (XMPP) 或RabbitMQ (AMQP)。关于我的要求,这两个系统的主要优点和缺点是什么?我们已经将 RabbitMQ 用于系统基础设施的其他部分,所以这是我的自然选择。我只是不确定让客户端应用程序直接连接到这样一个关键的主要组件是否是个好主意。这可以通过只为客户端通知使用不同的 RabbitMQ 安装来缓解。