内容简介:Hazelcast是Hazelcast公司开源的一款分布式内存数据库产品,提供弹性可扩展、高性能的分布式内存计算。并通过提供诸如Map,Queue,ExecutorService,Lock和JCache等Java的许多开发人员友好的分布式实现。了解HazelcastHazelcast特性
Hazelcast是Hazelcast公司开源的一款分布式内存数据库产品,提供弹性可扩展、高性能的分布式内存计算。并通过提供诸如Map,Queue,ExecutorService,Lock和JCache等 Java 的许多开发人员友好的分布式实现。
了解Hazelcast
Hazelcast特性
简单易用
Hazelcast是用Java编写的,没有其他依赖关系。只需简单的把jar包引入项目的classpath即可创建集群。
无主从模式
与许多NoSQL解决方案不同,Hazelcast节点是点对点的。没有主从关系; 所有成员都存储相同数量的数据,并进行相等的处理,避免了单点故障。
弹性可扩展
Hazelcast旨在扩展成千上万的成员。新成员启动,将自动发现群集,并线性增加存储和处理能力。成员之间通过TCP保持连接和通讯。
读写快速高效
Hazelcast所有数据都存储在内存中,提供基于内存快速高效的读写能力。
Hazelcast部署拓扑
在Hazelcast官方提供两种方式部署集群(图片均来自官方文档):
如需聚焦异步或高性能大批量任务的缓存服务,嵌入式方式是相对有优势的,最明显嵌入式方式访问数据延迟性低。
独立创建Hazelcast集群,统一管理,所有的应用程序如果需要访问缓存,可通过Hazelcast客户端(有java .NET C++的实现)或Memcache客户端或简单的REST客户端访问。后续demo示例以嵌入式为例。
Hazelcast数据分区
在Hazelcast分布式环境中,默认情况下,Hazelcast有271个分区。
当启动第一个成员的时候,成员1在集群中的分区如下图:
当在集群中新添加一个节点2时,分区图如下:
在图示中,黑色分区是主分区,蓝色分区是副本分区(备份)。第一个成员具有135个主分区(黑色),并且每个分区都备份在第二个成员(蓝色)中。同时,第一个成员还具有第二个成员的主分区的副本分区。
随着成员的增多,Hazelcast将一些主要和副本分区逐个移动到新成员,使所有成员相等和冗余。只有最小量的分区将被移动到扩展Hazelcast。以下是具有四个成员的Hazelcast集群中的分区图示如下:
Hazelcast在群集成员之间平均分配分区。Hazelcast创建分区的备份,并将其分配给成员之间进行冗余。
上述插图中的分区是为了方便描述。通常,Hazelcast分区不会按照顺序分配(如这些图所示),而是随机分布。Hazelcast在成员间平均分配了分区和备份。
Hazelcast优势
Hazelcast提供开源版本。
Hazelcast无需安装,只是个极小jar包。
Hazelcast提供开箱即用的分布式数据结构,如Map,Queue,MultiMap,Topic,Lock和Executor。
Hazelcast集群非传统主从关系,避免了单点故障;集群中所有成员共同分担集群功能。
Hazelcast集群提供弹性扩展,新成员在内存不足或负载过高时能动态加入集群。
Hazelcast集群中成员分担数据缓存的同时互相冗余备份其他成员数据,防止某成员离线后数据丢失。
Hazelcast提供SPI接口支持用户自定义分布式数据结构。
Hazelcast适用场景
频繁读写数据
需要高可用分布式缓存
内存行NoSql存储
分布式环境中弹性扩展
下面我们来使用Spring Boot集成Hazelcast实现分布式集群服务看看
Spring Boot集成Hazelcast实现分布式集群服务
首先新建一个Spring Boot的gradle项目,引入Hazelcast相关jar包:
dependencies {
compile ‘com.hazelcast:hazelcast’
compile ‘org.springframework.boot:spring-boot-starter-web’
}
当Hazelcast包在classpath上,Spring Boot将通过下面两种方式之一为我们创建一个HazelcastInstance实例:
方式一,通过配置属性指定的Hazelcast.xml文件创建:
spring.hazelcast.config = classpath:hazelcast.xml
该方式需要编写一个hazelcast.xml文件,通过xml文件描述Hazelcast集群
方式二,通过提供一个com.hazelcast.config.Config javabean到Spring容器中(下面所有demo是基于java config方式)
@Bean
public Config hazelCastConfig() {
//如果有集群管理中心,可以配置
ManagementCenterConfig centerConfig = new ManagementCenterConfig();
centerConfig.setUrl(“http://127.0.0.1:8200/mancenter”);
centerConfig.setEnabled(true);
return new Config()
.setInstanceName(“hazelcast-instance”)
.setManagementCenterConfig(centerConfig)
.addMapConfig(
new MapConfig()
.setName(“instruments”)
.setMaxSizeConfig(new MaxSizeConfig(200, MaxSizeConfig.MaxSizePolicy.FREE_HEAP_SIZE))
.setEvictionPolicy(EvictionPolicy.LRU)
.setTimeToLiveSeconds(20000));
}
上面代码通过提供Config的bean时候,主要做了如下几个事:
创建一个默认名为hazelcast-instance的HazelcastInstance实例;
使用默认的组播发现模式,组播传播地址默认为:224.2.2.3,如果想修改信息或修改为TCP模式可通过setNetworkConfig()接口设置相关信息;
创建一个名为dev,访问密码为dev-pass的group保障节点加入,如果想修改组,可通过setGroupConfig()接口设置相关信息;
创建了一个名为instruments的分布式map数据结构,并设置了该map的最大容量200/逐出策略LRU/有效期20000ms等信息,当集群启动后,我们可以在任一成员节点上通过HazelcastInstance读写该map。
完整代码:
@SpringBootApplication
public class StartUp {
private Logger LOGGER = LoggerFactory.getLogger(StartUp.class);
public static void main(String[] args) {
SpringApplication.run(StartUp.class, args);
}
@Bean
public Config hazelCastConfig() {
//如果有集群管理中心,可以配置
ManagementCenterConfig centerConfig = new ManagementCenterConfig();
centerConfig.setUrl(“http://127.0.0.1:8200/mancenter”);
centerConfig.setEnabled(true);
return new Config()
.setInstanceName(“hazelcast-instance”)
.setManagementCenterConfig(centerConfig)
.addMapConfig(
new MapConfig()
.setName(“instruments”)
.setMaxSizeConfig(new MaxSizeConfig(200, MaxSizeConfig.MaxSizePolicy.FREE_HEAP_SIZE))
.setEvictionPolicy(EvictionPolicy.LRU)
.setTimeToLiveSeconds(20000));
}
}
下面我们通过修改server.port分别启动端口为8080和8081的成员服务
当启动完8080成员的时候,可以在8080控制台看到如下日志:
Members [1] {
Member [172.17.42.1]:5701 – 0d39dd66-d4fb-4af4-8ddb-e9f4c7bbe5a1 this
}
因我们使用的是组播传播模式,5701为节点在组播网络中分配的端口
当启动完8081成员的时候,可以在8081控制台看到如下日志:
Members [2] {
Member [172.17.42.1]:5701 – 0d39dd66-d4fb-4af4-8ddb-e9f4c7bbe5a1
Member [172.17.42.1]:5702 – a46ceeb4-e079-43a5-9c9d-c74265211bf7 this
}
回到8080控制台,发现多了一行日志:
Members [2] {
Member [172.17.42.1]:5701 – 0d39dd66-d4fb-4af4-8ddb-e9f4c7bbe5a1 this
Member [172.17.42.1]:5702 – a46ceeb4-e079-43a5-9c9d-c74265211bf7
}
发现8081成员也加入进来了。两个控制台都能看到成员列表。集群就已经搭建成功。
为了验证结果,上面我们在集群中已经创建了一个名为instruments的分布式map数据结构,现在我们通过写个接口证明:
@GetMapping(“/greet”)
public Object greet() {
Object value = Hazelcast.getHazelcastInstanceByName(“hazelcast-instance”).getMap(“instruments”).get(“hello”);
if (Objects.isNull(value)) {
Hazelcast.getHazelcastInstanceByName(“hazelcast-instance”).getMap(“instruments”).put(“hello”, “world!”);
} LOGGER.info(“从分布式缓存获取到 key=hello,value={}”, value);
return value;
}
首先通过访问8080服务的/greet,第一次访问instruments中是没有key为hello的键值对,会往里面塞入{“helo”:”world!”},然后访问8081服务的/greet,这个时候应该是能取得改键值对的。
完整代码:
@RestController
@SpringBootApplication
public class StartUp {
private Logger LOGGER = LoggerFactory.getLogger(StartUp.class);
public static void main(String[] args) {
SpringApplication.run(StartUp.class, args);
}
@Bean
public Config hazelCastConfig() {
//如果有集群管理中心,可以配置
ManagementCenterConfig centerConfig = new ManagementCenterConfig();
centerConfig.setUrl(“http://127.0.0.1:8200/mancenter”);
centerConfig.setEnabled(true);
return new Config()
.setInstanceName(“hazelcast-instance”)
.setManagementCenterConfig(centerConfig)
.addMapConfig(
new MapConfig()
.setName(“instruments”)
.setMaxSizeConfig(new MaxSizeConfig(200, MaxSizeConfig.MaxSizePolicy.FREE_HEAP_SIZE))
.setEvictionPolicy(EvictionPolicy.LRU)
.setTimeToLiveSeconds(20000));
}
@GetMapping(“/greet”)
public Object greet() {
Object value = Hazelcast.getHazelcastInstanceByName(“hazelcast-instance”).getMap(“instruments”).get(“hello”);
if (Objects.isNull(value)) {
Hazelcast.getHazelcastInstanceByName(“hazelcast-instance”).getMap(“instruments”).put(“hello”, “world!”);
} LOGGER.info(“从分布式缓存获取到 key=hello,value={}”, value);
return value;
}
}
重启8080和8081服务
通过浏览器请求http://localhost:8080/greet
查看8080控制台日志:
2017-10-23 13:52:27.865 INFO 13848 — [nio-8080-exec-1] com.hazelcast.StartUp: 从分布式缓存获取到 key=hello,value=nul
通过浏览器请求http://localhost:8081/greet
查看8081控制台日志:
2017-10-23 13:52:40.116 INFO 13860 — [nio-8081-exec-2] com.hazelcast.StartUp: 从分布式缓存获取到 key=hello,value=world
Spring Boot为Hazelcast提供了明确的缓存支持。如果启用缓存, HazelcastInstance则会自动包含在CacheManager实现中。所以完全可以支持Spring Cache。
以往我们用Spring Cache都是基于 Redis 做存储后端,现在我们使用Hazelcast来尝试一下 首先在启动类上开启缓存
@EnableCaching
建立个service类,demo为了方便,写在一起
完整代码:
@EnableCaching
@RestController
@SpringBootApplication
public class StartUp {
private Logger LOGGER = LoggerFactory.getLogger(StartUp.class);
public static void main(String[] args) {
SpringApplication.run(StartUp.class, args);
}
@Bean
public Config hazelCastConfig() {
//如果有集群管理中心,可以配置
ManagementCenterConfig centerConfig = new ManagementCenterConfig();
centerConfig.setUrl(“http://127.0.0.1:8200/mancenter”);
centerConfig.setEnabled(true);
return new Config()
.setInstanceName(“hazelcast-instance”)
.setManagementCenterConfig(centerConfig)
.addMapConfig(
new MapConfig()
.setName(“instruments”)
.setMaxSizeConfig(new MaxSizeConfig(200, MaxSizeConfig.MaxSizePolicy.FREE_HEAP_SIZE))
.setEvictionPolicy(EvictionPolicy.LRU)
.setTimeToLiveSeconds(20000));
}
@GetMapping(“/greet”)
public Object greet() {
Object value = Hazelcast.getHazelcastInstanceByName(“hazelcast-instance”).getMap(“instruments”).get(“hello”);
if (Objects.isNull(value)) {
Hazelcast.getHazelcastInstanceByName(“hazelcast-instance”).getMap(“instruments”).put(“hello”, “world!”);
} LOGGER.info(“从分布式缓存获取到 key=hello,value={}”, value);
return value;
}
@Autowired
private DemoService demoService;
@GetMapping(“/cache”)
public Object cache() {
String value = demoService.greet(“hello”); LOGGER.info(“从分布式缓存获取到 key=hello,value={}”, value);
return value;
}
}
@Service
@CacheConfig(cacheNames = “instruments”)
class DemoService {
private Logger LOGGER = LoggerFactory.getLogger(DemoService.class);
@Cacheable(key = “#key”)
public String greet(String key) { LOGGER.info(“缓存内没有取到key={}”, key);
return “world!”;
}
}
连续访问两次8080服务的/cache接口 第一次控制台输出日志:
2017-10-23 14:10:02.201 INFO 13069 — [nio-8081-exec-1] com.hazelcast.DemoService: 缓存内没有取到key=hello
2017-10-23 14:10:02.202 INFO 13069 — [nio-8081-exec-1] com.hazelcast.StartUp: 从分布式缓存获取到 key=hello,value=world!
第二次控制台输出日志:
2017-10-23 14:11:51.966 INFO 13069 — [nio-8081-exec-3] com.hazelcast.StartUp: 从分布式缓存获取到 key=hello,value=world!
第二次比第一次相比少了执行service方法体内容,证明第二次是通过了缓存获取。
在Hazelcast官网上,有使用Hazelcast集群和Redis集群做缓存的对比
单只性能上来说,写入速度Hazelcast比Redis快44%,读取速度Hazelcast比Redis快56%
详情移步底下参考资料中链接
下面,我们再来一个尝试,既然有分布式缓存了,我们可以把我们的8080和8081服务做成一个web集群,web服务集群主要标志是前端负载均衡和session共享,我们来实现8080和8081的session共享。
Spring Session已经支持使用Hazelcast作为会话缓存后端,首先引入Spring Session jar包
dependencies {
compile ‘com.hazelcast:hazelcast’
compile ‘org.springframework.boot:spring-boot-starter-web’
compile ‘org.springframework.session:spring-session’
}
要启用Hazelcast作为集群会话缓存后端,有两种方式
第一种Spring Boot配置文件里面配置spring.session.*属性:
spring.session.store-type=hazelcast
第二种使用java注解开启:
@EnableHazelcastHttpSession
这里选择第二种方式,要证明集群会话共享,我们定一个简单接口打印一下sessionId,通过同一浏览器访问8080和8081服务的该接口,看看不同服务请求的时候sessionId是否一致,完整代码如下:
@EnableCaching
@RestController
@EnableHazelcastHttpSession
@SpringBootApplication
public class StartUp {
private Logger LOGGER = LoggerFactory.getLogger(StartUp.class);
public static void main(String[] args) {
SpringApplication.run(StartUp.class, args);
}
@Bean
public Config hazelCastConfig() {
//如果有集群管理中心,可以配置
ManagementCenterConfig centerConfig = new ManagementCenterConfig();
centerConfig.setUrl(“http://127.0.0.1:8200/mancenter”);
centerConfig.setEnabled(true);
return new Config()
.setInstanceName(“hazelcast-instance”)
.setManagementCenterConfig(centerConfig)
.addMapConfig(
new MapConfig()
.setName(“instruments”)
.setMaxSizeConfig(new MaxSizeConfig(200, MaxSizeConfig.MaxSizePolicy.FREE_HEAP_SIZE))
.setEvictionPolicy(EvictionPolicy.LRU)
.setTimeToLiveSeconds(20000));
}
@GetMapping(“/greet”)
public Object greet() {
Object value = Hazelcast.getHazelcastInstanceByName(“hazelcast-instance”).getMap(“instruments”).get(“hello”);
if (Objects.isNull(value)) {
Hazelcast.getHazelcastInstanceByName(“hazelcast-instance”).getMap(“instruments”).put(“hello”, “world!”);
} LOGGER.info(“从分布式缓存获取到 key=hello,value={}”, value);
return value;
}
@Autowired
private DemoService demoService;
@GetMapping(“/cache”)
public Object cache() {
String value = demoService.greet(“hello”); LOGGER.info(“从分布式缓存获取到 key=hello,value={}”, value);
return value;
}
@GetMapping(“/session”)
public Object session(HttpSession session) {
String sessionId = session.getId(); LOGGER.info(“当前请求的sessionId={}”, sessionId);
return sessionId;
}
}
@Service
@CacheConfig(cacheNames = “instruments”)
class DemoService {
private Logger LOGGER = LoggerFactory.getLogger(DemoService.class);
@Cacheable(key = “#key”)
public String greet(String key) { LOGGER.info(“缓存内没有取到key={}”, key);
return “world!”;
}
}
访问8080服务/session接口,控制台日志如下:
2017-10-23 14:28:41.991 INFO 14140 — [nio-8080-exec-2] com.hazelcast.StartUp: 当前请求的sessionId=e75ffc53-90bc-41cd-8de9-e9ddb9c2a5ee
访问8081服务/session接口,控制台日志如下:
2017-10-23 14:28:45.615 INFO 14152 — [nio-8081-exec-1] com.hazelcast.StartUp: 当前请求的sessionId=e75ffc53-90bc-41cd-8de9-e9ddb9c2a5ee
集群会话共享生效。
集群管理界面
在上面的demo中,在创建Config的时候,设置了一个ManagementCenterConfig配置,该配置是指向一个Hazelcast集群管理平台,比如demo中表示在本地启动了一个管理平台服务。该功能也是相对其他NoSql服务的一个优势。
要部署ManagementCenter管理平台有多种方式
比如通过https://download.hazelcast.com/management-center/management-center-3.8.3.zip地址下载,解压后启动;
sh ./startManCenter.sh 8200 /mancenter
如果有 docker 环境,直接可以docker部署:
docker run -ti -p 8200:8080 hazelcast/management-center:latest
部署成功后,访问http://ip:8200/mancenter,首次访问会让你配置个用户名密码,进入后 :
在左侧菜单栏,能看到现有支持的分布式数据格式,比如Maps下面名为instruments的是我们前面demo自己创建的,名为spring:session:sessions是我们用了Hazelcast做集群会话同步的时候Spring为我们创建的。
中间区域能看到所有节点成员的系统相关实时使用率,随便点击一个节点进去,能看到当前节点的系统实时使用率:
红圈里面的即是上面提到的节点数据分区数,通过左侧菜单栏的数据结构进去,能看到当前对应的数据结构的详细信息和实时吞吐量:
更多内容请参考下方参考资料。
示例代码可以通过https://github.com/zggg/hazelcast-in-spring-boot下载。
参考资料
为什么选Hazelcast:https://hazelcast.com/why-hazelcast/imdg/
Hazelcast官方文档:http://docs.hazelcast.org/docs/3.8.6/manual/html-single/index.html
Redis对比:https://hazelcast.com/use-cases/nosql/redis-replacement/
Redis 3.2.8 vs Hazelcast 3.8 集群基准测试对比:https://hazelcast.com/resources/benchmark-redis-vs-hazelcast/
来源: https://www.cnblogs.com/heishao/p/9951421.html
——————–
Hazelcast与Spring集成问题
最近在项目中加入了Hazelcast第三方插件,在与Spring集成的时候,将Hazelcast配置到Spring的配置文件当中,出现了不能通过属性注入的方法,给属性赋值,代码如下:
<bean id="hazelcast" class="com.hazelcast.core.Hazelcast" factory-method="newHazelcastInstance"> <constructor-arg> <bean class="com.hazelcast.config.Config"> <property name="port" value="5701" /> <property name="portAutoIncrement" value="true" /> <property name="groupConfig"> <bean class="com.hazelcast.config.GroupConfig"> <property name="name" value="dev" /> <property name="password" value="pwd" /> </bean> </property> <property name="networkConfig"> <bean class="com.hazelcast.config.NetworkConfig"> <property name="join"> <bean class="com.hazelcast.config.Join"> <property name="multicastConfig"> <bean class="com.hazelcast.config.MulticastConfig"> <property name="enabled" value="false" /> <property name="multicastGroup" value="224.2.2.3" /> <property name="multicastPort" value="54327" /> </bean> </property> <property name="tcpIpConfig"> <bean class="com.hazelcast.config.TcpIpConfig"> <property name="enabled" value="true" /> <property name="members"> <list> <value>10.2.108.194</value> <value>10.253.73.24</value> </list> </property> </bean> </property> </bean> </property> </bean> </property> </bean> </constructor-arg> </bean> ---------------
先将hazelcast-all-x.x.x.jar放到项目的lib中,
将hazelcast.xml复制到项目的根目录中。
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <bean id="instance" class="com.hazelcast.core.Hazelcast" factory-method="newHazelcastInstance"></bean> <bean name="multiMap" factory-bean="instance" factory-method="getMultiMap"> <constructor-arg value="userSession"/> </bean> </beans>
<constructor-arg value=”userSession”/>的userSession名字随便取。
在hazelcast的管理界面会显示的。
id=”instance”的bean不写<constructor-arg>会在根目录中寻找hazelcast.xml文件的。
除了有getMultiMap外,还有getMap,getQueue,getTopic,getSet,getList,getExecutorService,getIdGenerator,getAtomicLong,getSemaphore,getCountDownLatch,getLock等。
@Autowired private MultiMap<String, Object> multiMap;
在java代码中这样就可以操作MultiMap了。
——————
hazelcast初探
Hazelcast作为一个高度可扩展的数据分发和集群平台,提供了高效的、可扩展的分布式数据存储、数据缓存。Hazelcast是开源的,在分布式技术方面,Hazelcast提供了十分友好的接口供开发者选择,如Map,Queue,ExecutorService, Lock和Jcache。
Hazelcast的稳定性很高,分布式应用可以使用Hazelcast进行存储数据、同步数据、发布订阅消息等。Hazelcast是基于Java开发的,其客户端有Java, C/C++, .NET以及REST。Hazelcast同时也支持memcache协议。它很好的支持了Hibernate,可以很容易的在当今流行的数据库系统中应用。
如果你在寻找一个基于内存的、可扩展的以及对开发者友好的NoSql,那么Hazelcast是一个很不错的选择!
Hazelcast是一个高度可扩展的数据分发和集群平台。特性包括:
提供java.util.{Queue, Set, List, Map}分布式实现。
提供java.util.concurrency.locks.Lock分布式实现。
提供java.util.concurrent.ExecutorService分布式实现。
提供用于一对多关系的分布式MultiMap。
提供用于发布/订阅的分布式Topic(主题)。
通过JCA与J2EE容器集成和事务支持。
提供用于安全集群的Socket层加密。
支持同步和异步持久化。
为Hibernate提供二级缓存Provider 。
通过JMX监控和管理集群。
支持动态HTTP Session集群。
利用备份实现动态分割。
支持动态故障恢复。
1.优点
a. Hazelcast开发比较简单
Hazelcast是基于Java写的,没有任何其它的以来。它提供的API跟Java util包很像。对于开发者来说,只需要加入hazelcast.jar,然后就可以快速使用在多个JVM之间的数据共享(分布式)。
b. Hazelcast的节点之间是平等的(Peer-to-Peer)
不像其它很多的NoSql解决方案,Hazelcast的节点之间是对等的(没有主次之分)。所有的节点存储的数据都是相等的,在应用中可以很容易的增加一个Hazelcast节点。或者以客户端-服务端的形式使用。
c. Hazelcast是可扩展的
Hazelcast的扩展性非常强,可以很简单的增加或减少节点。可以自动的监听节点的增加,并以线性的方式增加存储空间和能力。节点之间的通信是以TCP的方式建立的。
d. Hazelcast效率很高。
将数据存储在内存中,所以是非常高效的,包括读操作和写操作。
e. Hazelcast是可备份的
Hazelcast的数据会在多个节点上进行备份。一旦一个节点失败了,数据将会从别的节点上进行恢复。
f. Hazelcast页面元素齐全
页面可以看到map,list等数据内容,以及一些容量的仪表图.可以看到很多有用的数据,包括每个Map的请求次数等.
2. 使用场景
分布式缓存,通常使用在数据库之前的那一层
缓存服务器
NoSql的数据存储
Spring cache
微服务的结构
储存临时数据,如web的session等
3. Hazelcast的数据拆分
Hazelcast的数据拆分叫做间隔(Partitions)。默认情况下,Hazelcast会将数据拆分成271个间隔(总数,并不是单个单点)。当传入一个key时,Hazelcast会对它进行序列化,以及进行hash的算法等算出一个数值,通过该数值它存放在相应的间隔中(271个的其中一个)。在不同的节点中存放相同数量的间隔。Hazelcast还会生成备份的间隔,同样也是存放在这些间隔中。
4.配置
配置组连接选项
<group>
<name>test</name>
<password>test</password>
</group>
配置管理页面,如果配置为true,则可以在mancenter目录下启动页面管理
<management-center enabled=”true”>http://10.1.4.97:8080/mancenter</management-center>
配置连接网络(自增长如果配为true,端口启动失败时会自增)
<port auto-increment=”true” port-count=”100″>5701</port>
集群节点发现机制,自选一种
<join>
<multicast enabled=”false”>
<multicast-group>224.2.2.3</multicast-group>
<multicast-port>54327</multicast-port>
</multicast>
<tcp-ip enabled=”true”>
<interface>10.10.10.10</interface>
<member-list>
<member>10.10.10.10</member>
</member-list>
</tcp-ip>
<aws enabled=”false”>
<access-key>my-access-key</access-key>
<secret-key>my-secret-key</secret-key>
<!–optional, default is us-east-1 –>
<region>us-west-1</region>
<!–optional, default is ec2.amazonaws.com. If set, region shouldn’t be set as it will override this property –>
<host-header>ec2.amazonaws.com</host-header>
<!– optional, only instances belonging to this group will be discovered, default will try all running instances –>
<security-group-name>hazelcast-sg</security-group-name>
<tag-key>type</tag-key>
<tag-value>hz-nodes</tag-value>
</aws>
</join>
配置节点对套接字加密,算法可选
<symmetric-encryption enabled=”false”>
<!–
encryption algorithm such as
DES/ECB/PKCS5Padding,
PBEWithMD5AndDES,
AES/CBC/PKCS5Padding,
Blowfish,
DESede
–>
<algorithm>PBEWithMD5AndDES</algorithm>
<!– salt value to use when generating the secret key –>
<salt>thesalt</salt>
<!– pass phrase to use when generating the secret key –>
<password>thepass</password>
<!– iteration count to use when generating the secret key –>
<iteration-count>19</iteration-count>
</symmetric-encryption>
配置执行服务器的线程和队列容量
<executor-service name=”default”>
<pool-size>16</pool-size>
<!–Queue capacity. 0 means Integer.MAX_VALUE.–>
<queue-capacity>0</queue-capacity>
</executor-service>
参考:http://blog.csdn.net/hengyunabc/article/details/18514563
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Numerical Recipes 3rd Edition
William H. Press、Saul A. Teukolsky、William T. Vetterling、Brian P. Flannery / Cambridge University Press / 2007-9-6 / GBP 64.99
Do you want easy access to the latest methods in scientific computing? This greatly expanded third edition of Numerical Recipes has it, with wider coverage than ever before, many new, expanded and upd......一起来看看 《Numerical Recipes 3rd Edition》 这本书的介绍吧!