java实现基于activeMQ的消息推送
此文章是基于 搭建Jquery+SpringMVC+Spring+Hibernate+MySQL平台
一. jar包介绍
1. 点击此下载 apache-activemq-5.3.0,得到:
activemq-all-5.3.0.jar
activemq-web-5.3.0.jar
2. spring-framework-4.3.4.RELEASE 的 libs 文件夹下得到:
spring-jms-4.3.4.RELEASE.jar
二. 相关程序代码
1. applicationInterface.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:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop"
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.1.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd"> <!-- vm: 表示客户端和activeMQ代理在同一个Java虚拟机(VM)中运行 -->
<bean id="jmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="vm://localhost?broker.persistent=false&broker.useJmx=false" />
</bean> <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="jmsConnectionFactory" />
<property name="receiveTimeout" value="60000" />
</bean> <!-- 消息队列,表示是点到点(P2P)消息通讯模型 -->
<bean id="msgQueue" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg index="0" value="msgQueue" />
</bean> <!-- 消息发送端 -->
<bean id="jmsSender"
class="com.ims.interfaces.jms.activeMQ.JmsSenderImpl">
<property name="jmsTemplate" ref="jmsTemplate" />
<property name="msgQueue" ref="msgQueue"/>
</bean> <!-- 消息异步接收端-->
<bean id="msgListenerContainer"
class="org.springframework.jms.listener.SimpleMessageListenerContainer">
<property name="connectionFactory" ref="jmsConnectionFactory" />
<property name="destination" ref="msgQueue" />
<property name="messageListener" ref="msgListener"/>
</bean> <!-- 消息监听、执行器 -->
<bean id="msgListener"
class="com.ims.interfaces.jms.activeMQ.MsgListener">
</bean> </beans>
2. JmsSender.java,消息发送器接口
package com.ims.interfaces.jms.activeMQ;
public interface JmsSender {
public void send(final MsgContext context);
}
3. JmsSenderImpl.java,消息发送器实现
package com.ims.interfaces.jms.activeMQ; import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.ObjectMessage;
import javax.jms.Session; import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator; public class JmsSenderImpl implements JmsSender{
private JmsTemplate jmsTemplate; /**
* 消息通告队列,表示点到点通讯模型
*/
private Destination msgQueue; /**
* 发送消息
* @param context 消息上下文
*/
public void send(final MsgContext context) {
getJmsTemplate().send(getMsgQueue(), new MessageCreator() {
public Message createMessage(Session session) throws JMSException {
final ObjectMessage message = session.createObjectMessage();
message.setObject(context);
return message;
}
});
} public JmsTemplate getJmsTemplate() {
return jmsTemplate;
}
public void setJmsTemplate(JmsTemplate jmsTemplate) {
this.jmsTemplate = jmsTemplate;
} public Destination getMsgQueue() {
return msgQueue;
}
public void setMsgQueue(Destination msgQueue) {
this.msgQueue = msgQueue;
} }
4. MsgContext.java,消息上下文类
package com.ims.interfaces.jms.activeMQ; import java.io.Serializable;
import java.util.Collection; public class MsgContext implements Serializable{ private static final long serialVersionUID = -7877770277875813295L; /**
* 消息接收者
*/
private final Collection<String> users; /**
* 发送的消息
*/
private final String message; /**
* 发送的方式
*/
private final Collection<String> modes; public MsgContext(Collection<String> users, String message,
Collection<String> modes){
this.users = users;
this.message = message;
this.modes = modes;
} public Collection<String> getUsers() {
return users;
} public String getMessage() {
return message;
} public Collection<String> getModes() {
return modes;
}
}
5. MsgListener.java,消息监听、执行器
package com.ims.interfaces.jms.activeMQ; import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.ObjectMessage; import org.springframework.jms.support.JmsUtils; public class MsgListener implements MessageListener{ /**
* 监听到有消息时,执行的操作
* @param msg 消息对象
*/
@Override
public void onMessage(Message message) {
if(message == null) { return; }
// 获取对象消息
final ObjectMessage objectMessage = (ObjectMessage) message; // 消息上下文
MsgContext context = null; try {
// 从对象消息中获取消息上下文对象
context = (MsgContext) objectMessage.getObject();
}catch (JMSException e) {
JmsUtils.convertJmsAccessException(e);
return;
} System.out.println(context.getMessage());
if(context==null || context.getModes()==null || context.getModes().size()==0){
return;
} // 取到消息上下文后,可执行自定义操作
} }
6. TestController.java,测试jms消息发送
package com.ims.web.controller; import java.util.Collection;
import java.util.HashSet; import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView; import com.ims.common.ServiceLocator;
import com.ims.interfaces.jms.activeMQ.JmsSender;
import com.ims.interfaces.jms.activeMQ.MsgContext; @Controller
@RequestMapping("test")
public class TestController extends BaseController{ @RequestMapping("view")
public ModelAndView test(){
ModelAndView view = new ModelAndView("test.jsp");
return view;
} @RequestMapping("jms!send")
public void send(@RequestParam String msg){
JmsSender jmsSender = ServiceLocator.getService("jmsSender");
Collection<String> users = new HashSet<String>();
Collection<String> modes = new HashSet<String>();
MsgContext msgContext = new MsgContext(users, msg, modes);
jmsSender.send(msgContext);
}
}
7. jms.jsp,测试jms消息发送
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>测试</title>
<%@ include file="/common/basePath.jsp"%>
</head>
<body>
~~~~~~~~~~~~~~~~~~~~~~jms消息发送~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<br><br>
消息: <input type="text" name="msg" id="msg">
<br><br>
<button type="button" onclick="send();">发送</button> <script type="text/javascript" src="content/js/jquery/jquery-1.8.1.min.js"></script>
<script type="text/javascript">
function send(){
$.ajax({
url:rootPath+"/test/jms!send.do?msg="+$('#msg').val(),
async:false
});
}
</script>
</body>
</html>
三. 测试
1. 访问:http://localhost:8080/ims/test/jms.do

