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框 ...
随机推荐
- js构建ui的统一异常处理方案(一)
从早期从事基于java的服务器端开发,再到之后从事基于web和js的ui开发,总体感觉基于web页面的ui开发远不如服务器端健壮.主要是早期ie浏览器功能太弱小,很多业务被迫放到服务器端去实现,浏览器 ...
- 在Pycharm中使用GitHub
Pycharm是当前进行python开发,尤其是Django开发最好的IDE.GitHub是程序员的圣地,几乎人人都在用. 本文假设你对pycharm和github都有一定的了解,并且希望在pycha ...
- 代码片段添加智能提示,打造一款人见人爱的ORM框架
SqlSugar ORM优点: 1.高性能,达到原生最高水准,比SqlHelper性能要高,比Dapper快30% 比EF快50% 2.支持多种数据库 ,sql版本更新最快,其它会定期更新,可以在多种 ...
- npm包与gem包--在线&离线安装
目录 NPM 在线 离线 GEM 在线 离线 NPM NPM,即为Node的包管理工具,官网为 https://www.npmjs.com/,我们可以在站内搜索所需要的NPM包,了解相关的使用规则 安 ...
- TeamCity : 安装 Server
本文介绍在 Ubuntu Server 14.04 中安装 TeamCity Server 10.0.1.Ubuntu Server 上已经创建了用户 tcuser.TeamCity 的安装包为 T ...
- 模仿迅L看看<音频播放器> 实现点击进度条,跳转播放
<Style x:Key="btnFallback" TargetType="{x:Type Button}"> <Setter Proper ...
- 增加线程异步发送消息的方法二(Runnable)
//获取当前时间:毫秒 long a = System.currentTimeMillis(); System.out.println("a :" + a); try { //更改 ...
- 如何实现在PHP中调用JAVA
详细说明:http://php.662p.com/thread-275-1-1.html PHP与JAVA JAVA是个非常强大的编程利器,它的扩展库也是非常的有用,这篇教程,主要讲述怎样使用PHP调 ...
- Spring学习系列(二) 自动化装配Bean
一.Spring装配-自动化装配 @Component和@ComponentScan 通过spring注解(@Component)来表明该类会作为组件类,并告知Spring要为这类创建bean,不过组 ...
- Longest Substring Without Repeating Characters(C语言实现)
Given a string, find the length of the longest substring without repeating characters. Examples: Giv ...