您的位置:首页 > 编程语言 > Java开发

ActiveMQ JMS Spring的一个实例

2015-11-04 15:25 471 查看
工程目录结构:



applicationContext.xml

[html] view
plaincopy

<?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

[java] view
plaincopy

/*

* @(#) 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

[java] view
plaincopy

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();

}

}

}

}

SendMessageController.java

[java] view
plaincopy

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

[html] view
plaincopy

<%@ 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>

success.jsp

[html] view
plaincopy

<%@ 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

[html] view
plaincopy

<?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

[java] view
plaincopy

/*

* @(#) 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();

}

}

}

发送消息之前,先运行该消费者程序:



消息发送后(提交发送按钮后):



总结:不想写啊!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  jms mq