Springboot整合activemq的方法步骤

 更新时间:2019年01月18日 08:14:51   作者:小毛毛--专注后端  
这篇文章主要介绍了Springboot整合activemq的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

今天呢心血来潮,也有很多以前的学弟问到我关于消息队列的一些问题,有个刚入门,有的有问题都来问我,那么今天来说说如何快速入门mq。

一、首先说下什么是消息队列?

1.消息队列是在消息的传输过程中保存消息的容器。

二、为什么要用到消息队列?

主要原因是由于在高并发环境下,由于来不及同步处理,请求往往会发生堵塞,比如说,大量的insert,update之类的请求同时到达 MySQL ,直接导致无数的行锁表锁,甚至最后请求会堆积过多,从而触发too many connections错误。通过使用消息队列,我们可以异步处理请求,从而缓解系统的压力。

三、消息队列都分为哪几种?

1. ActiveMQ/ApolloMQ

优点:老牌的消息队列,使用Java语言编写。对JMS支持最好,采用多线程并发,资源消耗比较大。如果你的主语言是Java,可以重点考虑。

缺点:由于历史悠久,历史包袱较多,版本更新很缓慢。集群模式需要依赖Zookeeper实现。最新架构的产品被命名为Apollo,号称下一代ActiveMQ,目前案例较少。

2. RocketMQ/Kafka

优点:专为海量消息传递打造,主张使用拉模式,天然的集群、HA、负载均衡支持。话说还是那句话,适合不适合看你有没有那么大的量。

缺点:所谓鱼和熊掌不可兼得,放弃了一些消息中间件的灵活性,使用的场景较窄,需关注你的业务模式是否契合,否则山寨变相使用很别扭。除此之外,RocketMQ没有.NET下的客户端可用。RocketMQ身出名门,但使用者不多,生态较小,毕竟消息量能达到这种体量的公司不多,你也可以直接去购买阿里云的消息服务。Kafka生态完善,其代码是用Scala语言写成,可靠性比RocketMQ低一些。

3. RabbitMQ

优点:生态丰富,使用者众,有很多人在前面踩坑。AMQP协议的领导实现,支持多种场景。淘宝的MySQL集群内部有使用它进行通讯,OpenStack开源云平台的通信组件,最先在金融行业得到运用。

缺点:Erlang代码你Hold得住不? 虽然Erlang是天然集群化的,但RabbitMQ在高可用方面做起来还不是特别得心应手,别相信广告。

四、我们今天重要说下如何快速上手activemq,也是在mq中最容易上手的一种

1.首先我们先下载activemq  链接 http://activemq.apache.org/download.html

2.

3.下载对应的版本

4.启动activemq(我这里是mac环境,windows可双击运行)

出现这个说明mq已经启动我可可以通过active默认的端口号运行https://http://localhost:8161/

这里看到他会alert一个登陆窗口 默认账号密码都为admin

点击Queues查看队列是的消息,这样我们activemq就算运行了

那么现在我将它整合在springboot里,也十分简单 首先看下项目结构

5.加入依赖 本次用的gradle

compile('org.springframework.boot:spring-boot-starter-activemq:2.1.1.RELEASE')

6.yml配置

spring:
 activemq:
  broker-url: tcp://localhost:61616
  user: admin
  password: admin

这里注意了配置的端口号和启动端口号不是一直的,默认为61616,在conf的jetty.xml下课进行查看也可以修改

咱们直接上代码

7.Controller

package com.gd.acticemqtest.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;
import javax.jms.TextMessage;

/**
 * @DATA 2019-01-09 22:42
 * @Author 张国伟 WeChat:17630376104
 * @Description TODO
 */
@RestController
public class controllerDemo {

  @Autowired
  private JmsTemplate jmsTemplate;

