/**
* @author 张广海
* @date 2014-7-19
*/
package com.mtools.core.plugin.jms.activemq;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Resource;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageProducer;
import javax.jms.Session;
import javax.jms.TemporaryQueue;
import javax.jms.TextMessage;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.jms.JmsException;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import org.springframework.stereotype.Component;
import com.mtools.core.plugin.helper.AIPGException;
import com.mtools.core.plugin.helper.Auxs;
/**
* 功能:
*/
@Component("jmsSender")
public class JmsSender {
@Resource(name="jmsTemplate")
private JmsTemplate jmsTemplate;
@Resource(name="singleConFatry")
private ConnectionFactory connectionFactory;
@Resource(name="adapterQueue")
private Destination defaultDest;
Log log=LogFactory.getLog(this.getClass());
public JmsTemplate getJmsTemplate() {
return jmsTemplate;
}
public void setJmsTemplate(JmsTemplate jmsTemplate) {
this.jmsTemplate = jmsTemplate;
}
/**
* 异步消息
* @param destination
* @param mtmsg
* @throws JMSException
*/
public void asynsendMessage(Destination destination,MTMessage mtmsg) throws JMSException {
if(mtmsg==null){
mtmsg=new MTMessage();
mtmsg.setMessage("空消息");
}
jmsTemplate.send(destination,mtmsg);
}
/**
* 同步消息
* @param mtmsg
* @return
* @throws JMSException
*/
public List<Message> synSendMessage(Destination destination,MTMessage mtmsg) throws JMSException{
Session session =null;
List<Message> lmsg=null;
MessageProducer producer=null;
Connection conn=null;
try {
conn=connectionFactory.createConnection();
conn.start();
session = conn.createSession(true, Session.SESSION_TRANSACTED);
TemporaryQueue replyTo=session.createTemporaryQueue();
producer = session.createProducer(destination);
if(mtmsg==null){
mtmsg=new MTMessage();
mtmsg.setMessage("空消息");
}
mtmsg.createMessage(session);
mtmsg.getMsg().setJMSReplyTo(replyTo);
producer.send(mtmsg.getMsg());
commit(session);
MessageConsumer msgconsumer=session.createConsumer(replyTo);
lmsg=recv(msgconsumer, 3000, 1);
} catch (Exception e) {
session.rollback();
log.error("发送消息发生异常,进行回滚", e);
e.printStackTrace();
}finally{
producer.close();
conn.stop();
}
return lmsg;
}
private void commit(Session session) throws JMSException {
if(session.getTransacted()) session.commit();
}
/**
* 接收消息
* @param msgconsumer
* @param timeout 毫秒
* @param n
* @return
* @throws JMSException
*/
public static List<Message> recv(MessageConsumer msgconsumer,long timeout,int n) throws JMSException
{
int i;
List<Message> lsmsg=new ArrayList<Message>();
Message msgrsp=null;
try
{
for(i=0;i<n;++i)
{
msgrsp=msgconsumer.receive(timeout);
if(msgrsp!=null) lsmsg.add(msgrsp);
}
}
catch(Throwable t)
{
Auxs.lg.error("receive message error",t);
}
return lsmsg;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}