Java 通过Hazelcast队列请求答复
我想知道我是否可以这样做:Java 通过Hazelcast队列请求答复,java,hazelcast,Java,Hazelcast,我想知道我是否可以这样做: 1个hazelcast实例/成员(中心点) 1个应用程序,hazelcast客户端通过队列发送请求 1个应用程序,hazelcast客户端正在等待进入队列的请求 第一个应用程序还接收第二个应用程序发布的另一个队列上的响应 这是一个好办法吗?或者你认为有更好的解决办法吗 谢谢 您不能使用相关id在hazelcast中的单个队列上执行请求-应答吗?这是唯一定义队列的两个提供者/使用者之间对话的id。此设置@unludo?的目的是什么?。我只是好奇在过去,我们构建了一个
- 1个hazelcast实例/成员(中心点)
- 1个应用程序,hazelcast客户端通过队列发送请求
- 1个应用程序,hazelcast客户端正在等待进入队列的请求
谢谢 您不能使用相关id在hazelcast中的单个队列上执行请求-应答吗?这是唯一定义队列的两个提供者/使用者之间对话的id。此设置@unludo?的目的是什么?。我只是好奇在过去,我们构建了一个SOA系统,使用Hazelcast队列作为总线。以下是一些标题 a。每个服务都有一个收入Q。服务名就是队列的名称。您可以拥有任意数量的服务提供商。你可以放大和缩小。您所需要的只是这些服务提供者轮询此队列并处理到达的请求 b。由于系统是完全异步的,为了将请求和响应关联起来,在请求和响应上都有一个调用id c。每个客户机向它想要调用的服务队列发送一个请求。请求包含服务的所有参数、发送响应的队列名称和调用id。队列名称可以是客户端的地址。这样,每个客户机都将拥有自己的唯一队列 d。在接收到请求后,服务提供商将对其进行处理,并将响应发送到应答队列 e。每个客户机还不断轮询其输入队列,以接收其发送的请求的答案
这种设计的主要缺点是队列的可伸缩性不如映射。因此,它的可伸缩性不是很强。无论如何,它仍然可以每秒处理5K个请求 我自己做了一个测试,验证了它在一定的限制下运行良好 体系结构为生产者-黑泽尔卡斯特\节点-消费者 使用两个Hazelcast队列,一个用于请求,一个用于响应,我可以测量不到1ms的往返行程 如果我将多个使用者放入请求队列中,负载平衡工作正常
如果我添加另一个节点,并将客户端连接到每个节点,则往返时间超过15毫秒。这是由于2个hazelcast节点之间的复制造成的。如果我杀死一个节点,客户端将继续工作。因此,故障切换是以时间为代价的。过去几天,我还研究了一个“类似soa”的解决方案,使用hazelcast队列在不同机器上的不同进程之间进行通信 我的主要目标是
希望这有帮助 谢谢你的反馈。关于a,我也使用了一个队列,但没有使用轮询,而是使用了take(),这意味着它是阻塞的。C你是说客户端类型将有其队列?如果每个客户机都有一个队列,那么就创建了直接连接,并放弃了“模块”的概念,即不需要了解其他客户机就可以请求服务。这个概念是要有一个快速的模块化异步体系结构。Modular=每个模块不需要相互了解,每个模块与总线一起工作以请求/应答,然后是独立的。这可以通过ActiveMQ完成,但我认为速度不够快。我认为让总线管理请求的生存期/ttl是个好主意。但我试图避免的是有太多的hazelcast节点,因为节点之间需要复制,这会减慢整体通信。顺便问一下,您的客户机是通过总线通知的,还是执行了一系列轮询?在我的第一种方法——基于队列的方法中,使用IQueue的客户机只对这个单一回复IQueue实例进行了特殊处理。