SpringBoot2 集成 activeMQ 消息队列

本文详细介绍了如何在SpringBoot2项目中集成ActiveMQ,包括安装ActiveMQ、配置延时消息,以及队列(Queue)和主题(Topic)的使用。通过示例代码展示了消息生产者和消费者的实现,强调了不同消息模式的应用场景。
摘要由CSDN通过智能技术生成

本文只是简单的介绍集成和使用,偏重于应用,springboot版本为2.1.0
参看:
https://blog.csdn.net/lemonTree_DXP/article/details/81334812
https://www.jianshu.com/p/d8d73c872665
https://blog.csdn.net/liuchuanhong1/article/details/54603546

  • 安装activemq
  • 引入pom和配置
  • 即时消息,延时消息

安装

activemq的下载地址:http://activemq.apache.org
当前时间(2018-11-30)的mq版本是5.15.8。各位依据自己的系统下载的对应的版本,其实使用都一样。但是注意,最新版本的mq,需要java8支持。

我的是mac,所以可以直接使用brew安装。

下载完毕,直接跑起来(找到bin目录,./activemq start),然后访问:http://127.0.0.1:8161 默认管理员账号密码都是admin。可以访问就说明安装成功了。
在这里插入图片描述

输入账号密码
在这里插入图片描述
目前没有任何的消息。
在这里插入图片描述

正常操作肯定是要修改密码的了:
找到mq安装目录,找到conf文件夹,找到文件:jetty-realm.properties

# Defines users that can access the web (console, demo, etc.)
# username: password [,rolename ...]
admin: admin, admin
user: user, user

详细的配置说明不解释,直接修改下admin和user的账号密码,这里为了测试就不去修改了。

很重要的,要使用延迟消息【比如2小时后才送达消息,默认是即时】,必须修改的配置,找到activemq.xml文件,添加schedulerSupport=true这个属性

<broker xmlns="http://activemq.apache.org/schema/core" schedulerSupport="true" brokerName="localhost" dataDirectory="${activemq.data}">

activemq的配置就完成了。

项目pom和配置

详细的pom和配置查看下面的代码部分介绍。

怎么使用,消息的区分

首先明确一个问题,为什么要使用mq,才能有怎么使用,不能为了使用而使用。
一些介绍可以看看这篇文章:https://www.cnblogs.com/linjiqin/p/5720865.html

消息分为2种,queue队列模式和topic订阅模式(一般订阅,持久订阅)【主要区别就是是否能重复消费
关于2个的介绍这篇文章讲的很好:https://www.cnblogs.com/lemon-flm/p/7676047.html

我这里做一个简单的总结

queue队列:一个消息只能被一个消费者消耗,如果有100个消息,有5个消费者,那么他们均分这100个消息,而不是每个人都获取100个消息,如果当前没有任何消费者,那么消息就会保存到磁盘,直到出现一个消费者。

topic订阅模式:打个比方,报社印制报纸,有很多人订阅了这个报纸,那么报社在每一期报纸发行时,将同样内容的报纸发放到订阅者手里。所以每个订阅者收到的消息是一样的,没有订阅这个报纸的人肯定是收不到报纸的。如果我是今年下半年才订阅的报纸,报社也不可能将上半年的报纸发放给我,所以已经发送过的消息,不会再次发送给新的订阅者的
特殊的,如果这个报社没有任何人订阅,他还坚持生产报纸怎么办?这就像是将报纸丢到水里了,没有任何人收的到,除非出现一个订阅者。报社社长很固执,已经发放的报纸也不会重新给订阅者,即便是丢弃掉。

好了,总结完,大概大家就知道这2个的应用场景了,保证消息必达的就用queue,类似聊天室的就用topic。

下面就用代码来实现以下这个2个消息模式,为了方便创建一个多模块的项目,包含customer和producter,多模块项目的创建我这里不详细的介绍。直接给出关键的pom。

依次实现:

  • queue,一对一,即时消息
  • queue,延时消息
  • queue,一对多,多个消费者
  • topic

项目结构:
在这里插入图片描述
总工程activemq,子模块是customer和producter 步骤:

  1. 创建一个maven项目,不勾选类别,名称为activemq。
  2. 创建完毕,删除项目src文件夹。
  3. 右击项目,创建modules,然后选择正常的springboot项目构建,创建2个。
  4. 创建完毕,删除.mvn文件夹,mvnw,mvnw.cmd文件。
  5. 配置pom。
  6. 然后在总项目进行一次编译,如果通过,基本上完成搭建。

activemq的pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.ly</groupId>
    <artifactId>activemq</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!-- 总项目必须添加为pom打包方式 -->
    <packaging>pom</packaging>

    <modules>
    <!-- 项目的子模块都在这里添加,只有2个 -->
        <module>producter</module>
        <module>customer</module>
    </modules>

<!-- 包的版本总控制,可以再子模块,也可以统一到父模块统一管理 -->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

<!-- 整个项目依赖springboot,所以在父模块这里引入 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.1.RELEASE</version>
        <relativePath />
    </parent>

<!-- 子模块的公共依赖,因为子模块都需要这些包,所以可以提取出来,注意dependencyManagement 和 dependencies的区别,查看:https://blog.csdn.net/java_xxxx/article/details/81181674-->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-activemq</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.activemq</groupId>
            <artifactId>activemq-pool</artifactId>
        </dependency>
<!-- pool: enabled :true 时要加入这个 -->
        <dependency>
            <groupId>org.messaginghub</groupId>
            <artifactId>pooled-jms</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>
</project>

producter模块的pom,customer的一样,就不重复了:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.ly</groupId>
    <artifactId>producter</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>producter</name>
    <description>Demo project for Spring Boot</description>

<!-- 设置父模块,其实新建springboot项目的时候,这里是springboot,原理一样 -->
 
  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值