Spring JMS使用回调接口发送消息

本文介绍如何使用 Spring 的 JMS 模块提供的 SessionCallback 和 ProducerCallback 接口来实现复杂的 JMS 消息收发流程。通过具体代码示例展示了如何在一个会话中同时接收并发送消息。

 

使用 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 ;

                            }

                   });

         }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值