热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

spring集成activeMq

前言本篇内容主要记录spring集成消息中间件MQ的,分队列模式queue和主题模式topic两种模式,我使用的是activeMq。网上现在主流的是rabbitMq,功能更加强大,
  • 前言

    本篇内容主要记录spring集成消息中间件MQ的,分队列模式queue和主题模式topic两种模式,我使用的是activeMq。网上现在主流的是rabbitMq,功能更加强大,但rabbitMq用的是Erlang语言写的,需要安装Erlang环境。如果是要用到大数据相关的,可以使用kafka,我这为了简便就用了activeMq。activeMq的apache官网下载地址

  • 启动activeMq

    下载下activeMq之后解压缩,在bin目录下有32和64的,根据电脑位数运行,我的是64位的,运行exe文件
  • pom.xml文件引入依赖

            
                org.apache.activemq
                activemq-all
                5.9.0
            
    
            
                org.apache.activemq
                activemq-pool
                5.9.0
            
    
            
                org.springframework
                spring-jms
                4.0.0.RELEASE
            
    
            

     

  • 创建mq的xml文件application-mq.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:context="http://www.springframework.org/schema/context"
           xmlns:aop="http://www.springframework.org/schema/aop"
           xmlns:tx="http://www.springframework.org/schema/tx"
           xsi:schemaLocation="
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context-3.0.xsd
            http://www.springframework.org/schema/aop
            http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
            http://www.springframework.org/schema/tx
            http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
    
        
    
        <bean id="jmsFactory" class="org.apache.activemq.pool.PooledConnectionFactory"
              destroy-method="stop">
            <property name="connectionFactory">
                <bean class="org.apache.activemq.ActiveMQConnectionFactory">
                    <property name="brokerURL" value="${activeMq.brokerUrl}"/>
                    <property name="userName" value="${activeMq.username}"/>
                    <property name="password" value="${activeMq.password}"/>
                bean>
            property>
            
            <property name="maxConnections" value="100">property>
        bean>
    
        
        <bean id="cachingConnectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
            <property name="targetConnectionFactory" ref="jmsFactory"/>
            <property name="sessionCacheSize" value="1"/>
        bean>
    
        <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
            <property name="connectionFactory" ref="cachingConnectionFactory"/>
            <property name="messageConverter">
                <bean class="org.springframework.jms.support.converter.SimpleMessageConverter"/>
            property>
        bean>
    
        
        <bean id="destinationQueue" class="org.apache.activemq.command.ActiveMQQueue">
            
            <constructor-arg name="name" value="spring-queue"/>
        bean>
    
        
        <bean id="destinationTopic" class="org.apache.activemq.command.ActiveMQTopic">
            <constructor-arg index="0" value="spring-topic"/>
        bean>
    
        
        <bean id="jmsContainer"
              class="org.springframework.jms.listener.DefaultMessageListenerContainer">
            <property name="connectionFactory" ref="cachingConnectionFactory"/>
            <property name="destination" ref="destinationQueue"/>
            <property name="messageListener" ref="messageListener"/>
        bean>
    
        
        <bean id="messageListener" class="com.djkj.demo.common.MyMessageListener">
        bean>
    
    beans>

    mq的连接地址根据实际情况设定,用户名密码根据实际情况填写,activeMq默认的是admin/admin,假如activemq配置了连接认证,则需要用配置的认证用户登录,具体用法是在activeMq的conf文件夹下activemq.xml里添加插件

        <plugins>
                <simpleAuthenticationPlugin>
                    <users>
                        <authenticationUser username="username" password="password" groups="admin,users"/>
                    users>
                simpleAuthenticationPlugin>
        plugins>
  • service发送消息

    package com.djkj.demo.service.serviceImpl;
    
    import com.djkj.demo.service.AmqSenderService;
    import org.apache.log4j.Logger;
    import org.springframework.jms.core.JmsTemplate;
    import org.springframework.jms.core.MessageCreator;
    import org.springframework.stereotype.Service;
    
    import javax.annotation.Resource;
    import javax.jms.Destination;
    import javax.jms.JMSException;
    import javax.jms.Message;
    import javax.jms.Session;
    
    @Service("AmqSenderService")
    public class AmqSenderServiceImpl implements AmqSenderService {
    
        private static final Logger logger = Logger.getLogger(AmqSenderServiceImpl.class);
    
        @Resource
        private JmsTemplate jmsTemplate;
    
        @Resource(name = "destinationQueue")
        private Destination destination;
    
        @Override
        public void sendMsg(String msg) {
            logger.info("----发送队列信息开始----");
            try {
                jmsTemplate.send(destination, new MessageCreator() {
                    @Override
                    public Message createMessage(Session session) throws JMSException {
                        return session.createTextMessage(msg);
                    }
                });
            }catch (Exception e){
                e.printStackTrace();
                logger.error("发送队列失败!");
            }
        }
    }

    controller调用service方法发送消息

  • 接收消息

    我是把消息生产者和消费者放在一起的,实际开发中消费者和生产者绝大多数情况是分开在不同系统的。消费者主要通过监听来实现接收消息
    上面的mq的xml文件最底下配置了一个我的消息监听器MyMessageListener,代码如下
    package com.djkj.demo.common;
    
    import javax.jms.JMSException;
    import javax.jms.Message;
    import javax.jms.MessageListener;
    import javax.jms.TextMessage;
    
    public class MyMessageListener implements MessageListener {
    
        @Override
        public void onMessage(Message message) {
            if (message instanceof TextMessage) {
                try {
                    TextMessage txtMsg = (TextMessage) message;
                    String msg = txtMsg.getText();
                    WebSocketUtil.sendMessageAll(msg);
                } catch (JMSException e) {
                    throw new RuntimeException(e);
                }
            } else {
                throw new IllegalArgumentException("Message must be of type TextMessage");
            }
        }
    }

    接收到消息后通过websocket发送到前台页面实现实时的效果的,大家根据自己的需求来写。以后再写关于websocket的集成。

 


