我正在按照方法级别使用JmsListener注释来使用Spring JMS。我认为它正在工作,但因为我不能调试我在该方法中设置的断点或log4j日志记录不起作用,甚至没有一个简单的System.out.println(),我不是100%确定目标是击中。在日志中使用@JmsListener
@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方法,并提供业已建立在生产者类为目的地:
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没有被调用,这意味着容器没有运行,或者它听错了队列。 –