Spring사용해서 POJO로 JMS하기 (ActiveMQ)
1. ActiveMQ 프로젝트를 다운로드 받습니다.(브로커를 실행해야 하기 때문에...)
2. Writer 작성하기
3. Reader 작성하기
4. bean 설정하기
4-1. MessageListenerAdapter 로 Reader 등록하기.
4-2. Writer 등록하기.
4-3. ActiveMQConnectionFactory 등록하기.
4-4. ActiveMQQueue 등록하기.
4-5. Message Converter 등록하기.
4-6. JMS Template 등록하기.
4-7. Message Listener Container 등록하기.
5. 테스트.
5-1. ActiveMQ 브로커 실행.
5-2. 테스트 클래스 실행.
등록할 bean들이 조금 많지만, 다들 몇 줄 안 되고 필요한 이유를 알게 된다면 그리 어렵지 않습니다.
1. ActiveMQ 다운로드
http://activemq.apache.org/activemq-411-release.html
2. Writer 작성하기.
private JmsTemplate jmsTemplate;
public void setJmsTemplate(JmsTemplate jmsTemplate) {
this.jmsTemplate = jmsTemplate;
}
public void write(DTO dto){
jmsTemplate.convertAndSend(dto);
}
}
3. Reader 작성하기.
public void readMessage(DTO dto){
DTO recievedDto = (DTO)dto;
System.out.println(recievedDto.getName());
}
}
Writer의 경우 스프링 API(JmsTemplate)에 종속성이 생겨서 사알짝 POJO라고 할 수 있지만, Reader의 경우는 완전한 POJO입니다.
4. bean 설정하기.
4-1. MessageListenerAdapter 로 Reader 등록하기.
class="org.springframework.jms.listener.adapter.MessageListenerAdapter">
<property name="delegate">
<bean class="MessageReader" />
</property>
<property name="defaultListenerMethod" value="readMessage" />
<property name="messageConverter" ref="dtoConverter" />
</bean>
4-2. Writer 등록하기.
<property name="jmsTemplate" ref="jmsTemplate" />
</bean>
4-3. ActiveMQConnectionFactory 등록하기.
class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="tcp://localhost:61616" />
</bean>
4-4. ActiveMQQueue 등록하기.
class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg index="0" value="whitehsip.test.queue1" />
</bean>
4-5. Message Converter 등록하기.
<bean id="dtoConverter" class="DtoConverter" />
4-6. JMS Template 등록하기.
class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="connectionFactory" />
<property name="defaultDestination" ref="queue" />
<property name="messageConverter" ref="dtoConverter" />
</bean>
4-7. Message Listener Container 등록하기.
class="org.springframework.jms.listener.SimpleMessageListenerContainer">
<property name="connectionFactory" ref="connectionFactory" />
<property name="destination" ref="queue" />
<property name="messageListener" ref="messageReader" />
</bean>
5. 테스트.
5-1. ActiveMQ 브로커 실행.
다운받은 ActiveMQ의 bin 폴더의 activemq.bat 파일을 실행합니다.
5-2. 테스트 클래스 실행.
@ContextConfiguration(locations={"/springContext.xml"})
public class QueueTest {
@Autowired
private MessageWriter messageWriter;
@Test
public void testActiveMQJMS() throws Exception {
DTO sendingDto = new DTO();
sendingDto.setName("기선");
messageWriter.write(sendingDto);
}
}
콘솔창에 "기선" 이라고 찍히면 됩니다.