推荐阅读
  • 分布式消息_58分布式消息队列WMB设计与实践
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了58分布式消息队列WMB设计与实践相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 1、概述首先和大家一起回顾一下Java消息服务,在我之前的博客《Java消息队列-JMS概述》中,我为大家分析了:然后在另一篇博客《Java消息队列-ActiveMq实战》中 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • MySQL数据库锁机制及其应用(数据库锁的概念)
    本文介绍了MySQL数据库锁机制及其应用。数据库锁是计算机协调多个进程或线程并发访问某一资源的机制,在数据库中,数据是一种供许多用户共享的资源,如何保证数据并发访问的一致性和有效性是数据库必须解决的问题。MySQL的锁机制相对简单,不同的存储引擎支持不同的锁机制,主要包括表级锁、行级锁和页面锁。本文详细介绍了MySQL表级锁的锁模式和特点,以及行级锁和页面锁的特点和应用场景。同时还讨论了锁冲突对数据库并发访问性能的影响。 ... [详细]
  • 云原生应用最佳开发实践之十二原则(12factor)
    目录简介一、基准代码二、依赖三、配置四、后端配置五、构建、发布、运行六、进程七、端口绑定八、并发九、易处理十、开发与线上环境等价十一、日志十二、进程管理当 ... [详细]
  • ASP.NETCoreMVC的ModelBinding会将HTTPRequest数据,以映射的方式对应到参数中。基本上跟ASP.NETMVC差不多,但能Binding的来源更多了一 ... [详细]
  • 讨伐Java多线程与高并发——MQ篇
    本文是学习Java多线程与高并发知识时做的笔记。这部分内容比较多,按照内容分为5个部分:多线程基础篇JUC篇同步容器和并发容器篇线程池篇MQ篇本篇 ... [详细]
  • 大家好,这是一个为了梦想而保持学习的博客。这个专题会记录我对于KAFKA的学习和实战经验,希望对大家有所帮助,目录形式依旧为问答的方式,相当于是模拟面试。一、概述在对kafka有了 ... [详细]
  • rabbtimq相关下载与安装
    rabbitmq与elang版本关系查看https:www.rabbitmq.comwhich-erlang.html#eol-series  rpm下载地址https:githu ... [详细]
  • rabbitmq集群搭建「建议收藏」
    rabbitmq集群搭建「建议收藏」一、基础安装前提:三个节点都主机映射,关防火墙网络,配好yum(后边出错,主机名和映射要对应)1.安装(三个节点)2.mq1启动rabbitmq ... [详细]
  • CentOs 7.3中搭建RabbitMQ 3.6单机多实例服务的步骤与使用
    CentOs7.3中搭建RabbitMQ3.6单机多实例服务的步骤与使用-RabbitMQ简介RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户 ... [详细]
  • PHP图片截取方法及应用实例
    本文介绍了使用PHP动态切割JPEG图片的方法,并提供了应用实例,包括截取视频图、提取文章内容中的图片地址、裁切图片等问题。详细介绍了相关的PHP函数和参数的使用,以及图片切割的具体步骤。同时,还提供了一些注意事项和优化建议。通过本文的学习,读者可以掌握PHP图片截取的技巧,实现自己的需求。 ... [详细]
  • 原文链接:http:littleq.logdown.composts20131011kerl-to-manage-erlang-versions-on-your-system最近又回到 ... [详细]
author-avatar
天蝎完美_主义
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有