其他分享
首页 > 其他分享> > 使用Hazelcast通过队列回复请求

使用Hazelcast通过队列回复请求

作者:互联网

我想知道我是否可以请求回复:

> 1个hazelcast实例/成员(中心点)
> 1个使用hazelcast-client通过队列发送请求的应用程序
> 1个应用程序,使用hazelcast-client等待请求进入队列

第一个应用程序还接收第二个应用程序发布的另一个队列的响应.

这是一个好的方法吗?或者您认为有更好的解决方案吗?

谢谢!

解决方法:

在过去的几天里,我还使用hazelcast队列在不同机器上的不同进程之间进行通信.

我的主要目标是

>“一对多”的沟通与有多少人的保证回复
>“一对一”沟通单向
>“一对一”沟通,在一定时间内回答

总而言之,由于以下原因,我今天放弃了这种方法:

>许多复杂的代码,包括执行程序服务,callables,runnables,InterruptedException,shutdown-handling,hazelcast transaction等
>当接收者的寿命比发送者短时,在“一对一”通信的情况下悬挂消息
>如果我在合适的时间杀死了某些集群成员,则会丢失消息
>所有集群成员必须能够反序列化消息,因为它可以存储在任何位置.因此,对于某些客户端和服务,消息不能“特定”.

我切换到一个更简单的方法:

>所有“服务”使用hazelcast集群成员UUID作为密钥在MultiMap(“服务注册表”)中注册自己.每个条目都包含一些元信息,如服务标识符,加载因子,启动时间,主机,pid等
>客户端选择该MultiMap中其中一个条目的UUID,并使用DistributedTask(分布式执行程序服务)为选择的特定集群成员调用服务,并可选择获取答复(及时)
>只有服务客户端和服务必须在其类路径中具有特定的DistributedTask实现,所有其他集群成员都不会受到打扰
>客户端可以很容易地在服务注册表中找出死的条目:如果他们看不到具有特定UUID的集群成员(hazelcastInstance.getCluster().getMembers()),则该服务可能意外死亡.然后,客户端可以选择“活动”条目,较少负载因子的条目,在幂等服务的情况下进行重试等

使用第二种方法(例如超时或取消任务),编程变得非常简单和强大,更不用说要维护的代码.

希望这可以帮助!

标签:java,hazelcast
来源: https://codeday.me/bug/20190729/1569387.html