博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JmsTemplate(3.2.8 RELEASE)笔记
阅读量:5986 次
发布时间:2019-06-20

本文共 2321 字,大约阅读时间需要 7 分钟。

hot3.png

JmsTemplate(3.2.8 RELEASE)

        简化操作同步JMS的代码,类似于JdbcTemplate于JDBC。

        如果需要动态创建destination,需要用“pubSubDomain”属性指定destination类型(queue或topic)。

        JMS Session默认“auto-acknowledge”和“not transacted”。当JTA事务或Spring管理的事务中创建JMS Session时,事务和确认参数都被忽略了。在操作时,需要对bean属性“sessionTransacted”和“sessionAcknowledgeMode”进行设置。

        JmsTemplate默认用DynamicDestinationResolver来生成destination,用SimpleMessageConverter进行消息转换。可以通过bean属性“destinationResolver”和“messageConverter”来重写默认的方法。

        需要注意的是,建议使用连接池或单个的共享连接(Spring提供了线程安全的SingleConnectionFactory)。在J2EE环境中,ConnectionFactory是通过JNDI从应用程序的环境命名上下文(environment naming context)获得,应用服务器典型使用pooling和transacted的连接工厂。

        JmeTemplate有两个重要的静态成员变量RECEIVE_TIMEOUT_INDEFINITE_WAIT和RECEIVE_TIMEOUT_NO_WAIT,分别表示阻塞和非阻塞接收。

JmsTemplate主要的方法

    browse/browseSelected:浏览JMS队列中的消息。

    convertAndSend用默认指定的MessageConverter将对象转换为消息并发送到默认或指定的Destination;MessagePostProcessor表示在消息转换后和发送前可以对消息进行操作,例如修改消息头和消息属性。SimpleMessageConverter是默认的消息转换实现,支持String和TextMessage,byte[]和BytesMessage,Map和MapMessage(2.5.x的版本说是有Map,3.2.8的版本提的是ObjectMessage)之间的转换。

    execute:当需要对Session或MessageProducer进行复杂操作时,用该方法的SessionCallback和ProducerCallback能直接访问Session和MessageProducer,并发消息发送到指定destination。

    getDefaultDestinationName:默认Destination名字;

    getDelievryMode: 发送消息的模式,默认是PERSISTENT;

    getPrority:发送消息的优先级;

    getReceiveTimeout:接收操作的超时时间(毫秒);

    getTimeToLive:发送的消息“存活”的时间;

    isExplicitQosEnabled: 如果是true,则发送消息时需要使用指定的发送模式,优先级和存活时间;

    receive/receiveAndConvert /receiveAndSelected/receiveSelectedAndConvert: 阻塞接收消息,可以等待指定的时间;

    send: 发送消息到默认或指定地点;

    setDefaultDestination/setDefaultDestinationName: 设置默认目的地/目的地名;

    setDelieverMode: 默认是PERSISTENT,当isExplicitQosEnabled为true时使用;

    setDelievryPersistent: 设置发送消息是否持久或非持久化,相应设置delivery模式,默认为true代表PERSISTENT(2),false代表NONPERSISTENT(1);

    setExplicitQosEnabled:设置发送消息时是否使用指定的QOS值;

    setMessageConverter:设置convertAndSend和receiveAndConvert方法使用的消息转换器,默认是SimpleMessageConverter;

    setPriority:设置优先级;

    setReceiveTimeout:设置消息接收时的超时时间,默认是RECEIVE_TIMEOUT_INDEFINITE_WAIT,表示一致阻塞等待,RECEIVE_TIMEOUT_NO_WAIT表示立即返回;

    setTimeToLive:设置发送消息存活的时间;

————————————————

还有好几个疑问:

time-to-live表示的是啥?

写了代码验证,貌似该属性只对Queue管用,对Topic无效(Spring 3.1和ActiveMQ 5.x)。并且setTimeToLive后,需要setExplicitQosEnabled(true)才会生效;DelievryMode同样如此;

QoS参数:time-to-live,pripority,delievryMode在什么时候生效?默认的QoS参数哪里设置?

动态创建(dynamic creation)destination是什么意思?

对事务管理还是一头雾水。

转载于:https://my.oschina.net/sayitok/blog/210177

你可能感兴趣的文章
Observer模式
查看>>
写的比较规范的网站
查看>>
使用eclipse生成文档(javadoc)主要有三种方法:
查看>>
ajax提交json数据,后台解析问题
查看>>
【转】iOS开发里的Bundle是个啥玩意?!
查看>>
2016第43周四
查看>>
Qt Creator快捷键
查看>>
解读Raft(四 成员变更)
查看>>
mysql case when 判断null
查看>>
Convert enumeraltor to Dictionary object
查看>>
ios中封装网络和tableview的综合运用
查看>>
JS面向对象的程序设计之继承的实现 - 原型链
查看>>
浅析微信扫码登录原理
查看>>
APICLOUD 1.3.0 HelloWorld
查看>>
Go基础学习记录 - 编写Web应用程序 - 博客编辑功能之Model的重新思考
查看>>
Web前端经典面试试题(一)
查看>>
[基础] [GIF动图] 绕过中文输入法发送文本的3种方法
查看>>
阿里云梁楹:这样的青春,别样的精彩
查看>>
从啥也不会到可以胜任最基本的JavaWeb工作,值得你看
查看>>
深入探究immutable.js的实现机制(一)
查看>>