我有一个Java应用程序,它由两种长时间运行的进程组成,比如说服务器和客户端,并且通常客户端的数量大于10。
一些应用程序行为是:
- 服务器通过向其发送命令来要求客户端执行一些任务
- 服务器从客户端拉取任务状态/结果
- 客户端向服务器发送一些心跳消息
- 服务器向客户端查询一些进程状态
现在我只是通过 TCP/IP 套接字传输序列化对象来实现这一点。但我很快发现我必须处理太多细节(例如可靠性、工作负载监控)。所以我正在寻找各种选项来实现这样的事情。我目前正在考虑 消息代理,例如 ActiveMQ、RabbitMQ 甚至 ZeroMQ。
如有任何意见和建议,我们将不胜感激。
ps。速度对我来说不是问题
最佳答案
欢迎,林国锋
首先尝试在顶部/向下列表中识别和排序关键设计优先级,并分配正确的优先级:
- 解决方案方法的服务器端可扩展性
- 解决方案架构的客户端[工作线程]端性能可扩展性
- 序列化开销
- 运输可靠性
- 需要许多传输级别{ TCP |工控机| inproc } 同时工作
- 各个传输类别的传输容量/流量管理
- 传输范围/传输级负载平衡
- 反序列化开销
- 参与解决方案的各个节点/角色的异构实现语言
- 分析/设计/测试的时间预算有限
- 对不稳定问题定义的恢复能力
您可能已经发现,ZeroMQ 是一个无代理的解决方案。这对于性能可扩展性和设计故障安全架构非常重要(可以进行设计,以便单个元件故障不会停止正确设计的架构)
ZeroMQ 具有出色的功能,一旦您可以针对您的问题部署可扩展的正式通信模式,您就可以通过重用经过深思熟虑的框架来赢得强大的力量。
关于Java:更好的客户端/服务器消息交换方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24132416/