  @RequestMapping("/sendMsg")
  public void sendMsg(String msg) {
    jmsTemplate.send("q2", new MessageCreator() {
      @Override
      public Message createMessage(Session session) throws JMSException {

        TextMessage textMessage = session.createTextMessage();
        textMessage.setText(msg);
        return textMessage;
      }
    });
  }

这里一定要注意的是JmsTemplate到底引用的那个包

jmsTemplate.send是向队列里发送消息,并且为队列起一个名字

package com.gd.acticemqtest.serive;

import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Service;

/**
 * @DATA 2019-01-09 22:54
 * @Author 张国伟 WeChat:17630376104
 * @Description TODO
 */
@Service
public class ActiveMsgListener {

  @JmsListener(destination = "q2")
  public void rctiveMsg(String message){
  System.out.println("------监听到activemq的数据"+message);
  }

}

jmsListener是spring的针对消息的监听器,当mq里有数据后第一时间把消息监听到,我们跑一把试试

当敲下enter那一刻,控制台已经把刚刚存进去的消息给打印了出来

那这个时候我们再来看下activemq的服务中是否有消息

可以看到这时候队列里已经有了q2这个消息。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • SpringBoot实战:Spring如何找到对应转换器优雅使用枚举参数

    SpringBoot实战:Spring如何找到对应转换器优雅使用枚举参数

    这篇文章主要介绍了SpringBoot实战中Spring是如何找到对应转换器优雅的使用枚举参数,文中附有详细的实例代码有需要的朋友可以参考下,希望可以有所帮助
    2021-08-08
  • JVM处理未捕获异常的方法详解

    JVM处理未捕获异常的方法详解

    这篇文章主要给大家介绍了关于JVM处理未捕获异常的相关资料,文中通过示例代码以及图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-01-01
  • Java编写日历表的3种方式

    Java编写日历表的3种方式

    这篇文章主要为大家详细介绍了Java编写日历表的3种方式,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • JavaWeb 中Cookie实现记住密码的功能示例

    JavaWeb 中Cookie实现记住密码的功能示例

    cookie是一种WEB服务器通过浏览器在访问者的硬盘上存储信息的手段。Cookie的目的就是为用户带来方便,为网站带来增值。这篇文章主要介绍了JavaWeb 中Cookie实现记住密码的功能示例,需要的朋友可以参考下
    2017-06-06
  • Spring注解@EnableWebMvc使用的坑点及解析

    Spring注解@EnableWebMvc使用的坑点及解析

    这篇文章主要介绍了Spring注解@EnableWebMvc使用的坑点及解析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • springboot 运行 jar 包读取外部配置文件的问题

    springboot 运行 jar 包读取外部配置文件的问题

    这篇文章主要介绍了springboot 运行 jar 包读取外部配置文件,本文主要描述linux系统执行jar包读取jar包同级目录的外部配置文件,主要分为两种方法,每种方法通过实例代码介绍的非常详细,需要的朋友可以参考下
    2021-07-07
  • Java分支结构和循环结构原理与用法详解

    Java分支结构和循环结构原理与用法详解

    这篇文章主要介绍了Java分支结构和循环结构原理与用法,结合实例形式分析了java分支结构、循环结构、跳转语句等相关概念、原理、使用技巧与操作注意事项,需要的朋友可以参考下
    2020-02-02
  • 详解Java 中的 AutoCloseable 接口

    详解Java 中的 AutoCloseable 接口

    本文对 try-with-resources 语法进行了较为深入的剖析,验证了其为一种语法糖,同时给出了其实际的实现方式的反编译结果,相信你在看完本文后,关于 AutoCloseable 的使用你会有新的收获。
    2020-11-11
  • Java中Lambda表达式基础及使用

    Java中Lambda表达式基础及使用

    这篇文章主要介绍了Lambda 是JDK 8 的重要新特性。它允许把函数作为一个方法的参数(函数作为参数传递进方法中),使用 Lambda 表达式可以使代码变的更加简洁紧凑,使Java代码更加优雅,感兴趣的小伙伴一起来学习吧
    2021-08-08
  • Java String类详解_动力节点Java学院整理

    Java String类详解_动力节点Java学院整理

    这篇文章主要介绍了Java String类详解,本文经多方资料的收集整理和归纳,最终撰写成文,非常不错,值得收藏,需要的的朋友参考下
    2017-04-04

最新评论