AMQ学习笔记 - 11. Spring-JmsTemplate之执行
概述
前面我们分别介绍了发送、接收和浏览,这三个的实现都依赖于将要介绍的执行。
执行算是一个相对比较底层的方法系列,一般情况下,我们不需要直接面向将要介绍的方法。
执行
1.关于回调接口
在讲执行之前,我们先回忆一下之前将的发送、接收和浏览。JmsTemplate接管了整个过程,但是考虑到我们可能在某个特殊的阶段做一些特殊的处理,所以又在敏感的点给我们自主行为的机会——以回调接口的方式。我们实现回调,JmsTemplate在到了那个点时,调用我们的回调。让我们看一下我们接触到的回调接口:
发送 |
|
浏览 |
|
接下来,我们来接触两个新的回调接口。
Interface org.springframework.jms.core.ProducerCallback<T> |
|
Interface org.springframework.jms.core.SessionCallback<T> |
|
Session位于编程模型的唯一主干道,而且在末端,如下面这样:
Spring一贯的思想就是:帮我们做尽量多的事,又给我们留一定的空间做其他的事。
2.执行的方法
使用ProducerCallback和SessionCallback,JmsTemplate定义了5个方法。
Class org.springframework.jms.core.JmsTemplate |
|
最后我们给一个demo,这个demo来自JmsTemplate#send(Destination destination, MessageCreator messageCreator):
1 @Override 2 public void send(final Destination destination, final MessageCreator messageCreator) throws JmsException { 3 execute(new SessionCallback<Object>() { 4 @Override 5 public Object doInJms(Session session) throws JMSException { 6 doSend(session, destination, messageCreator); 7 return null; 8 } 9 }, false); 10 }
P.S.第6行的doSend是一个protected的方法,简单说下:它需要session和destination来创建producer;需要messageCreator来创建message,然后producer发送message。我们的send并没有Session资源,所以在send和doSend之间,隔了一层SessionCallback,来获取Session资源。
本文来自博客园,作者:一尾金鱼,转载请注明原文链接:https://www.cnblogs.com/ywjy/articles/5434124.html