此文章是基于  搭建Jquery+SpringMVC+Spring+Hibernate+MySQL平台

一. jar包介绍

  1. 点击此下载 apache-activemq-5.3.0,得到:

  1. activemq-all-5.3.0.jar
  2. activemq-web-5.3.0.jar

  2. spring-framework-4.3.4.RELEASE 的 libs 文件夹下得到:

  1. spring-jms-4.3.4.RELEASE.jar

二. 相关程序代码

  1. applicationInterface.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
  6. http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
  7. http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
  8. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">
  9.  
  10. <!-- vm: 表示客户端和activeMQ代理在同一个Java虚拟机(VM)中运行 -->
  11. <bean id="jmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
  12. <property name="brokerURL" value="vm://localhost?broker.persistent=false&amp;broker.useJmx=false" />
  13. </bean>
  14.  
  15. <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
  16. <property name="connectionFactory" ref="jmsConnectionFactory" />
  17. <property name="receiveTimeout" value="60000" />
  18. </bean>
  19.  
  20. <!-- 消息队列,表示是点到点(P2P)消息通讯模型 -->
  21. <bean id="msgQueue" class="org.apache.activemq.command.ActiveMQQueue">
  22. <constructor-arg index="0" value="msgQueue" />
  23. </bean>
  24.  
  25. <!-- 消息发送端 -->
  26. <bean id="jmsSender"
  27. class="com.ims.interfaces.jms.activeMQ.JmsSenderImpl">
  28. <property name="jmsTemplate" ref="jmsTemplate" />
  29. <property name="msgQueue" ref="msgQueue"/>
  30. </bean>
  31.  
  32. <!-- 消息异步接收端-->
  33. <bean id="msgListenerContainer"
  34. class="org.springframework.jms.listener.SimpleMessageListenerContainer">
  35. <property name="connectionFactory" ref="jmsConnectionFactory" />
  36. <property name="destination" ref="msgQueue" />
  37. <property name="messageListener" ref="msgListener"/>
  38. </bean>
  39.  
  40. <!-- 消息监听、执行器 -->
  41. <bean id="msgListener"
  42. class="com.ims.interfaces.jms.activeMQ.MsgListener">
  43. </bean>
  44.  
  45. </beans>

  2. JmsSender.java,消息发送器接口

  1. package com.ims.interfaces.jms.activeMQ;
  2.  
  3. public interface JmsSender {
  4. public void send(final MsgContext context);
  5. }

  3. JmsSenderImpl.java,消息发送器实现

  1. package com.ims.interfaces.jms.activeMQ;
  2.  
  3. import javax.jms.Destination;
  4. import javax.jms.JMSException;
  5. import javax.jms.Message;
  6. import javax.jms.ObjectMessage;
  7. import javax.jms.Session;
  8.  
  9. import org.springframework.jms.core.JmsTemplate;
  10. import org.springframework.jms.core.MessageCreator;
  11.  
  12. public class JmsSenderImpl implements JmsSender{
  13. private JmsTemplate jmsTemplate;
  14.  
  15. /**
  16. * 消息通告队列,表示点到点通讯模型
  17. */
  18. private Destination msgQueue;
  19.  
  20. /**
  21. * 发送消息
  22. * @param context 消息上下文
  23. */
  24. public void send(final MsgContext context) {
  25. getJmsTemplate().send(getMsgQueue(), new MessageCreator() {
  26. public Message createMessage(Session session) throws JMSException {
  27. final ObjectMessage message = session.createObjectMessage();
  28. message.setObject(context);
  29. return message;
  30. }
  31. });
  32. }
  33.  
  34. public JmsTemplate getJmsTemplate() {
  35. return jmsTemplate;
  36. }
  37. public void setJmsTemplate(JmsTemplate jmsTemplate) {
  38. this.jmsTemplate = jmsTemplate;
  39. }
  40.  
  41. public Destination getMsgQueue() {
  42. return msgQueue;
  43. }
  44. public void setMsgQueue(Destination msgQueue) {
  45. this.msgQueue = msgQueue;
  46. }
  47.  
  48. }

  4. MsgContext.java,消息上下文类

  1. package com.ims.interfaces.jms.activeMQ;
  2.  
  3. import java.io.Serializable;
  4. import java.util.Collection;
  5.  
  6. public class MsgContext implements Serializable{
  7.  
  8. private static final long serialVersionUID = -7877770277875813295L;
  9.  
  10. /**
  11. * 消息接收者
  12. */
  13. private final Collection<String> users;
  14.  
  15. /**
  16. * 发送的消息
  17. */
  18. private final String message;
  19.  
  20. /**
  21. * 发送的方式
  22. */
  23. private final Collection<String> modes;
  24.  
  25. public MsgContext(Collection<String> users, String message,
  26. Collection<String> modes){
  27. this.users = users;
  28. this.message = message;
  29. this.modes = modes;
  30. }
  31.  
  32. public Collection<String> getUsers() {
  33. return users;
  34. }
  35.  
  36. public String getMessage() {
  37. return message;
  38. }
  39.  
  40. public Collection<String> getModes() {
  41. return modes;
  42. }
  43. }

  5. MsgListener.java,消息监听、执行器

  1. package com.ims.interfaces.jms.activeMQ;
  2.  
  3. import javax.jms.JMSException;
  4. import javax.jms.Message;
  5. import javax.jms.MessageListener;
  6. import javax.jms.ObjectMessage;
  7.  
  8. import org.springframework.jms.support.JmsUtils;
  9.  
  10. public class MsgListener implements MessageListener{
  11.  
  12. /**
  13. * 监听到有消息时,执行的操作
  14. * @param msg 消息对象
  15. */
  16. @Override
  17. public void onMessage(Message message) {
  18. if(message == null) { return; }
  19. // 获取对象消息
  20. final ObjectMessage objectMessage = (ObjectMessage) message;
  21.  
  22. // 消息上下文
  23. MsgContext context = null;
  24.  
  25. try {
  26. // 从对象消息中获取消息上下文对象
  27. context = (MsgContext) objectMessage.getObject();
  28. }catch (JMSException e) {
  29. JmsUtils.convertJmsAccessException(e);
  30. return;
  31. }
  32.  
  33. System.out.println(context.getMessage());
  34. if(context==null || context.getModes()==null || context.getModes().size()==0){
  35. return;
  36. }
  37.  
  38. // 取到消息上下文后,可执行自定义操作
  39. }
  40.  
  41. }

  6. TestController.java,测试jms消息发送

  1. package com.ims.web.controller;
  2.  
  3. import java.util.Collection;
  4. import java.util.HashSet;
  5.  
  6. import org.springframework.stereotype.Controller;
  7. import org.springframework.web.bind.annotation.RequestMapping;
  8. import org.springframework.web.bind.annotation.RequestParam;
  9. import org.springframework.web.servlet.ModelAndView;
  10.  
  11. import com.ims.common.ServiceLocator;
  12. import com.ims.interfaces.jms.activeMQ.JmsSender;
  13. import com.ims.interfaces.jms.activeMQ.MsgContext;
  14.  
  15. @Controller
  16. @RequestMapping("test")
  17. public class TestController extends BaseController{
  18.  
  19. @RequestMapping("view")
  20. public ModelAndView test(){
  21. ModelAndView view = new ModelAndView("test.jsp");
  22. return view;
  23. }
  24.  
  25. @RequestMapping("jms!send")
  26. public void send(@RequestParam String msg){
  27. JmsSender jmsSender = ServiceLocator.getService("jmsSender");
  28. Collection<String> users = new HashSet<String>();
  29. Collection<String> modes = new HashSet<String>();
  30. MsgContext msgContext = new MsgContext(users, msg, modes);
  31. jmsSender.send(msgContext);
  32. }
  33. }

  7. jms.jsp,测试jms消息发送

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
  2. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
  3. <html>
  4. <head>
  5. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  6. <title>测试</title>
  7. <%@ include file="/common/basePath.jsp"%>
  8. </head>
  9. <body>
  10. ~~~~~~~~~~~~~~~~~~~~~~jms消息发送~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  11. <br><br>
  12. 消息: <input type="text" name="msg" id="msg">
  13. <br><br>
  14. <button type="button" onclick="send();">发送</button>
  15.  
  16. <script type="text/javascript" src="content/js/jquery/jquery-1.8.1.min.js"></script>
  17. <script type="text/javascript">
  18. function send(){
  19. $.ajax({
  20. url:rootPath+"/test/jms!send.do?msg="+$('#msg').val(),
  21. async:false
  22. });
  23. }
  24. </script>
  25. </body>
  26. </html>

