【Hazelcast源码笔记】一、AddressPicker

Node在创建过程中,会生成一个AddressPicker,通过AddressPicker来获取publicAddress和bindAddress. 在很多情况下,这两者包含相同的IP和端口。在某些情况下会有不同,如通过<public-address>配置指定了publicAddress或者通过MemberAddressProvider来生成了bindAddress。下面看源码:

在Node.class类中,Node的构造函数。创建AddressPicker的方法nodeContext.createAddressPicker(this).

解析MemberAddressProviderConfig和AdvancedNetworkConfig,

(AdvancedNetworkConfig是3.12后出现的特性,可以为不同的网络接口配置不同的实现协议,比如Member和Client之间通信使用不同的网络接口。)

默认情况下是没有。

然后就开始pickAddress:

看DefaultAddressPicker的pickAddress方法:

getPublicAddressByPortSearch获取publicAddress,主要步骤被框出:

第一步,pickAddressDef:

按顺序来:getSystemConfiguredAddress,默认一般是没有。

pickInterfaceAddressDef():

pickLoopbackAddress(null):取本机地址做Address.

第二步createServerSocketChannel,绑定ServerSocket到bindAddressDef(inetAddress,port)

第三步createAddress(bindAddress是DefaultAddressPicker的成员变量,到此已经完成了addressPick了)

第四步getPublicAddress,如果没有指定hazelcast.local.publicAddress或者配置public-address,则返回Null. 此时使用bindAddress作为publicAddress。

pickAddress完成后,bindAddress和publicAddress也都生成了,归纳获取bindAddress的步骤:

1.  生成一个AddressPicker, 根据配置情况,判断使用DefaultAddressPicker还是AdvancedNetworkAddressPicker还是DelegatingAddressPicker。一般默认情况下都是DefaultAddressPicker,配置了advancedNetwork时,会使用AdvancedNetworkAddressPicker,根据配置来选择,配置了MemberAddressProvider时,会使用DelegatingAddressPicker,由用户来实现地址的生成。后两种情况另做分析。

2. pickAddress生成publicAddress和bindAddress。第一步getSystemConfiguredAddress判断是不是用户通过hazelcast.local.localAddress来设置了绑定地址,默认是没有的。第二步从members、interfaces等配置中筛选出和本机网卡地址相匹配的地址,来作为bindAddress,如果没有找到匹配项,则取默认loopback地址做绑定。

3. 生成ServerSocketChannel绑定ServerSocket到bindAddressDef(inetAddress,port)

4. 生成publicAddress,如果没有指定hazelcast.local.publicAddress或者配置public-address,则返回Null. 此时使用bindAddress作为publicAddress。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
/** * 只显示省份一级 * provinceBlock : 回调省份 */ (instancetype)provincePickerViewWithProvinceBlock:(void(^)(NSString *province))provinceBlock; /** * 显示省份和市级 * cityBlock : 回调省份和城市 */ (instancetype)cityPickerViewWithCityBlock:(void(^)(NSString *province, NSString *city))cityBlock; /** * 显示省份和市级和区域 * areaBlock : 回调省份城市和区域 */ (instancetype)areaPickerViewWithAreaBlock:(void(^)(NSString *province, NSString *city, NSString *area))areaBlock; /** * 只显示省份一级 * province : 传入了省份自动滚动到省份,没有传或者找不到默认选中第一个 * provinceBlock : 回调省份 */ (instancetype)provincePickerViewWithProvince:(NSString *)province provinceBlock:(void(^)(NSString *province))provinceBlock; /** * 显示省份和市级 * province,city : 传入了省份和城市自动滚动到选中的,没有传或者找不到默认选中第一个 * cityBlock : 回调省份和城市 */ (instancetype)cityPickerViewWithProvince:(NSString *)province city:(NSString *)city cityBlock:(void(^)(NSString *province, NSString *city))cityBlock; /** * 显示省份和市级和区域 * province,city : 传入了省份和城市和区域自动滚动到选中的,没有传或者找不到默认选中第一个 * areaBlock : 回调省份城市和区域 */ (instancetype)areaPickerViewWithProvince:(NSString *)province city:(NSString *)city area:(NSString *)area areaBlock:(void(^)(NSString *province, NSString *city, NSString *area))areaBlock;
Hazelcast 是一个开的分布式内存数据网格(In-Memory Data Grid),它可以让开发人员更加容易地构建高可用性、高性能的分布式系统。下面是一个使用 Hazelcast 的简单例子: 假设我们正在开发一个在线商城,需要缓存一些商品信息。我们可以使用 Hazelcast 轻松地将这些商品信息存储在分布式内存中。具体步骤如下: 1. 引入 Hazelcast 的依赖 ```xml <dependency> <groupId>com.hazelcast</groupId> <artifactId>hazelcast-all</artifactId> <version>4.0.3</version> </dependency> ``` 2. 编写代码 ```java import com.hazelcast.core.Hazelcast; import com.hazelcast.core.HazelcastInstance; import java.util.Map; public class HazelcastExample { public static void main(String[] args) { // 创建 Hazelcast 实例 HazelcastInstance hazelcastInstance = Hazelcast.newHazelcastInstance(); // 获取分布式 Map Map<String, String> products = hazelcastInstance.getMap("products"); // 将商品信息放入 Map 中 products.put("product1", "iphone"); products.put("product2", "ipad"); products.put("product3", "macbook"); // 获取商品信息 String product1 = products.get("product1"); String product2 = products.get("product2"); String product3 = products.get("product3"); System.out.println(product1); System.out.println(product2); System.out.println(product3); // 关闭 Hazelcast 实例 hazelcastInstance.shutdown(); } } ``` 在上面的例子中,我们首先创建了一个 Hazelcast 实例,然后获取了一个分布式 Map,将商品信息放入 Map 中。最后,我们通过键获取了对应的商品信息,并将其打印出来。最后,我们关闭了 Hazelcast 实例。 需要注意的是,在实际使用中,我们可能需要对 Hazelcast 进行配置,以满足我们的具体需求。此外,我们还可以使用 Hazelcast 的其他功能,例如分布式队列、分布式锁等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值