Event Bus
Vert.x 프레임워크에서 실행 되는 가장 작은 단위의 프로그램을 Verticle이라 한다.
백엔드 시스템을 구축함에 있어서 Verticle 간 통신이 필요한 경우가 많이 발생한다.
Verticle간 정보 교환을 하는데 있어서 사용 되는 것이 Event Bus이다.
Event Bus 예제
먼저 publisher 혹은 sender에 해당하는 코드이다.
@Override
public void start() throws Exception {
EventBus eb = vertx.eventBus();
//이벤트버스 생성
vertx.setPeriodic(1000, v -> {
//1초마다 v 콜백을 호출하는 정기 이벤트를 설정
eb.send("ping-address", "ping!", reply -> {
//ping-address 주소로 "ping!" 메시지를 보내고 reply 콜백을 호출합니다.
if (reply.succeeded()) {
// reply 콜백이 성공했는지 확인합니다.
System.out.println("Received reply " + reply.result().body());
} else {
//실패시
System.out.println("No reply");
}
});
});
}
Event Bus는 전에 Vert.x 인스턴스나 Verticle을 만들었던 방법과 동일하게 생성을 해줄 수 있다.
해당 코드에서는 1초마다 Event Bus를 통해 “ping!” 이라는 메세지를 보내주고 성공을 했을 시,
해당 결과를, 실패시 “No Reply”를 프린트하게 된다.
eb.send()를 통해서 메세지를 보낼 수 있으며,
해당 메세지의 이름은 “ping-address”이다.
Subscriber에 해당하는 코드는 다음과 같다.
@Override
public void start() throws Exception {
//start()이 줄은 verticle이 시작될 때 호출되는 메서드 의 시작을 표시
EventBus eb = vertx.eventBus();
//이벤트버스 생성
eb.consumer("ping-address", message -> {
//ping-address 주소에 대한 consumer를 등록합니다.
//consumer는 메시지가 주소로 전송될 때마다 호출됩니다 ping-address.
System.out.println("Received message: " + message.body());
message.reply("pong!");
//"pong!"이라는 텍스트가 포함된 회신을 보냅니다.
});
System.out.println("Receiver ready!");
}
이번에는 send가 아닌 eb.consumer()을 통해서 해당 event bus의 subscriber이라는 것을 지정해 준다.
그 후 이전에 메세지의 이름을 “ping-address”였기 때문에 이를 지정해주고,
reply를 통해 정상적으로 메세지를 수신했다는 것을 알린다.
Event Bus를 통해서 예시와 같이 String을 주고 받는 것도 가능하지만,
자바에서 생성한 객체를 주고 받는 것 역시 가능하다.
eventbus의 publisher / sender 차이점
Vert.x event bus에서 publisher와 sender는 모두 메시지를 보내는 역할을 하지만 몇 가지 차이점이 있습니다.
publisher는 일반적으로 서비스를 제공하는 데 사용되며
sender는 특정 이벤트에 응답하는 데 사용됩니다.
웹 서버는 HTTP 요청을 처리하는 데 publisher를 사용할 수 있습니다.
웹 서버는 HTTP 요청을 처리한 후 응답을 보내기 위해 publisher를 사용합니다.
웹 서버는 또한 특정 이벤트에 응답하는 데 sender를 사용할 수 있습니다. 예를 들어, 웹 서버는 사용자가 로그인하면 sender를 사용하여 로그인 이벤트를 알릴 수 있습니다.
publisher와 sender는 모두 Vert.x event bus에서 메시지를 보내는 데 중요한 역할을 합니다.
'STUDY > Vert.x' 카테고리의 다른 글
[Vert.x] 이벤트 핸들러 정리 (1) | 2023.09.21 |
---|---|
[Vert.x] setTimer , setPeriodic - 특정 시간 간격으로 작업하기 (0) | 2023.09.20 |
[Vert.x] 버텍스(Vert.x) 코드 분석 정리 (0) | 2023.06.16 |
[Vert.x] 버텍스(Vert.x)란? (0) | 2023.03.10 |