Spring下集成ActiveMQ推送

本文是将ActiveMQ消息制造者集成进spring,通过spring后台推送消息的实现。

首先是spring的applicationContext的配置,如下

<?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:amq="http://activemq.apache.org/schema/core"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd
        http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd">

    <!-- 使@autowired注解生效 -->
    <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" />

    <!-- 配置自动扫描Commpent的位置 -->
    <context:component-scan base-package="com.test.maven.service" />

    <!-- 配置目标连接工厂,配置与ActiveMQ的连接 -->
    <bean id="targetConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
        <!-- ActiveMq连接地址 -->
        <property name="brokerURL" value="tcp://localhost:61616"/>
        <property name="useAsyncSend" value="true"/>
    </bean>

    <!-- 配置连接工厂 -->
    <bean id="cachingConnectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
        <!-- 缓存数量 -->
        <property name="sessionCacheSize" value="10"/>
        <property name="targetConnectionFactory" ref="targetConnectionFactory"/>
    </bean>

    <!-- 发送消息的目的地(订阅模式) -->
    <bean id="topicDestination" class="org.apache.activemq.command.ActiveMQTopic">
        <!-- 设置消息主题的名字 -->
        <constructor-arg index="0" value="cmbc.CmbcPushTopic" />
    </bean>
    <!-- 发送消息的目的地(P2P模式) -->
    <bean id="queueDestination" class="org.apache.activemq.command.ActiveMQQueue">
        <constructor-arg index="0" value="cmbc.cmbcPushQueue"/>
    </bean>

    <!-- 配置JMS模板 -->
    <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
        <property name="connectionFactory" ref="cachingConnectionFactory" />
        <property name="defaultDestination" ref="topicDestination" />
        <!-- 订阅发布模式 -->
        <property name="pubSubDomain" value="true" />
        <property name="receiveTimeout" value="10000" />
    </bean>

</beans>

配置后,建立一个service层和service实现层,把推送服务进行封装。

package com.test.maven.service;

import javax.jms.Destination;

public interface ActiveMQProducerService
{
    public void sendMsg(Destination destination, final String msg);
}

下边是具体实现:

package com.test.maven.service.impl;

import javax.annotation.Resource;
import javax.jms.Destination;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;
import javax.jms.Topic;

import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import org.springframework.stereotype.Component;

import com.test.maven.service.ActiveMQProducerService;

@Component
public class ActiveMQProducerServiceImpl implements ActiveMQProducerService
{
    @Resource(name = "jmsTemplate")
    private JmsTemplate jmsTemplate;

    public void setJmsTemplate(JmsTemplate jmsTemplate)
    {
        this.jmsTemplate = jmsTemplate;
    }

    public void sendMsg(Destination destination, final String msg)
    {
        jmsTemplate.send(destination, new MessageCreator()
        {

            public Message createMessage(Session session) throws JMSException
            {
                return session.createTextMessage(msg);
            }
        });
        System.out.println("push String:" + msg);
        try
        {
            System.out.println("destination:" + ((Topic) destination).getTopicName());
        } catch (JMSException e)
        {
            e.printStackTrace();
        }
    }
}

下边附上使用例子:

package com.test.maven.controller;

import javax.jms.Destination;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import com.test.maven.service.ActiveMQProducerService;

@Controller
public class SayHello
{
    // @AutoWired 和 @Resource 功能类似,autowired是按type在bean中检索,resoure
    // 若指定name则按照name搜,指定type就按照类型搜,两个都指定则唯一匹配
    @Autowired
    private ActiveMQProducerService activeMQProducerService;

    // 当Autowired检索时不唯一,则需要Qualifier进行筛选
    @Autowired
    @Qualifier("topicDestination")
    private Destination destination;
    @RequestMapping(value = "/push")
    public void testPushService(HttpServletRequest requset, HttpServletResponse response)
    {
        String msg = requset.getParameter("msg");
        activeMQProducerService.sendMsg(destination, msg);
    }
}

过几天我再进行详细研究,想把ActiveMQ直接嵌入到spring中,这样就不用再开启ActiveMQ了。

时间: 2024-10-12 07:22:38

Spring下集成ActiveMQ推送的相关文章

在Spring下集成ActiveMQ

1.参考文献 Spring集成ActiveMQ配置 Spring JMS异步发收消息 ActiveMQ 2.环境 在前面的一篇ActiveMQ入门实例中我们实现了消息的异步传送,这篇博文将如何在spring环境下集成ActiveMQ.如果要在spring下集成ActiveMQ,那么就需要将如下jar包导入项目: 本文有两篇参考文献,因此有两个实例,项目结构如下图所示: 3.实例1 信息发送者:HelloSender.java package edu.sjtu.erplab.springactiv

