Spring和Message Bean的整合
在日常的开发中,我们会经常使用MQ异步传递数据。在Java编程中,我们针对MQ使用JMS和Message Driven Bean。在EJB 2.0中引入了Message Bean,这也是EJB 2.0的得意之处,并且备受欢迎。在Spring中,我们引入JmsTemplate简化了MQ的客户操作,可以很方便地发布Message,但是Spring并未提供相关实现Message Bean的例子。如果Spring能够以POJO方式实现Message Bean,那将更加方便。我们知道EJB中的Message Bean虽然简单,但是步骤比较繁杂,你需要实现MessageDrivenBean, MessageListener接口,还需要设置EJB的配置信息等,然后是deploy,搞得很复杂。如果Spring能够提供POJO Message Bean,那就不一样了。你可以使用Spring的各种特性如IoC、AOP等等。在这里我们将Spring下的Message Bean称之为MDP(Message-Driven POJO),这也方便下面的引用。 在进行下一步操作之前,我们需要先进行环境设定,首先需要选择一款消息中间件软件,这里我们选择ActiveMQ。ActiveMQ是一款开源的消息中间件软件,实现了JMS 1.1规范,包含很多的特性,下面就是ActiveMQ的结构图: |
![]() |
同时我们需要使用SpringFramework框架,当前版本为1.2.5。准备好所有的开发包,我们要在IntelliJ IDEA创建一个新的项目,包含一个普通的模块即可,然后设定一下classpath即可,关于项目的详细信息,请下载附件中IntelliJ IDEA项目文件。 MDP的机制很简单,就是完成对指定的Message Queue或Topic的监听,所以我们需要在Spring的配置文件进行设定: 1 设定ConnectionFactory,这里我们采用嵌入式方式运行ActiveMQ: 2 设定MDP,我们只需创建一个普通的JavaBean,然后实现MessageListener,最后在Spring配置文件中进行设定。 3 将MDP和Queue或Topic关联起来,以下是针对ActiveMQ的设定。其中HelloMDP是对MDP名称的引用。 4 设定JmsTemplate,方便JMS客户段操作。 接下来我们需要创建一个Spring的JUnit测试用例,测试我们设定的功能,这里我们只需设定Spring配置文件位置,然后在测试方法中引用JmsTemplate,发送Message进行测试。 当你运行这个测试时,你会发现测试的结果。 总结:通过以上的设定,我们就可以完成Spring下的Message Driven Bean的设定,同EJB的MDB相比,MDP更加简单。在上例中,我们以JVM方式启动ActiveMQ,这对于单个应用(如web应用)是非常实用的,通过这种方式可以异步发送消息,这对应用中异步发送email,特定任务等,这种方式非常简单,原来比较复杂的问题现在可以很快解决啦。 |
原主引用:http://www.jetmaven.net/documents/j_spring_messageBean.php