三. 测试

  1. 访问:http://localhost:8080/ims/test/jms.do

  2. 输入消息内容,点击发送,MsgListener 类会在后台输出消息内容

java实现基于activeMQ的消息推送的更多相关文章

  1. 基于SignalR的消息推送与二维码描登录实现

    1 概要说明 使用微信扫描登录相信大家都不会陌生吧,二维码与手机结合产生了不同应用场景,基于二维码的应用更是比较广泛.为了满足ios.android客户端与web短信平台的结合,特开发了基于Singl ...

  2. Android 基于Netty的消息推送方案之对象的传递(四)

    在上一篇文章中<Android 基于Netty的消息推送方案之字符串的接收和发送(三)>我们介绍了Netty的字符串传递,我们知道了Netty的消息传递都是基于流,通过ChannelBuf ...

  3. Android 基于Netty的消息推送方案之字符串的接收和发送(三)

    在上一篇文章中<Android 基于Netty的消息推送方案之概念和工作原理(二)> ,我们介绍过一些关于Netty的概念和工作原理的内容,今天我们先来介绍一个叫做ChannelBuffe ...

  4. Android 基于Netty的消息推送方案之概念和工作原理(二)

    上一篇文章中我讲述了关于消息推送的方案以及一个基于Netty实现的一个简单的Hello World,为了更好的理解Hello World中的代码,今天我来讲解一下关于Netty中一些概念和工作原理的内 ...

  5. Knative 实战:基于 Kafka 实现消息推送

    作者 | 元毅 阿里云智能事业群高级开发工程师 导读:当前在 Knative 中已经提供了对 Kafka 事件源的支持,那么如何基于 Kafka 实现消息推送呢?本文作者将以阿里云 Kafka 产品为 ...

  6. Android 基于Netty的消息推送方案之Hello World(一)

    消息推送方案(轮询.长连接) 轮询 轮询:比较简单的,最容易理解和实现的就是客户端去服务器上拉信息,信息的及时性要求越高则拉信息的频率越高.客户端拉信息的触发可以是一些事件,也可以是一个定时器,不断地 ...

  7. Java企业微信开发_05_消息推送之发送消息(主动)

    一.本节要点 1.发送消息与被动回复消息 (1)流程不同:发送消息是第三方服务器主动通知微信服务器向用户发消息.而被动回复消息是 用户发送消息之后,微信服务器将消息传递给 第三方服务器,第三方服务器接 ...

  8. Java企业微信开发_04_消息推送之发送消息(主动)

    源码请见: Java企业微信开发_00_源码及资源汇总贴 一.本节要点 1.发送消息与被动回复消息 (1)流程不同:发送消息是第三方服务器主动通知微信服务器向用户发消息.而被动回复消息是 用户发送消息 ...

  9. 基于FCM的消息推送功能

    需求背景 我方项目需要支持客户端消息推送,iOS终端可以借由苹果本身的apns很方便的实现,但是对于Android来说,必须集成第三方的SDK来处理.考虑到项目需要以及成本,我们选择使用谷歌的FCM框 ...

