Hazelcast入门指南第4部分

这是我的Hazelcast系列的第四部分。 如果一个人没有看到其他三个人,我建议一个人去看第1 部分第2 部分第3部分

记录中

日志记录是任何应用程序的重要功能,我的示例也是如此。 System.out.println可以用作告诉用户控制台应用程序中正在发生什么的有用工具。 但是,让我们面对现实吧,如果您正在阅读如何为分布式应用程序使用工具,那么该人确实不是初学者。 看到一系列日志消息不应吓到任何人。 实际上,对于本文中的示例,他们有必要了解谁在做什么。 毕竟,我们将讨论线程编程。

Hazelcast的好伙伴似乎已经同意日志记录很重要,因此有许多不同的方法来定义要记录的库。 日志记录框架仅取决于JDK日志记录,并且具有许多适配器,甚至允许自定义日志记录框架。 选择的一个日志适配器由属性hazelcast.logging.type设置为以下设置:

  • JDK日志记录,这是默认设置。
  • log4j
  • slf4j
  • 没有

我使用了Log4j2,所以我选择了slf4j并放入了使其工作所需的四个 jar文件。

旋转分布式线程

与Hazelcast中的许多类一样,IExecutorService实现了Java库ExecutorService的接口。 该接口定义什么是线程池。 该接口是java.util.concurrent包的一部分,自Java 1.5开始就存在。 该程序包还具有其实现,可以从java.util.concurrent.Executors中进行访问。 我希望我在Java 1.4或1.3或1.2或1.1中有类似的东西。 在死锁发生之前,使线程池变得很有趣。 现在我可以使用Java库的池了,对我来说已经足够了。

ExecutorService具有有趣的“功能”。 必须关闭它们,否则服务不会消失。 第一次使用它们时,导致内存泄漏并关闭了JVM。 我在自己的测试中发现了该错误,因此客户不必再看到我的学习经验。 IExecutorService的皱纹有所不同。 在所有线程完成之前,该服务不会消失。 这导致许多不正常的关机。 你被警告了!

IExecutorServices可以几种不同方式共享线程。 这里是它们的详细信息:

任何'Ole实例

这是一个只调用submit(Callable call). 这不仅仅只是将线程随机设置到集群中。 它使用该线程进行一些负载平衡,因此实例不会被线程破坏。

致特定成员

这是通过submit(Callable call, Member member)方法完成的。 这会将线程发送到群集的特定成员。 这里没有负载均衡; 只是发送给会员。 小心,一个人很容易使一个构件超载,并在进行任何处理时确实踩刹车。 我可以将其视为创建自定义负载均衡器的一种方式。

致会员集合

是的,可以将一个线程发送给多个成员。 当我进行示例编码时,所有成员的行为就像他们拥有自己的线程而不共享一个线程。 如果将Callable <T>作为其线程实现实现,则该方法使用成员作为键返回“未来地图”。 如果使用Runnable,则不返回任何内容。

用正确的钥匙致会员

IMap的条目可以在群集中的任何位置。 如果需要对该条目进行处理,则本地线程将必须通过网络上拉该条目。 如果条目很大,可能会出现问题。 更好的方法是将希望较小的线程转移到条目上。 为此,群集需要知道将其发送到哪里。 因此,呼叫submit(Callable call, Object key)

致全体会员

这与提交成员集合的方式相同,但是就像集群中的每个成员一样,都是成员。 如果一个集群中有大量成员,这可能会很“有趣”。 我想我在一个集群中听到了多达1000名成员。 确保这是人们想要的,然后再调用它。

使用ExecutionCallback

基本上,这是一种发送线程并让结果异步返回的方法。 如果提交了一个线程,则使用ExecutionCallback。 如果涉及多个成员,则使用MultiExecutionCallback。

范例程式码

在开始之前,请允许

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值