728x90
오늘은 Vert.x의 클러스터링을 해보겠습니다.
파일 구조는 아래와 같습니다.
// Main.java
public class Main {
public static void main(String[] args) {
// 기존 Hazelcast 클러스터 매니저와 Vert.x 옵션 설정
HazelcastClusterManager mgr = new HazelcastClusterManager();
VertxOptions options = new VertxOptions().setClusterManager(mgr);
// 클러스터링된 Vert.x 인스턴스 생성
Vertx.clusteredVertx(options, res -> {
if (res.succeeded()) {
Vertx vertx = res.result();
// 기존 버티클 배포
vertx.deployVerticle(new Verticle1());
vertx.deployVerticle(new Verticle2());
// REST API 버티클 배포
vertx.deployVerticle(new RestApiVerticle());
} else {
System.out.println("Cluster up failed: " + res.cause());
}
});
}
}
// Verticle1.java
public class Verticle1 extends AbstractVerticle {
@Override
public void start(Promise<Void> startPromise) throws Exception {
vertx.eventBus().consumer("cluster-message", message -> {
System.out.println(" Verticle1 says : Received message: " + message.body());
});
startPromise.complete();
}
}
// Verticle2.java
public class Verticle2 extends AbstractVerticle {
@Override
public void start(Promise<Void> startPromise) throws Exception {
vertx.setPeriodic(1000, id -> {
vertx.eventBus().send("cluster-message", "Hello from Verticle 2");
});
startPromise.complete();
}
}
// RestApiVerticle.java
public class RestApiVerticle extends AbstractVerticle {
@Override
public void start(Promise<Void> startPromise) throws Exception {
Router router = Router.router(vertx);
router.route().handler(BodyHandler.create());
router.get("/api/status").handler(this::handleClusterStatus);
vertx.createHttpServer()
.requestHandler(router)
.listen(8080, result -> {
if (result.succeeded()) {
startPromise.complete();
} else {
startPromise.fail(result.cause());
}
});
}
private void handleClusterStatus(RoutingContext context) {
// 클러스터 상태 정보를 반환하는 로직 구현
context.response().end("Cluster status: OK");
}
}
아래 파일은 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>com.yourcompany</groupId>
<artifactId>your-artifact</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<vertx.version>4.4.4</vertx.version> <!-- Vert.x 버전 -->
</properties>
<dependencies>
<!-- Vert.x core dependency -->
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-core</artifactId>
<version>${vertx.version}</version>
</dependency>
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-web</artifactId>
<version>4.4.4</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-hazelcast</artifactId>
<version>4.3.3</version>
</dependency>
</dependencies>
<build>
<plugins>
</plugins>
</build>
</project>
클러스터링과 상태체크도 잘 되고 있음을 확인할 수 있습니다.
'Java' 카테고리의 다른 글
[JAVA]3항 연산자 사용하기 (0) | 2024.05.29 |
---|---|
[JAVA]가변인자(Varargs) 메서드 사용하기 (0) | 2024.05.17 |
[Java] Vert.x HTTP 기본 예제 (0) | 2024.03.31 |
[JAVA] 다양한 컬렉션 타입들을 사용해 학생 데이터 관리 시스템 만들기 (0) | 2024.03.26 |
[Java] Java Swing으로 구현하는 날씨 기반 상태 변화 시뮬레이션 (0) | 2024.03.21 |