我正在按照方法級別使用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沒有被調用,這意味着容器沒有運行,或者它聽錯了隊列。 –