【发布时间】:2015-02-05 00:52:11
【问题描述】:
ActiveMQ 5.10.0 春季4.1.2
我正在使用 Spring 访问 activeMQ 并尝试在将新消息添加到队列之前查看队列。消息添加成功,但队列中没有显示任何内容。通过 Web 界面,我看到我的消息在队列中等待处理。
谢谢!
@Service
public class MessageQueueService{
private static final Logger logger = LoggerFactory.getLogger(MessageQueueService.class);
@Inject
JmsTemplate jmsTemplate;
@SuppressWarnings({ "rawtypes", "unchecked" })
public void testAddJob(){
jmsTemplate.send(new MessageCreator() {
public Message createMessage(Session session) throws JMSException {
IndexJob j1=new IndexJob();
j1.setOperation("post");
ObjectMessage om=session.createObjectMessage();
om.setObject(j1);
QueueBrowser qb=session.createBrowser((javax.jms.Queue) jmsTemplate.getDefaultDestination());
Enumeration<Message> messages=qb.getEnumeration();
logger.info("browsing "+qb.getQueue().getQueueName());
int i=0;
while(messages.hasMoreElements()) {
i++;
Message message=messages.nextElement();
logger.info(message+"");
}
logger.info("total record:"+i);
return om;
}
});
}
输出:
2014-12-07 00:03:43.874 [main] INFO c.b.b.s.MessageQueueService - browsing indexJob
2014-12-07 00:03:43.878 [main] INFO c.b.b.s.MessageQueueService - total record:0
更新:execute 有一个尚未详细记录的参数boolean startConnection。当它设置为“true”时,它似乎工作。虽然这不是一个解决方案 -
String result=jms.execute(new SessionCallback<String>() {
@Override
public String doInJms(Session session) throws JMSException {
QueueBrowser queue=session.createBrowser((Queue)session.createQueue("indexJob"));
Enumeration<Message> messages=queue.getEnumeration();
String result="";
logger.info("Browse Queue: "+queue.getQueue().getQueueName());
while(messages.hasMoreElements()) {
Message message=messages.nextElement();
result+=message;
}
logger.info(result);
return result;
}
}, true);
查看org.springframework.jms.core.JmsTemplate.class源,大多数发送方法都使用execute()方法和startConnection=false。
如果连接没有启动,那么消息是如何添加到队列中的?
有人知道@param startConnection whether to start the Connection 是什么意思吗?
【问题讨论】:
-
将
startConnection设置为 true 也解决了我的问题。