随机推荐

  1. 从ListView逐步演变到RecyclerView

    ListView是我们开发中最常用的组件之一,在以往的PC端组件开发中,列表控件也是相当重要的,但是从桌面端到移动端,情况又有新的变化. 移动端的屏幕并不像桌面端那么大,并且移动端不可能把所有的内容都 ...

  2. Sql Server函数全解(二)数学函数

      数学函数主要用来处理数值数据,主要的数学函数有:绝对值函数,三角函数(包括正弦函数,余弦函数,正切函数,余切函数).对数函数,随机函数等.在错误产生时,数学函数将返回空值null.本次介绍各种数学 ...

  3. Linux日志定时清理

    linux是一个很能自动产生文件的系统,日志.邮件.备份等.虽然现在硬盘廉价,我们可以有很多硬盘空间供这些文件浪费,让系统定时清理一些不需要的文件很有一种爽快的事情.不用你去每天惦记着是否需要清理日志 ...

  4. 自定义iOS 中推送消息 提示框

    看到标题你可能会觉得奇怪 推送消息提示框不是系统自己弹出来的吗? 为什么还要自己自定义呢? 因为项目需求是这样的:最近需要做 远程推送通知 和一个客服系统 包括店铺客服和官方客服两个模块 如果有新的消 ...

  5. 【Basics of Entity Framework】【EF基础系列1】

    EF自己包括看视频,看MSDN零零散散的学了一点皮毛,这次打算系统学习一下EF.我将会使用VS2012来学习这个EF基础系列. 现在看看EF的历史吧: EF版本 相关版本特性介绍 EF3.5 基于数据 ...

  6. 自己实现简单的AOP(四)自动初始化代理对象

    前面三篇随笔,已经完成了AOP的核心功能,但 代理对象的初始化还是有些麻烦,本文将解决该问题. Demo 片段如下: public class HomeController : Controller ...

  7. .net源码分析 – Dictionary<TKey, TValue>

    接上篇:.net源码分析 – List<T> Dictionary<TKey, TValue>源码地址:https://github.com/dotnet/corefx/blo ...

  8. 详解Spring框架AOP(面向切面编程)

    最近在学习AOP,之前一直很不明白,什么是AOP?为什么要使用AOP,它有什么作用?学完之后有一点小小的感触和自己的理解,所以在这里呢就跟大家一起分享一下 AOP(Aspect-Oriented Pr ...

  9. C# GDI绘制矩形框,鼠标左键拖动可移动矩形框,滚轮放大缩小矩形框

    最近工作需要,要做一个矩形框,并且 用鼠标左键拖动矩形框移动其位置.网上查了一些感觉他们做的挺复杂的.我自己研究一天,做了一个比较简单的,发表出来供大家参考一下.如觉得简单,可路过,谢谢.哈哈. 先大 ...

  10. 记住 MVC里用formcollection接收form表单传来的值,表单属性必须有name为健!

    记住 MVC里用formcollection接收form表单传来的值,input属性必须有name为健! 调了一晚上!! 写个日志记下!!