사용자 도구

사이트 도구


java:guava:eventbus

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
java:guava:eventbus [2017/06/23 07:25]
kwon37xi [왜 필요한가]
java:guava:eventbus [2021/10/28 16:39] (현재)
kwon37xi [Guava Event Bus]
줄 1: 줄 1:
 ====== Guava Event Bus ====== ====== Guava Event Bus ======
   * 매우 간단하고 쉬운 [[java:eventbus|Java Event Bus]] 구현체   * 매우 간단하고 쉬운 [[java:eventbus|Java Event Bus]] 구현체
 +  * [[:springframework|Spring Framework]] 사용시에는 [[springframework:transaction:transactional_event_listener|TransactionalEventListener]] 를 우선할 것.
   * [[https://github.com/google/guava/wiki/EventBusExplained|EventBusExplained]]   * [[https://github.com/google/guava/wiki/EventBusExplained|EventBusExplained]]
   * [[http://www.baeldung.com/guava-eventbus|Guide to Guava's EventBus]]   * [[http://www.baeldung.com/guava-eventbus|Guide to Guava's EventBus]]
줄 87: 줄 88:
  
 ===== 주의할 점 ===== ===== 주의할 점 =====
-  * 특별한 이유가 없다면 ''@Subscribe'' 소드는 **항상 Thread-Safe 게 작성하고 ''@AllowConcurrentEvents''**를 붙인다.+  * Guava EventBus 는 시지 객체의 Type 검사를 하지 않기 때문에 쉽게 잘못된 객체를 메시지로 던지는 실수를 할 수 있다. **Type Safety를 보장할 수 있도록 EventBus를 감싸서 사용는 방법**을 취하는 것이 좋아보다. 
 +  * 트랜잭션이 연결된 쓰레드에서 이벤트가 발생할 경우, 만약 이벤트 버스에서 오류가 발생하면 해당 트랜잭션 전체가 롤백될 수 있다.
   * Spring 연동시 Listener의 ''@PostConstruct''로 등록하기 보다는 ''EventBus'' 객체 생성하는 설정 코드에서 Listener Bean을 생성해 바로 등록하는게 좋을 것 같다.  ''@PostConstruct''로 등록시 어떤 것들이 등록돼 있는지 코드를 추적해 확인하기 어렵다.   * Spring 연동시 Listener의 ''@PostConstruct''로 등록하기 보다는 ''EventBus'' 객체 생성하는 설정 코드에서 Listener Bean을 생성해 바로 등록하는게 좋을 것 같다.  ''@PostConstruct''로 등록시 어떤 것들이 등록돼 있는지 코드를 추적해 확인하기 어렵다.
 +    * Spring 에서는 그냥 사용하지 말고, [[springframework:transaction:transactional_event_listener|TransactionalEventListener]] 사용하는게 맞다.
     * 따라서 EventBus 선언과 ''register'' 코드를 한 군데에 모아서 관리 편의성을 꾀하는게 좋아 보인다.     * 따라서 EventBus 선언과 ''register'' 코드를 한 군데에 모아서 관리 편의성을 꾀하는게 좋아 보인다.
 +  * 특별한 이유가 없다면 ''@Subscribe'' 메소드는 **항상 Thread-Safe 하게 작성하고 ''@AllowConcurrentEvents''**를 붙인다.
   * ''@Subscribe'' 메소드가 **primitive type**을 받아서는 안 된다. 항상 객체를 받아야 한다. 또한 파라미터는 항상 **한 개**여야 한다.   * ''@Subscribe'' 메소드가 **primitive type**을 받아서는 안 된다. 항상 객체를 받아야 한다. 또한 파라미터는 항상 **한 개**여야 한다.
   * subscribe 메소드에서 예외를 발생시키지 말도록 한다. EventBus가 예외를 로깅해주긴 하지만 그것에 의존하지 말 것.   * subscribe 메소드에서 예외를 발생시키지 말도록 한다. EventBus가 예외를 로깅해주긴 하지만 그것에 의존하지 말 것.
   * ''EventBus'' 객체를 Singleton으로 한개만 생성해서 여러 이벤트들이 사용해도 되는가? -> 그래도 된다. 이벤트별로 EventBus 객체를 분리하건, 단 한개의 통합 EventBus를 만들건 이벤트는 subscriber method의 파라미터에 의해 처리자가 결정되므로 작동에는 문제없다. 개발자가 적당히 선택해서 사용한다.   * ''EventBus'' 객체를 Singleton으로 한개만 생성해서 여러 이벤트들이 사용해도 되는가? -> 그래도 된다. 이벤트별로 EventBus 객체를 분리하건, 단 한개의 통합 EventBus를 만들건 이벤트는 subscriber method의 파라미터에 의해 처리자가 결정되므로 작동에는 문제없다. 개발자가 적당히 선택해서 사용한다.
java/guava/eventbus.1498172139.txt.gz · 마지막으로 수정됨: 2017/06/23 07:25 저자 kwon37xi