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框 ...
随机推荐
- 从ListView逐步演变到RecyclerView
ListView是我们开发中最常用的组件之一,在以往的PC端组件开发中,列表控件也是相当重要的,但是从桌面端到移动端,情况又有新的变化. 移动端的屏幕并不像桌面端那么大,并且移动端不可能把所有的内容都 ...
- Sql Server函数全解(二)数学函数
数学函数主要用来处理数值数据,主要的数学函数有:绝对值函数,三角函数(包括正弦函数,余弦函数,正切函数,余切函数).对数函数,随机函数等.在错误产生时,数学函数将返回空值null.本次介绍各种数学 ...
- Linux日志定时清理
linux是一个很能自动产生文件的系统,日志.邮件.备份等.虽然现在硬盘廉价,我们可以有很多硬盘空间供这些文件浪费,让系统定时清理一些不需要的文件很有一种爽快的事情.不用你去每天惦记着是否需要清理日志 ...
- 自定义iOS 中推送消息 提示框
看到标题你可能会觉得奇怪 推送消息提示框不是系统自己弹出来的吗? 为什么还要自己自定义呢? 因为项目需求是这样的:最近需要做 远程推送通知 和一个客服系统 包括店铺客服和官方客服两个模块 如果有新的消 ...
- 【Basics of Entity Framework】【EF基础系列1】
EF自己包括看视频,看MSDN零零散散的学了一点皮毛,这次打算系统学习一下EF.我将会使用VS2012来学习这个EF基础系列. 现在看看EF的历史吧: EF版本 相关版本特性介绍 EF3.5 基于数据 ...
- 自己实现简单的AOP(四)自动初始化代理对象
前面三篇随笔,已经完成了AOP的核心功能,但 代理对象的初始化还是有些麻烦,本文将解决该问题. Demo 片段如下: public class HomeController : Controller ...
- .net源码分析 – Dictionary<TKey, TValue>
接上篇:.net源码分析 – List<T> Dictionary<TKey, TValue>源码地址:https://github.com/dotnet/corefx/blo ...
- 详解Spring框架AOP(面向切面编程)
最近在学习AOP,之前一直很不明白,什么是AOP?为什么要使用AOP,它有什么作用?学完之后有一点小小的感触和自己的理解,所以在这里呢就跟大家一起分享一下 AOP(Aspect-Oriented Pr ...
- C# GDI绘制矩形框,鼠标左键拖动可移动矩形框,滚轮放大缩小矩形框
最近工作需要,要做一个矩形框,并且 用鼠标左键拖动矩形框移动其位置.网上查了一些感觉他们做的挺复杂的.我自己研究一天,做了一个比较简单的,发表出来供大家参考一下.如觉得简单,可路过,谢谢.哈哈. 先大 ...
- 记住 MVC里用formcollection接收form表单传来的值,表单属性必须有name为健!
记住 MVC里用formcollection接收form表单传来的值,input属性必须有name为健! 调了一晚上!! 写个日志记下!!