는 보스 5.1 서버에 봄 3.0.5 프레임 워크 실행을 기반으로하는 응용 프로그램이 있습니다. 어떻게 봄 3.05 및 J 보스 5.1 (JBossMQ와)를 사용하여 JMS 로컬 큐를 구현하는 방법?
나는이 tutorial을 따르려고했는데, 그것은 ActiveMQ를 브로커 대신 JBossMQ와 (기본 JBoss의 5.1 브로커)를 사용합니다.는 나는 이미 보스의 설정에서이 MyQueue (목적지를-service.xml) 라는 대기열을 설정 한 :
<mbean code="org.jboss.jms.server.destination.QueueService"
name="jboss.messaging.destination:service=Queue,name=MyQueue"
xmbean-dd="xmdesc/Queue-xmbean.xml">
<depends optional-attribute-name="ServerPeer">jboss.messaging:service=ServerPeer</depends>
<depends>jboss.messaging:service=PostOffice</depends>
당신은 아래에있는 내 설정의 나머지 부분을 볼 수 있습니다. 내가 뭘 놓치고 있니? 어떻게 큐와 연결 팩토리의 JNDI 이름을 지정할 수 있습니다? 그리고 서버 주소에 대한 어떤 ([ConnectionFactory에] 커넥터 bisocket : // localhost를 : 4457)?
applicationContext.xml에서 내 설정은 다음과 같다 :
<bean id="connectionFactory" class="org.jboss.jms.server.connectionfactory.ConnectionFactory" />
<bean id="messageDestination" class="javax.jms.Queue" />
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="connectionFactory" />
<property name="receiveTimeout" value="10000" />
</bean>
<bean id="springJmsProducer" class="myPackage.QueueProducer">
<property name="destination" ref="messageDestination" />
<property name="jmsTemplate" ref="jmsTemplate" />
</bean>
<bean id="messageListener" class="myPackage.QueueConsumer" />
내 프로듀서 :
public class QueueProducer {
private JmsTemplate jmsTemplate;
private Queue queue;
public void setConnectionFactory(ConnectionFactory cf) {
this.jmsTemplate = new JmsTemplate(cf);
}
public void setQueue(Queue queue) {
this.queue = queue;
}
public void send(Object object) {
this.jmsTemplate.send(this.queue, new MessageCreator() {
public Message createMessage(Session session) throws JMSException {
return session.createTextMessage("my text to send");
}
});
}
}
내 소비자 :
public class QueueConsumer implements MessageListener {
@Override
public void onMessage(Message message) {
if (message instanceof TextMessage) {
try {
System.out.println(((TextMessage) message).getText());
}catch (JMSException ex) {
throw new RuntimeException(ex);
}
}
else {
throw new IllegalArgumentException("Message must be of type TextMessage");
}
}
}