EmbeddedServer 애플리케이션
애플리케이션이 로딩될때, HazelCast를 같은 JVM에서 수행 시킴
1. HazelCast를 다운로드 받은 후, 압축을 푼다. (www.hazelcast.org)
2. 서버 애플리케이션 코드 작성
package terry.hazelcast;
import com.hazelcast.core.*;
import com.hazelcast.config.*;
import java.util.Map;
import java.util.Queue;
public class GettingStarted {
public static void main(String[] args) {
Config cfg = new Config();
HazelcastInstance instance = Hazelcast.newHazelcastInstance(cfg);
Map<Integer, String> mapCustomers = instance.getMap("customers");
mapCustomers.put(1, "Joe");
mapCustomers.put(2, "Ali");
mapCustomers.put(3, "Avi");
System.out.println("Customer with key 1: "+ mapCustomers.get(1));
System.out.println("Map Size:" + mapCustomers.size());
Queue<String> queueCustomers = instance.getQueue("customers");
queueCustomers.offer("Tom");
queueCustomers.offer("Mary");
queueCustomers.offer("Jane");
System.out.println("First customer: " + queueCustomers.poll());
System.out.println("Second customer: "+ queueCustomers.peek());
System.out.println("Queue size: " + queueCustomers.size());
}
}
3. 서버 실행
% java terry.hazelcast.GettingStarted
2월 11, 2014 12:33:22 오전 com.hazelcast.cluster.MulticastJoiner
INFO: [192.168.219.154]:5701 [dev]
Members [1] {
Member [192.168.219.154]:5701 this
}
2월 11, 2014 12:33:22 오전 com.hazelcast.core.LifecycleService
INFO: [192.168.219.154]:5701 [dev] Address[192.168.219.154]:5701 is STARTED
2월 11, 2014 12:33:22 오전 com.hazelcast.partition.PartitionService
INFO: [192.168.219.154]:5701 [dev] Initializing cluster partition table first arrangement...
Customer with key 1: Joe
Map Size:3
First customer: Tom
Second customer: Mary
Queue size: 2
※ 만약에 같은 애플리케이션을 한번 더 수행 시키면, 새로운 HazelCast 인스턴스가 뜨면서 Cluster에 Join 되는 것을 확인할 수 있다.
Client/Server 형 애플리케이션
1. Client 코드 작성
package terry.hazelcast;
import com.hazelcast.client.config.ClientConfig;
import com.hazelcast.client.HazelcastClient;
import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.core.IMap;
public class GettingStartedClient {
public static void main(String[] args) {
ClientConfig clientConfig = new ClientConfig();
clientConfig.addAddress("127.0.0.1:5701");
HazelcastInstance client = HazelcastClient.newHazelcastClient(clientConfig);
IMap map = client.getMap("customers");
System.out.println("Map Size:" + map.size());
}
}
2. 서버 실행
% {hazelcast_home}/bin/server.bat를 실행
3. 클라이언트 코드를 실행
% java terry.hazelcast.GettingStartedClient
2월 11, 2014 12:35:46 오전 com.hazelcast.core.LifecycleService
INFO: HazelcastClient[hz.client_0_dev] is STARTING
2월 11, 2014 12:35:47 오전 com.hazelcast.core.LifecycleService
INFO: HazelcastClient[hz.client_0_dev] is STARTED
2월 11, 2014 12:35:47 오전 com.hazelcast.client.spi.ClientClusterService
INFO:
Members [1] {
Member [192.168.219.154]:5701
}
Map Size:0
참고. 위의 예제에 사용된 pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>terry</groupId>
<artifactId>hazelcast</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>hazelcast</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>com.hazelcast</groupId>
<artifactId>hazelcast-all</artifactId>
<version>3.1.3</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
노트
코드를 보면 알겠지만, 사용 방법이 다른 IMDG에 비해서 매우 쉽다. Learning Curve가 매우 낮다.
WSO2,Mule,Vert.x,Camel,Atlassian (이것도 레퍼런스 올라왔던데, 예전에는 Coherence를 사용했는데, 아마 Oracle 인수후, 이쪽으로 온듯) 등 여러 솔루션에 사용되고 있으며, 자체 Clustering 기능이 구현이 아주 쉽기 때문에, 다른 솔루션에 클러스터 구성용으로 많이 사용된다. 그외에서 message queue 기능, HTTP Session replication, Hibernate level2 캐쉬, Spring과 integration이 쉽기 때문에 사용성 면에서는 매우 높은 점수를 줄 수 있으나, 아직까지 Infinispan과의 성능 비교 글들을 보면, 열세인데, 이부분은 조금 더 리서치가 필요할듯
- 내용 원본 : http://www.hazelcast.org/getting-started/
- 테스트 소스 코드 https://github.com/bwcho75/hazelcast (향후 다른 코드 추가 예정)
'클라우드 컴퓨팅 & NoSQL > Data Grid (IMDG)' 카테고리의 다른 글
JBoss Infinispan 온라인 웨비나 내용 노트 (0) | 2014.03.19 |
---|---|
HazelCast 공부 노트 (0) | 2014.02.11 |
Oracle Coherence 문서 Link (0) | 2009.08.18 |
Coherence를 이용한 차세대 JEE 아키텍쳐 (확장성과 유연성이 높은 애플리케이션 그리드) (11) | 2009.06.10 |
Data Grid (Coherence,terracotta) (6) | 2008.11.05 |