2017-09-27 10 views
0

브로커 주제가 있고 여러 개의 기본 메시지 수신기 또는 간단한 메시지 수신기를 가질 계획입니다. 모든 리스너는 동일한 코드를 실행합니다.여러 청취자가 동일한 코드에서 작동 할 수 있습니까?

  1. 각 리스너 코드는 다른 것과 독립적으로 실행됩니다. 내가 물어 보려고하는 것은 동일한 방법을 사용할 때 청취자들간에 충돌이있을 경우인가?

나는 멀티 스레드 실행과 같이 작동합니다. JMS와 activemq를 중개인으로 사용하고 있습니다.

이해할 수있는 코드 : 각 청취자는이 메서드를 "이벤트 처리"이벤트를 보내는 것으로 호출합니다. 이 메서드는 다른 메서드를 호출합니다. handle 메소드는 다른 메소드를 호출합니다.

private void eventProcessing(final Event Event){ 
     try { 
       if(Event.isDatafileTransaction()){ 
       final EventDatafileTransaction datafileTransaction = Event.getDatafileTransaction(); 

          final List<Events> transactions = getDatafileTransactions(datafileTransaction); 
          final List<AcEventRecordOperation> recordOperations = getTransactionsAsListOfRecordOperations(datafileTransaction, transactions); 

          if (recordOperations != null && recordOperations.size() > 0) { 

            recordOperationListener.handle(recordOperations); 

         } 

       } 
     } catch (Throwable t) { 

     } 

    } 
+0

더 자세한 코드 스 니펫 없이는 알기 어렵지만 기본 멀티 스레딩 및 동시성은 여전히 ​​적용됩니다. 그래서 EventProcessing 메서드가 클래스에 있고 여러 리스너에 의해 호출되고 각 리스너가 전달하는 Event 객체가 개별 리스너에 대해 고유하다고 가정하면 여기서는 스레드로부터 안전하다고 생각합니다. –

답변

0

청취자는 필드 (클래스 수준 변수)가 없거나 동기화로 보호되어야합니다.