在spring环境下集成ActiveMQ

1.参考文献 Spring集成ActiveMQ配置 Spring JMS异步发收消息 ActiveMQ 2.环境 在前面的一篇ActiveMQ入门实例中我们实现了消息的异步传送,这篇博文将如何在spring环境下集成ActiveMQ.如果要在spring下集成ActiveMQ,那么就需要将如下jar包导入项目: 本文有两篇参考文献,因此有两个实例,项目结构如下图所示: 3.实例1 信息发送者:HelloSender.java package edu.sjtu.erplab.springactiv

Android消息推送:手把手教你集成小米推送

前言 在Android开发中,消息推送功能的使用非常常见. 为了降低开发成本,使用第三方推送是现今较为流行的解决方案. 今天,我将手把手教大家如何在你的应用里集成小米推送 该文档基于小米推送官方Demo,并给出简易推送Demo 看该文档前,请先阅读我写的另外两篇文章: 史上最全解析Android消息推送解决方案 Android推送:第三方消息推送平台详细解析 目录 1. 官方Demo解析 首先,我们先对小米官方的推送Demo进行解析. 请先到官网下载官方Demo和SDK说明文档 1.1 Demo

QtAndroid详解(6):集成信鸽推送

推送是我们开发移动应用经常用到的功能,Qt on Android 应用也会用到,之前也有朋友问过,这次我们来看看怎么在 Qt on Android 应用中来集成来自腾讯的信鸽推送. 有关信鸽的 SDK 和集成指南,请到这里(http://xg.qq.com/)查看.本文是参考腾讯信鸽的在线帮助完成的.信鸽的 WIKI 和文档已经做得很好了,照着做就是,这里只讲 Qt 中集成信鸽时的步骤和注意事项. 这次我们要写一点点 Java 代码,就几行,如何做,可以参考<Qt on Android核心编程>

iOS10.0下的极光推送

iOS10.0下的极光推送有所不同,在测试的时候用的是从极光官网上下来的Demo 在PushTesth里内嵌了一个子程序 NotificationServiceTest.appex 而这个程序也需要一个新的bundle identifier,给程序命名的时候通常选择cn/com.公司缩写.应用名 对这个子程序可以命名为cn/com.公司缩写.应用名.xxx 而在下面Signing,选择Automatically mange signing 这样它会自动创建一个新的APP ID 其他的跟以前区别不

Swift集成极光推送

今天介绍一下用swift集成极光推送 一.首先到极光推送的官网下载iOS对应的SDK包   SDK下载地址 二.第二步在极光的官网创建账号配置对应的应用信息,推送证书的这些就不介绍了很基本,官网的很详细 配置应用地址 三.第三创建一个工程,导入下载的SDK包,并且导入依赖的库文件,编译看有没有错误提示 四.配置工程的相关信息 五.开始代码编写,集成Jpush 六.运行工程,检测是否集成正确 七.后台测试,来到极光推送的应用后台测试 滑动消息进入前台,控制台打印通知消息 以上便是极光推送的集成步骤

李洪强iOS之集成极光推送一iOS SDK概述

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px "PingFang SC"; color: #000000 } span.s1 { } span.s2 { font: 18.0px Menlo } 李洪强iOS之集成极光推送一iOS SDK概述 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Menlo; color: #000000 } span.s1 { } JPus

iOS集成极光推送

iOS集成极光推送 一.配置APNs 苹果APNs(英文全称:Apple Push Notification Service) 1.配置开发证书 ![Uploading apns_13_803165.png -] 2.配置生产证书 和配置开发证书的流程相同. 3.将配置好的证书导出为 .p12 文件 一.注册极光推送帐号 可登录 极光推送官网 注册帐号. 注册成功后进入控制台 二.集成极光推送SDK sdk地址 我使用的是JPush-iOS-SDK-2.1.0.下载的文件里有个pdf文件iOS+

thinkphp3.2集成极光推送

项目中用到了给客户端的推送功能,选用了极光推送,下面演示一下在thinkphp中集成极光推送 1.下载极光推送的php类,可以从笔者的git下载 地址:https://git.oschina.net/zhangchao123/jiguangtuisongphplei.git 2.thinkphp集成 解压后,直接把jpush文件夹放在Thinkphp/Libray/Vender目录 /*   * 极光推送   * $pushId:极光ID,字符串或者array()   * $content:推送