2. 输入消息内容,点击发送,MsgListener 类会在后台输出消息内容
java实现基于activeMQ的消息推送的更多相关文章
- 基于SignalR的消息推送与二维码描登录实现
1 概要说明 使用微信扫描登录相信大家都不会陌生吧,二维码与手机结合产生了不同应用场景,基于二维码的应用更是比较广泛.为了满足ios.android客户端与web短信平台的结合,特开发了基于Singl ...
- Android 基于Netty的消息推送方案之对象的传递(四)
在上一篇文章中<Android 基于Netty的消息推送方案之字符串的接收和发送(三)>我们介绍了Netty的字符串传递,我们知道了Netty的消息传递都是基于流,通过ChannelBuf ...
- Android 基于Netty的消息推送方案之字符串的接收和发送(三)
在上一篇文章中<Android 基于Netty的消息推送方案之概念和工作原理(二)> ,我们介绍过一些关于Netty的概念和工作原理的内容,今天我们先来介绍一个叫做ChannelBuffe ...
- Android 基于Netty的消息推送方案之概念和工作原理(二)
上一篇文章中我讲述了关于消息推送的方案以及一个基于Netty实现的一个简单的Hello World,为了更好的理解Hello World中的代码,今天我来讲解一下关于Netty中一些概念和工作原理的内 ...
- Knative 实战:基于 Kafka 实现消息推送
作者 | 元毅 阿里云智能事业群高级开发工程师 导读:当前在 Knative 中已经提供了对 Kafka 事件源的支持,那么如何基于 Kafka 实现消息推送呢?本文作者将以阿里云 Kafka 产品为 ...
- Android 基于Netty的消息推送方案之Hello World(一)
消息推送方案(轮询.长连接) 轮询 轮询:比较简单的,最容易理解和实现的就是客户端去服务器上拉信息,信息的及时性要求越高则拉信息的频率越高.客户端拉信息的触发可以是一些事件,也可以是一个定时器,不断地 ...
- Java企业微信开发_05_消息推送之发送消息(主动)
一.本节要点 1.发送消息与被动回复消息 (1)流程不同:发送消息是第三方服务器主动通知微信服务器向用户发消息.而被动回复消息是 用户发送消息之后,微信服务器将消息传递给 第三方服务器,第三方服务器接 ...
- Java企业微信开发_04_消息推送之发送消息(主动)
源码请见: Java企业微信开发_00_源码及资源汇总贴 一.本节要点 1.发送消息与被动回复消息 (1)流程不同:发送消息是第三方服务器主动通知微信服务器向用户发消息.而被动回复消息是 用户发送消息 ...
- 基于FCM的消息推送功能
需求背景 我方项目需要支持客户端消息推送,iOS终端可以借由苹果本身的apns很方便的实现,但是对于Android来说,必须集成第三方的SDK来处理.考虑到项目需要以及成本,我们选择使用谷歌的FCM框 ...
随机推荐
- PHP中常见魔术方法解析
<?php class info { private $province; //省 public $city; //城市 private $myname; //姓名 //__construct( ...
- Windows Phone 的 TextBox 的实现 PropertyChanged
比如,View 的文本框 TextBox1 绑定了 ViewModel 的 Msg 属性, 当想把文本框输入的内容输入过程中实时更新到绑定的 Msg ,在Windows Phone 中是无法通过设置 ...
- 第0/24周 SQL Server 性能调优培训引言
大家好,这是我在博客园写的第一篇博文,之所以要开这个博客,是我对MS SQL技术学习的一个兴趣记录. 作为计算机专业毕业的人,自己对技术的掌握总是觉得很肤浅,博而不专,到现在我才发现自己的兴趣所在,于 ...
- 细说Cookie
阅读目录 开始 Cookie 概述 Cookie的写.读过程 使用Cookie保存复杂对象 Js中读写Cookie Cookie在Session中的应用 Cookie在身份验证中的应用 Cookie的 ...
- iOS 视图与视图层次结构(内容根据iOS编程)
视图基础 视图是 UIView 对象,或者其子对象. 视图知道如何绘制自己. 视图可以处理事件,例如触摸(touch). 视图会按照层次结构排列,位于视图层次结构顶端的是应用窗口. 视图层次结构 任何 ...
- Winform分页控件
设计界面: 控件代码: using System; using System.Collections.Generic; using System.ComponentModel; using Syste ...
- jquery 和 css 属性
offset()获取标签离左上角的位置,离顶部和左部的距离.离整个屏幕的左上角的距离. position() 相对于某一个标签的位置.离父标签的距离.离父标签的左上角的距离. height(), wi ...
- java.lang.Exception: Could not determine the type of file "smb://zhangsan:123456@10.77.44.222/o/mmfiles_2016/40094/25556/2130.avi".
1. 使用smb协议上传文件 报上述错误 2. 解决方法 开启administrator超级管理员 smb地址改为smb://administrator:123456@10.10.10.10/o/.. ...
- java web学习总结(十二) -------------------Session
一.Session简单介绍 在WEB开发中,服务器可以为每个用户浏览器创建一个会话对象(session对象),注意:一个浏览器独占一个session对象(默认情况下).因此,在需要保存用户数据时,服务 ...
- 变通实现微服务的per request以提高IO效率
*:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: 0 !important; } /* ...