【发布时间】:2016-01-25 20:06:01
【问题描述】:
我正在遵循有关在方法级别使用 JmsListener 注释使用 Spring JMS 的指南。我认为它正在工作,但由于我无法调试在该方法中设置的断点或 log4j 日志记录不起作用,甚至不是简单的 System.out.println(),我不能 100% 确定目的地正在命中.
@Component
public class JmsEmailServiceConsumer {
private final Logger log = LoggerFactory.getLogger(this.getClass());
private final JmsEmailService jmsEmailService;
@Autowired
public JmsEmailServiceConsumer(JmsEmailService jmsEmailService){
this.jmsEmailService = jmsEmailService;
}
@JmsListener(destination = "simple.queue")
public void receiveEmailData(EmailData emailData) {
jmsEmailService.sendEmail(emailData);
}
}
相当简单的任务。我要做的就是创建一个 JMS 队列来处理电子邮件的生成。此过程调用服务 jmsEmailService,该服务通过调用 DAO 来选择要发送电子邮件的电子邮件地址列表。如果没有找到,则不发送电子邮件。现在我在本地进行测试,我没有启动和运行电子邮件服务器,但我想验证对 DAO 的调用是否正常。如果是,那么我可以继续提交代码并让 QA 测试电子邮件流程。
我之所以这样做,是因为我发现一个博客确实消除了与 JMS 打交道的大部分工作。如您所见,我需要做的就是用 JmsListener 注释 receiveEmailData 方法,并提供一个已经在 Producer 类中设置的目的地:
private static final String SIMPLE_QUEUE = "simple.queue";
@Autowired
public JmsEmailProducerImpl(JmsTemplate jmsTemplate) {
this.jmsTemplate = jmsTemplate;
}
@Override
public void sendEmail(EmailData emailData) {
//EmailData emailData = new EmailData(userId, person, company, roleKind, isRemoved);
jmsTemplate.convertAndSend(SIMPLE_QUEUE, emailData);
}
很简单吧?那正是我所想。作为参考,这是我正在查看的网站:
http://xpadro.blogspot.com/2015/04/configure-spring-jms-application-with.html
有什么想法吗?我可以在有效的生产者类的行中放置一个断点,但是一旦 jmsTemplate 触发 convertAndSend 方法,消费者类中就没有断点,System.out.println() 或 log4j 日志记录工作。我确实在我的代理日志中看到了这一点:
2015-10-26 00:02:34,804 DEBUG org.apache.activemq.broker.region.Queue::expireMessages:905 queue://simple.queue expiring messages ..
2015-10-26 00:02:34,804 DEBUG org.apache.activemq.broker.region.Queue::expireMessages:911 queue://simple.queue expiring messages done.
2015-10-26 00:02:34,804 DEBUG org.apache.activemq.broker.region.Queue::doPageInForDispatch:1874 queue://simple.queue, subscriptions=0, memory=0%, size=2, pending=0 toPageIn: 0, Inflight: 0, pagedInMessages.size 2, pagedInPendingDispatch.size 2, enqueueCount: 2, dequeueCount: 0, memUsage:48394
【问题讨论】:
-
打开
org.springframework.jms的调试日志以查看消费者的活动。如果你的 pojo 没有被调用,这意味着容器没有运行或者它正在监听错误的队列。
标签: java spring spring-jms