본문 바로가기

Java/Vert.x

버텍스 코어: 메시지 코덱(Message codecs)

더보기

이벤트 버스(Event Bus)는 버텍스 애플리케이션에서 각 노드 간 통신을 위한 메시징 채널입니다.

이벤트 버스에서 노드 간에 주고 받는 메시지는 Primitive 문자열 버퍼 JSON입니다.

사용자 정의 클래스 객체를 이벤트 버스에서 주고 받으려면 코덱(codec)을 정의하고 등록해야합니다.

메시지 코덱(Message codecs)

메시지 코덱(Message codecs)을 정의하고 등록하면 임의의 객체를 이벤트 버스로 주고 받을 수 있습니다.

모든 메시지 코덱에는 이름이 존재하며 메시지를 전송 할 때 DeliveryOptions에서 코덱 이름을 지정하여 사용합니다.

eventBus.registerCodec(myCodec);

DeliveryOptions options = new DeliveryOptions().setCodecName(myCodec.name());

eventBus.send("orders", new MyPOJO(), options);

메시지를 전송 할 때마다 DeliveryOptions에 코덱 이름 지정을 피하려면 기본 코덱을 등록합니다.

기본 코덱은 특정 데이터 유형에 대해서 항상 동일한 코덱을 사용합니다.

eventBus.registerDefaultCodec(MyPOJO.class, myCodec);

eventBus.send("orders", new MyPOJO());

메시지 코덱 등록을 취소하려면 unregisterCodec() 메소드를 사용합니다.

eventBus.unregisterDefaultCodec(MyPOJO.class);
더보기

메시지 코덱으로 등록된 객체가 동일한 데이터 유형으로 인코딩 및 디코딩 될 필요는 없습니다.

예를 들어 MyPOJO 클래스를 보낼 수 있는 코덱은 디코딩 되어 수신자에게는 MyOtherPOJO 클래스가 전달되도록 할 수 있습니다.

이런 방식의 인코딩 및 디코딩 방식은 서로 다른 언어로 작성된 버티클이 이벤트 버스를 통해 메시지를 주고 받을 수 있는 이유이기도 합니다.

사용자 메시지 코덱 정의

메시지 코덱을 새로 정의하여 등록하려면 MessageCodec 인터페이스를 구현해야 합니다.

코덱은 두 개의 제네릭 타입<S, R>으로 구현됩니다. S는 송신되는 메시지의 데이터 유형을, R은 수신되는 메시지의 데이터 유형입니다.

정리 및 복습

  • 이벤트 버스(Event Bus)는 버텍스 애플리케이션에서 각 노드 간 통신을 위한 메시징 채널입니다.
  • 이벤트 버스에서 노드 간에 주고 받는 메시지는 Primitive 문자열 버퍼 JSON입니다.
  • 메시지 코덱(Message codecs)을 정의하고 등록하면 임의의 객체를 이벤트 버스로 주고 받을 수 있습니다.
  • 기본 코덱을 등록하면 특정 데이터 유형에 대해서 항상 동일한 코덱을 사용합니다.