Java:更好的客户端/服务器消息交换方法?

时间:2014-06-10 03:35:22

标签: java rabbitmq activemq zeromq

我有一个Java应用程序,它包含两种长时间运行的进程,比如服务器和客户端,通常客户端的数量大于10。

一些应用程序行为是:

  • 服务器要求客户端通过向其发送命令来执行某些任务
  • 服务器从客户端
  • 中提取任务状态/结果
  • 客户端向服务器发送一些心跳消息
  • 服务器从客户端
  • 查询某些进程状态

现在我只是通过在TCP / IP套接字上传输序列化对象来实现它。但我很快发现,我必须处理太多细节(例如可靠性,工作负载监控)。所以我正在寻找各种方案来实现这样的东西。我正在考虑 消息代理,如ActiveMQ,RabbitMQ甚至ZeroMQ。

非常感谢任何建议和意见。

PS。速度不是我关心的问题

1 个答案:

答案 0 :(得分:1)

欢迎,林书豪

首先尝试在上/下列表中识别和排序关键设计优先级,并分配正确的优先级:

  1. 解决方案的服务器端可扩展性方法
  2. 解决方案架构的客户端[工作者] - 性能可扩展性
  3. 序列化开销
  4. 运输可靠性
  5. 需要很多trasport-classes {TCP | ipc | inproc}同时工作
  6. 各运输班的运输能力/交通流量管理
  7. 传输范围/传输级负载平衡
  8. 反序列化开销
  9. 参与解决方案的各种节点/角色的异构实现语言
  10. 分析/设计/测试的时间预算有限
  11. 对不稳定问题定义的抵御能力
  12. 您可能已经发现,ZeroMQ是一个无代理解决方案。这对于性能扩展能力和设计故障安全架构非常重要(可以设计一个单元件故障不会阻止正确设计的架构)

    ZeroMQ具有出色的功能,一旦您可以为您的问题部署可扩展的形式通信模式,您就可以通过重用经过深思熟虑的框架赢得大量的力量。