두 MQ모두 Sample(or Example)에 보면 Connection 생성에서부터 각자의 Connection 클래스로 생성하게
되어 있어, 한쪽에서 개발을 한 다음에는 다른 MQ로의 사용이 어렵게 되어 있다.
이에 Spring의 JmsTemplate을 사용하여, 좀 더 쉬운 방법으로의 통합된 형태의 간단한 예제를 작성해본다.
(단, JmsTemplate Gotchas 을 읽어보고, JmsTemplate을 적용에 주의를 요한다.)
메시지 Send
package org.jtop.spirng.sample.activemq.send;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
public class Sender {
Log log = LogFactory.getLog(this.getClass());
private JmsTemplate jmsTemplate;
private Destination destination;
public void setConnectionFactory(ConnectionFactory cf){
jmsTemplate = new JmsTemplate(cf);
}
public void setDestination(Destination des){
this.destination = des;
}
public void send(){
this.jmsTemplate.send(this.destination, new MessageCreator(){
public Message createMessage(Session session) throws JMSException {
Message ms = session.createTextMessage("Example Message");
ms.setStringProperty("Property", "Example");
return ms;
}
});
}
}
실행하는 클래스
package org.jtop.spirng.sample.activemq.send;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
public class Runner{
Log log = LogFactory.getLog(this.getClass());
private void run() {
ApplicationContext ctx = new FileSystemXmlApplicationContext("conf/activemq/activemq_send.xml");
Sender sender = (Sender)ctx.getBean("sender");
sender.send();
log.info("============= Send ==============");
}
public static void main(String[] args) {
Runner job = new Runner();
job.run();
}
}
activemq_send.xml 내용
<?xml version="1.0" encoding="euc-kr"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- ======================== Sender =========================== -->
<bean id="s_connectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiTemplate">
<ref bean="s_jndiTemplate"/>
</property>
<property name="jndiName">
<value>ConnectionFactory</value>
</property>
</bean>
<bean id="s_jndiTemplate" class="org.springframework.jndi.JndiTemplate">
<property name="environment">
<props>
<prop key="java.naming.factory.initial">
org.apache.activemq.jndi.ActiveMQInitialContextFactory
</prop>
<prop key="java.naming.provider.url">
tcp://localhost:61616
</prop>
</props>
</property>
</bean>
<bean id="s_destination" class="org.apache.activemq.command.ActiveMQTopic" autowire="constructor">
<constructor-arg value="FOO.BAR" />
</bean>
<bean id="sender" class="org.jtop.spirng.sample.activemq.send.Sender">
<property name="connectionFactory" ref="s_connectionFactory" />
<property name="destination" ref="s_destination" />
</bean>
</beans>
카테고리
태그목록
최근에 올라온 글
최근에 달린 댓글
최근에 받은 트랙백
달력
글 보관함
링크
Total :
Today : Yesterday :
Today : Yesterday :