我很難理解Spring JMS用來發送消息的模式。 JmsTemplate類將MessageCreator作爲參數。像這樣:爲什麼Spring JMS框架使用MessageCreator?
JmsTemplate.send(MessageCreator messageCreator)
沒有選項可以直接傳遞Message對象。這看起來很反Spring,因爲MessageCreator不能是Singleton。如果它是單身人士,則由於此方法而不是線程安全的:
MessageCreator.createMessage(Session session)
createMessage方法只接受一個會話對象。所以爲了讓這個對象創建一個消息,它需要用某種狀態初始化,如果它有狀態,那麼它不能是單例。
那麼強迫我使用MessageCreator有什麼意義呢?因爲在任何真實情況MyMessageCreator永遠是這樣的:
public MyMessageCreator(String message) {
this.message = message;
}
public createMessage(Session session) throws JMSException {
return session.createTextMessage(message);
}
由於生成消息總是需要一些豆類或其他動態值。爲什麼一些這個類的消息構造如果都是都不能做?
如果唯一的原因是我們有一個Session對象的引用,那麼我肯定有一個更好的方法來從Spring bean訪問這個實例(通過注入它,從模板本身獲取它,或者使用一些工廠方法)。
我錯過了什麼嗎?或者是MessageCreator毫無意義?
當Spring提供MessageConverter抽象時,爲什麼要使用Session對象?只是不能想到這個MessageCreator的任何用例都無法用其他結構來完成。 – luboskrnac
不知道你在想什麼'MessageConverter'抽象,但是JMS需要這個會話。出於一個明顯的原因,當您創建一個'javax.jms.Message'時,JMS API需要您傳遞會話。 –