工程目录结构:
MessageSender.java
ReceiveMessageListener,java
SendMessageController.java
success.jsp
applicationContext.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:p="http://www.springframework.org/schema/p" xmlns:aop="http://www.springframework.org/schema/aop"
- xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
- http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
- http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
- http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"
- default-lazy-init="false">
- <!-- 开启包的自动扫描,手工注解方式交由spring管理 -->
- <context:annotation-config />
- <context:component-scan base-package="com.travelsky.jms.service" />
- <bean id="listenerContainer" class="org.springframework.jms.listener.SimpleMessageListenerContainer">
- <property name="connectionFactory" ref="connectionFactory" ></property>
- <property name="destination" ref="destination"></property>
- <property name="messageListener" ref="messageListener"></property>
- </bean>
- <!-- 配置JMS连接工厂 -->
- <bean id="connectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
- <property name="brokerURL" value="tcp://localhost:61616"></property>
- </bean>
- <!-- 发送消息的目的地(一个队列) -->
- <bean id="destination" class="org.apache.activemq.command.ActiveMQTopic">
- <!-- 构造函数传入消息队列的名字 -->
- <constructor-arg index="0" value="message" />
- </bean>
- <!-- 消息监听处理 -->
- <!--
- <bean id="messageListener" class="com.travelsky.jms.service.ReceiveMessageListener"></bean>
- -->
- <!-- 配置JMS模版 -->
- <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
- <property name="connectionFactory" ref="connectionFactory"></property>
- <property name="defaultDestination" ref="destination"></property>
- </bean><!--
- <bean id="messageSender" class="com.travelsky.jms.service.MessageSender">
- <property name="jmsTemplate" ref="jmsTemplate"></property>
- </bean>
- --><bean id="sendMessageController"
- class="com.travelsky.jms.service.SendMessageController">
- <property name="messageSender" ref="messageSender" />
- <property name="successView" value="/success" />
- </bean>
- <bean id="urlMapping"
- class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
- <property name="mappings">
- <props>
- <prop key="/sendMessage.do">sendMessageController</prop>
- </props>
- </property>
- </bean>
- <bean id="viewResolver"
- class="org.springframework.web.servlet.view.InternalResourceViewResolver">
- <property name="requestContextAttribute" value="rc" />
- <property name="viewClass"
- value="org.springframework.web.servlet.view.JstlView" />
- <property name="prefix" value="/" />
- <property name="suffix" value=".jsp" />
- </bean>
- </beans>
MessageSender.java
- /*
- * @(#) MessageSender.java
- * @Author:Administrator(mail) 2013-10-2
- * @Copyright (c) 2002-2013 Travelsky Limited. All rights reserved.
- */
- package com.travelsky.jms.service;
- import javax.annotation.Resource;
- import javax.jms.JMSException;
- import javax.jms.Message;
- import javax.jms.Session;
- import javax.jms.TextMessage;
- import org.apache.log4j.Logger;
- import org.springframework.jms.core.JmsTemplate;
- import org.springframework.jms.core.MessageCreator;
- import org.springframework.stereotype.Service;
- @Service("messageSender")
- public class MessageSender {
- public MessageSender(){
- System.out.println("messageSender is constructor...");
- }
- private static final Logger LOG = Logger.getLogger(MessageSender.class);
- @Resource private JmsTemplate jmsTemplate;
- public void sendMessage(final String message) {
- System.out.println("Send message: " + message);
- jmsTemplate.send(new MessageCreator() {
- public Message createMessage(Session session) throws JMSException {
- TextMessage textMessage = session.createTextMessage(message);
- return textMessage;
- }
- });
- }
- }
ReceiveMessageListener,java
- package com.travelsky.jms.service;
- import javax.jms.JMSException;
- import javax.jms.Message;
- import javax.jms.MessageListener;
- import javax.jms.TextMessage;
- import org.apache.log4j.Logger;
- import org.springframework.stereotype.Service;
- @Service("messageListener")
- public class ReceiveMessageListener implements MessageListener {
- public ReceiveMessageListener(){
- System.out.println("ReceiveMessageListener...");
- }
- private static final Logger LOG = Logger.getLogger(ReceiveMessageListener.class);
- public void onMessage(Message message) {
- if (message instanceof TextMessage) {
- TextMessage text = (TextMessage) message;
- try {
- System.out.println("Received message:" + text.getText()+this);
- } catch (JMSException e) {
- e.printStackTrace();
- }
- }
- }
- }
- package com.travelsky.jms.service;
- import java.util.HashMap;
- import java.util.Map;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import org.springframework.web.servlet.ModelAndView;
- import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
- public class SendMessageController extends MultiActionController {
- private String successView;
- private MessageSender messageSender;
- public ModelAndView sendMessage(HttpServletRequest request,
- HttpServletResponse response) throws Exception {
- Map<String, Object> retMap = new HashMap<String, Object>();
- String message = request.getParameter("message");
- messageSender.sendMessage(message);
- return new ModelAndView(successView, retMap);
- }
- public String getSuccessView() {
- return successView;
- }
- public void setSuccessView(String successView) {
- this.successView = successView;
- }
- public MessageSender getMessageSender() {
- return messageSender;
- }
- public void setMessageSender(MessageSender messageSender) {
- this.messageSender = messageSender;
- }
- }
index,jsp
- <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
- <%
- String path = request.getContextPath();
- String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
- %>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <base href="<%=basePath%>">
- <title>My JSP 'index.jsp' starting page</title>
- <meta http-equiv="pragma" content="no-cache">
- <meta http-equiv="cache-control" content="no-cache">
- <meta http-equiv="expires" content="0">
- <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
- <meta http-equiv="description" content="This is my page">
- <!--
- <link rel="stylesheet" type="text/css" href="styles.css" mce_href="styles.css">
- -->
- </head>
- <body>
- <div align="center"
- style="width: 500px; height: 300px; border: 2px; borderColor: black">
- <form action="sendMessage.do" method="post">
- <table align="center">
- <tr>
- <th colspan="2">消息发送控制台</th>
- </tr>
- <tr>
- <td>消息内容:</td>
- <td><input type="text" name="message"></td>
- </tr>
- <tr>
- <td align="center" colspan="2"><input type="reset" value="清除">
- <input type="submit" value="发送"></td>
- </tr>
- </table>
- </form>
- </div>
- </body>
- </html>
- <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
- <%
- String path = request.getContextPath();
- String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
- %>
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
- <html>
- <head>
- <base href="<%=basePath%>">
- <title>My JSP 'index.jsp' starting page</title>
- <meta http-equiv="pragma" content="no-cache">
- <meta http-equiv="cache-control" content="no-cache">
- <meta http-equiv="expires" content="0">
- <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
- <meta http-equiv="description" content="This is my page">
- <!--
- <link rel="stylesheet" type="text/css" href="styles.css" mce_href="styles.css">
- -->
- </head>
- <body>
- <div align="center"
- style="width: 500px; height: 300px; border: 2px; borderColor: black">
- <form action="sendMessage.do" method="post">
- <table align="center">
- <tr>
- <th colspan="2">消息发送报告</th>
- </tr>
- <tr>
- <td colspan="2">状态:发送成功</td>
- </tr>
- <tr>
- <td align="center" colspan="2"><a href="index.jsp"
- mce_href="index.jsp">返回</a></td>
- </tr>
- </table>
- </form>
- </div>
- </body>
- </html>
web.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
- <display-name>WebMQ01</display-name>
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>
- classpath:applicationContext.xml
- </param-value>
- </context-param>
- <listener>
- <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
- </listener>
- <servlet>
- <servlet-name>controller</servlet-name>
- <servlet-class>
- org.springframework.web.servlet.DispatcherServlet
- </servlet-class>
- <init-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>
- classpath:applicationContext.xml
- </param-value>
- </init-param>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>controller</servlet-name>
- <url-pattern>*.do</url-pattern>
- </servlet-mapping>
- <welcome-file-list>
- <welcome-file>index.html</welcome-file>
- <welcome-file>index.htm</welcome-file>
- <welcome-file>index.jsp</welcome-file>
- <welcome-file>default.html</welcome-file>
- <welcome-file>default.htm</welcome-file>
- <welcome-file>default.jsp</welcome-file>
- </welcome-file-list>
- </web-app>
访问:http://localhost:8080/WebMQ1/index.jsp
点击发送:
控制台:
这个是通过监听方式获取到的消息,由于本例子程序是Topic通信(发布者/订阅者),所以也可以通过其他的客户端(消费者)获取消息:
Receiver2.java
- /*
- * @(#) Receiver.java
- * @Author:Administrator(mail) 2013-9-29
- * @Copyright (c) 2002-2013 Travelsky Limited. All rights reserved.
- */
- package com.travelsky.jms.service;
- import javax.jms.Connection;
- import javax.jms.ConnectionFactory;
- import javax.jms.Destination;
- import javax.jms.JMSException;
- import javax.jms.MessageConsumer;
- import javax.jms.Session;
- import javax.jms.TextMessage;
- import org.apache.activemq.ActiveMQConnectionFactory;
- /**
- * @author Administrator(mail) 2013-9-29
- * @version 1.0
- * @Function 类功能说明
- */
- public class Receiver2 {
- public static void main(String[] args) {
- ConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");
- try {
- //为什么不用密码也可以获取消息
- Connection connection = factory.createConnection();
- connection.start();
- Session session = connection.createSession(Boolean.TRUE, Session.AUTO_ACKNOWLEDGE);
- Destination destination = session.createTopic("message");
- MessageConsumer receiver = session.createConsumer(destination);
- System.out.println("receive...");
- TextMessage message = (TextMessage) receiver.receive();
- String content = message.getText();
- System.out.println(content);
- session.commit();
- session.close();
- connection.close();
- } catch (JMSException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
发送消息之前,先运行该消费者程序:
消息发送后(提交发送按钮后):
总结:不想写啊!