4、Publisher端(publish.jsp)实现: 在jms-test目录下新建publish.jsp文件:
<%@ page language="java" import="javax.jms.*" pageEncoding="GBK"%> <%@ page language="java" import="javax.naming.*"%> <%@ page language="java" import="org.apache.activemq.ActiveMQConnectionFactory"%>
<% try { InitialContext initCtx = new InitialContext(); Context envContext = (Context) initCtx.lookup("java:comp/env"); ConnectionFactory connectionFactory = (ConnectionFactory) envContext.lookup("jms/NormalConnectionFactory"); Connection connection = connectionFactory.createConnection(); Session jmsSession = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); MessageProducer producer = jmsSession.createProducer((Destination) envContext.lookup("jms/topic/MyTopic"));
//设置持久方式 producer.setDeliveryMode(DeliveryMode.PERSISTENT);
Message testMessage = jmsSession.createMessage(); //发布刷新文章消息 testMessage.setStringProperty("RefreshArticleId", "2046"); producer.send(testMessage); //发布刷新帖子消息 testMessage.clearProperties(); testMessage.setStringProperty("RefreshThreadId", "331"); producer.send(testMessage); } catch (NamingException e) { e.printStackTrace(); } catch (JMSException e) { e.printStackTrace(); } %>
Publisher和Listner之间通过Message的setStringProperty和getStringProperty方法,实现对应的业务逻辑。 上述示例代码中,RefreshArticleId代表刷新某篇文章,RefreshThreadId代表刷新某个帖子,property值保持对应的ID。当然用户可根据实际需求灵活地使用。 5、运行Demo: 5.1 启动ActiveMQ服务器 5.2 启动Tomcat服务器:JMSListener将自动连接ActiveMQ broker,日志信息: Successfully connected to tcp://localhost:61616 5.3 访问http://localhost:8080/jms-test/publish.jsp Tomcat服务器日志将提示: 接收刷新文章消息,开始刷新文章ID=2046 接收刷新论坛帖子消息,开始刷新帖子ID=331 5.4 访问http://localhost:8161/admin/topics.jsp查看MY.TEST.FOO的消息日志,分别发送和接收2条。 至此,已成功完成ActiveMQ与Tomcat的基本整合! Publisher和Listener完全可以独立部署到不同的Web服务器上,并通过ActiveMQ来进行消息传递,实现用户所需的业务逻辑。
测试持久消息的具体步骤: l 启动Publisher所在Web服务器 l 启动ActiveMQ l 访问publish.jsp发送消息,此时Listener还未启动,消息将保存在ActiveMQ的bin\activemq-data目录下,查看日志可以看到发送2条,接收0条 l 启动Listener所在Web服务器,将自动接收到ActiveMQ的持久消息并处理,查看日志:发送2条,接收2条,表明持久消息应用成功! |
Apache ActiveMQ教程(六)
Apache ActiveMQ教程(六)