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

标签 java rabbitmq activemq zeromq

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

一些应用程序行为是:

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

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

如有任何意见和建议,我们将不胜感激。

ps。速度对我来说不是问题

最佳答案

欢迎,林国锋

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

  1. 解决方案方法的服务器端可扩展性
  2. 解决方案架构的客户端[工作线程]端性能可扩展性
  3. 序列化开销
  4. 运输可靠性
  5. 需要许多传输级别{ TCP |工控机| inproc } 同时工作
  6. 各个传输类别的传输容量/流量管理
  7. 传输范围/传输级负载平衡
  8. 反序列化开销
  9. 参与解决方案的各个节点/角色的异构实现语言
  10. 分析/设计/测试的时间预算有限
  11. 对不稳定问题定义的恢复能力

您可能已经发现,ZeroMQ 是一个无代理的解决方案。这对于性能可扩展性和设计故障安全架构非常重要(可以进行设计,以便单个元件故障不会停止正确设计的架构)

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

关于Java:更好的客户端/服务器消息交换方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24132416/

相关文章:

java - 如何从 void 方法返回 Completable

json - 如何使用 rabbitmqadmin 命令发布 Json

security - ActiveMQ 安全异常 : User name [defaultUser] or password is invalid

activemq - 使用 Cisco VPN 连接时本地主机解决问题

Java游戏计时 Action

java - Android 中的 MathML

java - 我应该在 HashMap 中保存数据库表以加速我的程序

RabbitMQ ha-promote-on-shutdown 与 ha-promote-on-failure

node.js - 未调用 node-amqp 交换回调

java - 如何在 ActiveMQ 中创建队列?