前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《Spring实战》摘录 - 25

《Spring实战》摘录 - 25

作者头像
用户1335799
发布2019-07-30 17:28:43
4660
发布2019-07-30 17:28:43
举报

251

Q: #17.2.2-1 | Spring的JmsTemplate会捕获标准的JMSException异常,再以Spring的非检查型异常JmsException子类重新抛出。

A:

代码语言:javascript
复制
左侧是Spring(org.springframework.jms.*), 右侧是标准的JMS(javax.jms.*)

* DestinationResolutionException --- Spring特有的——当Spring无法解析目的地名称时抛出
* IllegalStateException --- IllegalStateException
* InvalidClientIDException --- InvalidClientIDException
* InvalidDestinationException --- InvalidSelectorException
* InvalidSelectorException --- InvalidSelectorException
* JmsSecurityException --- JmsSecurityException
* ListenerExecutionFailedException --- Spring特有的——当监听器方法执行失败时抛出
* MessageConversionException --- Spring特有的——当消息转换失败时抛出
* MessageEOFException --- MessageEOFException
* MessageFormatException --- MessageFormatException
* MessageNotReadableException --- MessageNotReadableException
* MessageNotWriteableException --- MessageNotWriteableException
* ResourceAllocationException --- ResourceAllocationException
* SynchedLocalTransactionFailedException --- Spring特有的——当同步的本地事务不能完成时抛出
* TransactionInprogressException --- TransactionInprogressException
* TransactionRolledBackException --- TransactionRolledBackException
* UncategorizedJmsException --- Spring特有的——当没有其他异常适用时抛出

252

Q: #17.2.2-2 | 为了使用JmsTemplate,我们需要在Spring的配置文件中将它声明为一个bean。如下的XML可以完成这项工作:

A:

代码语言:javascript
复制
<bean id="jmsTemplate"
      class="org.springframework.jms.core.JmsTemplate"
      c:_-ref="connectionFactory" />

253

Q: #17.2.2-3 | JmsTemplate代表发送者来负责处理发送消息的复杂过程,图示

A:

254

Q: #17.2.2-4 | 与其每次发送消息时都指定一个目的地,不如我们为JmsTemplate装配一个默认的目的地。

A:

代码语言:javascript
复制
<bean id="jmsTemplate"
      class="org.springframework.jms.core.JmsTemplate"
      c:_-ref="connectionFactory"
      p:defaultDestinationName="spittle.alert.queue" />

255

Q: #17.2.2-5 | MessageConverter是Spring定义的接口,只有两个需要实现的方法

A:

代码语言:javascript
复制
public interface MessageConverter {
  Message toMessage(Object object, Session session)
                   throws JMSException, MessageConversionException;
  Object fromMessage(Message message)
                   throws JMSException, MessageConversionException;
}

256

Q: #17.2.2-6 | Spring为通用的转换任务提供了多个消息转换器,(所有的消息转换器都位于org.springframework.jms.support.converter包中)

A:

  • MappingJacksonMessageConverter --- 使用Jackson JSON库实现消息与JSON格式之间的相互转换。
  • MappingJackson2MessageConverter --- 使用Jackson 2 JSON库实现消息与JSON格式之间的相互转换。
  • MarshallingMessageConverter --- 使用JAXB库实现消息与XML格式之间的相互转换。
  • SimpleMessageConverter --- 实现String与TextMessage之间的相互转换,字节数组与BytesMessage之间的相互转换,Map与MapMessage之间的相互转换以及Serializable对象与ObjectMessage之间的相互转换。

257

Q: #17.2.2-7 | 如果你想使用JSON消息的话,那么可以声明一个MappingJacksonMessageConverter bean

A:

代码语言:javascript
复制
<bean id="messageConverter"
      class="org.springframework.jms.support.converter.MappingJacksonMessageConverter" />

258

Q: #17.2.2-8 | 使用JmsTemplate接收消息

A:

代码语言:javascript
复制
public Splittle receiveSplittleAlert(){
    try{
        ObjectMessage receiveMessage = (ObjectMessage) jmsOperations.reveive(); //接收消息
        return (Splittle) reveiveMessage.getObject(); //获得对象
    } catch (JMSException jmsException) {
        throw JmsUtils.convertJmsAccessException(jmsException); //抛出转换后的异常
    }
}

使用JmsTemplate从主题或队列中接收消息的时候,只需要简单地调用receive()方法。JmsTemplate会处理其他的事情。

259

Q: #17.2.3-1 | Spring MDP异步接收和处理消息

A:

代码语言:javascript
复制
package com.habuma.spittr.alerts;
import com.habuma.spittr.domain.Spittle;
public class SplittleAlertHandler {
    public void handleSpittleAlert(Spittle spittle){
        //   implemention goes here...
    }
}

260

Q: #17.2.3-2 | 消息监听器容器,是什么?

A: 消息监听器容器(message listener container)是一个特殊的bean,它可以监控JMS目的地并等待消息到达。一旦有消息到达,它取出消息,然后把消息传给任意一个对此消息感兴趣的消息监听器。如图17.7展示了这个交互过程。

消息监听器容器监听队列和主题。当消息到达时,消息将转给消息监听器(例如消息驱动的POJO)。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 怀英的自我修炼 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档