Spring消息(1)之 JMS

主要有两个用处:

1) 程序之间的通信,当其中一方出现问题之后,消息会丢失,所以我们把消息放到消息队列中,接收方任何时候都可以接收消息,不会丢失;

2) 用户注册流程一般包括:插入用户数据到数据库,发送激活邮件到用户邮箱等一列操作,当用户点击注册之后,等到后台一系列都完成之后才响应,这会大大影响操作体验,所以我们需要采用异步消息。

JMS(Java Message Service),是一个Java标准,定义了使用消息代理的通用API,这就规范了我们使用不同的消息代理时的代码规范,而不用因为消息代理的不同而额外去学习其API,所以说,JMS其实就是一组API,它定义了Java程序代码怎么与消息队列之间进行通信。

ActiveMQ,是一款开源的消息代理产品,是JMS进行异步消息传递的最佳选择。这里就使用ActiveMQ。

1,下载安装ActiveMQ,


我的系统是macOS,所以选择第二种。

2,解压安装,直接解压即可


3,启动ActiveMQ,在解压目录的bin目录下,使用命令./activemq start/stop即可启动/停止


4,项目中引入activemq的jar包:activemq-all-5.11.2.jar

5,配置JMS连接工厂


两种方式都可以,只是第二种我们使用了ActiveMQ的spring命名空间,它默认使用了org.apache.activemq.spring.ActiveMQConnectionFactory。

6,配置ActiveMQ的消息目的地


同样使用了ActiveMQ的Spring命名空间来进行配置。

7,到目前为止,我们就可以使用JMS来与ActiveMQ进行消息的发送和接收了。



8,看着代码,是不是有一种似曾相识的感觉?没错,JDBC差不多也是这一套流程,所以自然而然,Spring也为我们提供了JMS Template模板啦!

9,配置Jms Template


10,现在就可以使用Jms Template来进行消息的发送和接收了!

首先注入JmsTemplate实现类JmsOperations


编写代码


大大简化了获取连接一系列的无关操作!

11,配置消息转换器,convertAndSend()和receiveAndConvert()方法都使用到了消息转换器,默认的是SimpleMessageConverter,加入要使用其他的消息转换器,可以自己进行配置,具体的转换器有哪些,请自行查询。这里配置MappingJackson2MessageConverter:


请注意,当使用MappingJackson2MessageConverter时,需要配置两个属性:typeIdMappings、typeIdPropertyName,而且,生产者和消费者都必须配置,但是监听(消费者)没有该配置项,所以使用监听的时候,不能使用MappingJackson2MessageConverter!

12,配置和使用监听器

到这为止,我们的receive()/receiveAndConverter()还是同步的,也就是说他们是阻塞的,他们会一直等待到有消息到达为止,他是同步消息接收,这显然与我们的异步消息有单相悖,我们需要的是当消息来了之后,我们才去获取消息,而没有消息的时候,我们不用去等待。是不是和NIO中的异步类似,所以,自然而然,我们可以想到,JMS中,一定有什么机制来让我们达到异步接收消息的需求。

EJB2规范的一个重要内容是引入了消息驱动bean(Message-Driven bean,简称MDB),MDB是将JMS目的地中的消息作为事件,并对这些事件进行响应。EJB2 MDB的一个缺点是必须实现java.ejb.MessageDrivenBean,还必须实现一个回调方法,并不是纯POJO。

在EJB3中,MDB进一步简化,使其更像POJO,我们不需要实现MessageDrivenBean接口,而是实现更通用的java.jms.MessageListener接口,并使用@MessageDriven注解标注MDB。

Spring2.0提供了它自己的消息驱动bean,与EJB3的MDB很相似。

Spring提供了以POJO的方式处理消息的能力,这些消息来自于JMS的队列或主题。

创建监听器:


配置监听器:


现在就可以使用监听器来进行异步接收消息了!



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值