使用 execute() 方法
Send() 方法适合普通的消息发送操作 , 但有时需要在 session 或 MessageProducer 上执行多个操作 , 对此 Spring 提供了 SessionCallback 和 ProducerCallback 回调接口开放出 Session 和 MessageProducer, 用记可以使用原生的 JMS API 进行操作 ;
SessionCallback 回调接口的方法
Object doInJms(Session sessin) 用户可以先接收一个消息 , 然后再发送一个消息执行多个操作
MessageSender.java
package cn.com.snt.spring_jms;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.MessageConsumer;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TextMessage;
import org.springframework.jms.core.ProducerCallback;
import org.springframework.jms.core.SessionCallback;
import org.springframework.jms.core.support.JmsGatewaySupport;
public class MessageSenderCallback extends JmsGatewaySupport{
public void transmit( final String fromQueue, final String toQueue){
getJmsTemplate().execute( new SessionCallback(){
public Object doInJms(Session session) throws JMSException {
Destination fromDest=session.createQueue(fromQueue);
Destination toDest=session.createQueue(toQueue);
MessageConsumer consumer=session.createConsumer(fromDest);
System. out .println( "receive msg......" );
TextMessage msg=(TextMessage) consumer.receiveNoWait();
if (msg!= null ){
System. out .println( "receiver msg " +msg + "/n messingID" +msg.getJMSMessageID());
MessageProducer producer=session.createProducer(toDest);
producer.send(msg);
System. out .println( "msg sended!" );
}
return null ;
}
});
}
public void transmit1(){
getJmsTemplate().execute( new ProducerCallback(){
public Object doInJms(Session session, MessageProducer producer)
throws JMSException {
return null ;
}
});
}
}