一、项目简介
该工程基于 ActiveMQ 消息中间件实现JMS消息服务,通过Spring的org.springframework.jms.core.JmsTemplate(org.springframework.jms-3.0.0.RELEASE.jar)实现消息发送和接受操作,项目截图如下,项目GitHub分享地址https://github.com/xwooduser/JmsSpring.git
二、代码快照
1. spring配置文件,端口9999对应ActiveMQ配置文件conf/activemq.xml中transportConnector的配置端口(这边配置online.xwood.net:9999端口根据实际就行修改)
<?xml version="1.0" encoding="UTF-8"?>@b@<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">@b@<beans>@b@ <bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">@b@ <property name="brokerURL">@b@ <value>tcp://online.xwood.net:9999?wireFormat.maxInactivityDuration=0</value>@b@ </property>@b@ </bean>@b@ @b@ <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">@b@ <property name="connectionFactory">@b@ <ref bean="connectionFactory"/>@b@ </property>@b@ </bean>@b@ @b@ <bean id="messageQueue" class="org.apache.activemq.command.ActiveMQQueue">@b@ <constructor-arg index="0">@b@ <value>MessageQueue</value>@b@ </constructor-arg>@b@ </bean>@b@</beans>
2. 消息发送类MessageSender,代码如下
import javax.jms.Destination;@b@import org.springframework.jms.core.JmsTemplate;@b@import spring.SpringBean;@b@@b@public class MessageSender{@b@ @b@ /**获取注册到spring的jms实现容器对象*/@b@ private static JmsTemplate jms_container = (JmsTemplate) SpringBean.getBean("jmsTemplate");@b@ /**获取注册到spring的activeMQ的客户端调用对象*/@b@ private static Destination activeMQ_cache = (Destination) SpringBean.getBean("messageQueue");@b@ @b@ public static void main(String[] args) throws Exception{@b@ System.out.println("发送消息至messageQueue中...");@b@ for (int i = 1; i < 10; i++) {@b@ System.out.println("ping..."+i);@b@ jms_container.send(activeMQ_cache, new MyMessageCreator(i));@b@ Thread.sleep(1000);@b@ }@b@ }@b@@b@}
项目测试之前,请先下载安装配置运行ActiveMQ,运行测试控制打印结果如下
发送消息至messageQueue中...@b@ping...1@b@ping...2@b@ping...3@b@ping...4@b@ping...5@b@ping...6@b@ping...7@b@ping...8@b@ping...9
这是查看管理后台点击预览(admin/admin),可以看到9条未消费的消息,如下图所示
3. 消息接受类MessageReciver,代码如下
import javax.jms.Destination;@b@import javax.jms.TextMessage;@b@import org.springframework.jms.core.JmsTemplate;@b@import spring.SpringBean;@b@@b@public class MessageReciver {@b@ @b@ /**获取注册到spring的jms实现容器对象*/@b@ private static JmsTemplate jms_container = (JmsTemplate) SpringBean.getBean("jmsTemplate");@b@ /**获取注册到spring的activeMQ的客户端调用对象*/@b@ private static Destination activeMQ_cache = (Destination) SpringBean.getBean("messageQueue");@b@ @b@ public static void main(String args[]) throws Exception {@b@ System.out.println("获取ActiveMQ中的收到的消息...");@b@ while (true) {@b@ TextMessage msg = (TextMessage) jms_container.receive(activeMQ_cache);@b@ System.out.println("收到消息 :" + msg.getText());@b@ if (msg.getText().equals(MyMessageCreator.END_TAG)) @b@ break;@b@ @b@ }@b@ }@b@}
运行后,控制台打印如下
获取ActiveMQ中的收到的消息...@b@收到消息 :这个是第 1 个测试消息!@b@收到消息 :这个是第 2 个测试消息!@b@收到消息 :这个是第 3 个测试消息!@b@收到消息 :这个是第 4 个测试消息!@b@收到消息 :这个是第 5 个测试消息!@b@收到消息 :这个是第 6 个测试消息!@b@收到消息 :这个是第 7 个测试消息!@b@收到消息 :这个是第 8 个测试消息!@b@收到消息 :end
这是9条消息被消费掉,如下图