评论

收藏

[Java] Springboot整合activemq的方法步骤

编程语言 编程语言 发布于:2021-10-05 19:10 | 阅读数:383 | 评论:0

这篇文章主要介绍了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. DSC0000.png
3.下载对应的版本
DSC0001.jpg

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

DSC0003.jpg

DSC0004.jpg

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

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

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

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

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里有数据后第一时间把消息监听到,我们跑一把试试
DSC0009.jpg

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

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

可以看到这时候队列里已经有了q2这个消息。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持CodeAE代码之家
原文链接:http://www.cnblogs.com/zgwjava/p/10283908.html

关注下面的标签,发现更多相似文章