달력

52024  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

'JMS'에 해당되는 글 1건

  1. 2008.06.28 [framework] Spring 2.0에서 향상된 JMS
[이전 블로그 백업글][2006.4.10]

http://blog.springframework.com/benh/archives/2006/04/09/spring-20s-jms-improvements/

Spring 1.1에서 JMS지원이 추가되었다. 이 지원은 예외번역(exception translation), 메시지 변환, 그리고 JdbcTemplate과 같은 템플릿 클래스를 포함한다. 이 지원은 JMS 1.0.2와 1.1스펙사이의 도메인 단일화를 다룬다. 이 지원의 핵심은 JmsTemplate이고 JMS 1.0.2의 복사본은 JmsTemplate102이다.

이 지원은 기업용 메시징을 위한 하위 레벨의 JMS API를 사용하여 굉장히 크게 발전했다. 어쨌든 이것은 부족한점(JmsTemplate은 JmsTemplate.receive()메소드를 사용하여 메시지의 동기적인 수식만 지원했다.)을 가지고 있었다. 이것은 많은 사람들을 위해 작동을 잘하긴 했지만, 굉장히 많은 사용자는 비동기적인 소비자의 구현물을 사용했다. 간단히 말하면, 그들은 메시지 지향(driven) bean이라고 불리는 EJB2를 원했다.

2.0M1과 추후의 2.0정식버전에서, JMS메시지의 비동기적인 수신을 위한 고유한 지원이 추가되었다. JmsTemplate은 여전히 메시지를 보내기 위해 사용될것이지만, DefaultMessageListenerContainer, SimpleMessageListenerContainer, 과 ServerSessionMessageListener와 같은 AbstractMessageListenerContainer의 하위클래스에 의해 조합되었다.

이러한 MessageListenerContainers를 사용하는 방법을 보자. 첫번째 단계는 메시지를 받는 클래스를 생성하는 것이다. 이것을 위해, MessageListener인터페이스를 구현하는 클래스를 생성해야만 한다.

그리고나서, message제공자가 필요할 것이다. 이 코드는 Spring 2.0이전의 것과 같다. 그래서 당신이 이미 이 코드가 있다면, 어떠한 수정도 가하지 않아도 된다.

다음에, 이 bean으로 메시지를 보내는 MessageListenerContainer를 생성하기 위한 컨텍스트를 설정할 필요가 있다. 이 예제에서는 ActiveMQ구현물 클래스를 사용하여 알릴것이다. 이것은 많은 JMS구현물중 하나가 될것이다.

MQ가 시작될 필요가 있을것이고 main메소드가 컨텍스트에 시동될 필요가 있을것이다. 당신이 필요한 나머지 소스를 볼수 있도록 이 예제의 프로젝트를 제공한다.

마지막으로, 당신은 애플리케이션을 구동하고 출력물을 볼 필요가 있다.

여기서 노트할것은 하나의 소비자 쓰레드를 가지고 비동기적인 수신을 다루는 것이다. 이것은 MessageListenerContainer의 동시 소비자(concurrent consumers) 프라퍼티를 사용하여 당신의 소비자를 위한 멀티쓰레드가 가능하다(당신은 여전히 비상태유지나 쓰레드에 안전한것에 대해 기억하라.).

내가 노트하고자 하는 하나는 Topic으로 동시 소비자를 사용하지 않는것을 확인하는 것이다. JMS Topic내에서, 모든 메시지가 Topic의 모든 소비자에게 전달되는 것을 기억하라. 이것은 topic에서 동시 소비자를 가진다면, 모든 소비자는 같은 메시지를 받을것이라는 것을 의미한다. 어쨌든, 당신이 queue를 사용한다면, 연속적인(round-robin) 방식으로 소비자에게 새로운 각각의 메시지를 분리시킬것이다.

이것은 그다지 충동적이지 않고 몇가지 점에서 당신이 작성하게 되는 것과 매우 유사할것이다. 이것을 iceberg의 팁이라고 말해보자. MessageListenerContainers는 새로운 Spring TaskExecutorabstraction을 사용하는 사용자정의 threadpools을 사용하여 트랜잭션내 일부를 가지는 능력을 가진다. 그리고 소비자에 고유의 JMS세션을 드러낸다.
Posted by fromm0
|