千家信息网

SpringBoot怎么整合ActiveMQ实现秒杀队列

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本文小编为大家详细介绍"SpringBoot怎么整合ActiveMQ实现秒杀队列",内容详细,步骤清晰,细节处理妥当,希望这篇"SpringBoot怎么整合ActiveMQ实现秒杀队列"文章能帮助大家
千家信息网最后更新 2026年11月03日SpringBoot怎么整合ActiveMQ实现秒杀队列

本文小编为大家详细介绍"SpringBoot怎么整合ActiveMQ实现秒杀队列",内容详细,步骤清晰,细节处理妥当,希望这篇"SpringBoot怎么整合ActiveMQ实现秒杀队列"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

前言

在实际生产环境中中,通常生产者和消费者会是两个独立的应用,这样才能通过消息队列实现了服务解耦和广播。因为此项目仅是一个案例,为了方便期间,生产和消费定义在了同一个项目中。

基础配置

pom.xml 添加依赖:

org.springframework.boot

spring-boot-starter-activemq

application.properties 基础配置:

# activemq 基础配置

#spring.activemq.broker-url=tcp://47.94.232.109:61616

# 生产环境设置密码

#spring.activemq.user=admin

#spring.activemq.password=123456

#spring.activemq.in-memory=true

#spring.activemq.pool.enabled=false

项目集成

定义生产者:

import javax.jms.Destination;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.jms.core.JmsMessagingTemplate;

import org.springframework.stereotype.Component;

@Component

public class ActiveMQSender {

@Autowired

private JmsMessagingTemplate jmsTemplate;

/*

* 发送消息,destination是发送到的队列,message是待发送的消息

*/

public void sendChannelMess(Destination destination, final String message){

jmsTemplate.convertAndSend(destination, message);

}

}

定义消费者:

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.jms.annotation.JmsListener;

import org.springframework.stereotype.Service;

import com.itstyle.seckill.common.entity.Result;

import com.itstyle.seckill.common.enums.SeckillStatEnum;

import com.itstyle.seckill.common.redis.RedisUtil;

import com.itstyle.seckill.common.webSocket.WebSocketServer;

import com.itstyle.seckill.service.ISeckillService;

@Service

public class ActiveMQConsumer {

@Autowired

private ISeckillService seckillService;

@Autowired

private RedisUtil redisUtil;

// 使用JmsListener配置消费者监听的队列,其中text是接收到的消息

@JmsListener(destination = "seckill.queue")

public void receiveQueue(String message) {

//收到通道的消息之后执行秒杀操作(超卖)

String[] array = message.split(";");

Result result = seckillService.startSeckilDBPCC_TWO(Long.parseLong(array[0]), Long.parseLong(array[1]));

if(result.equals(Result.ok(SeckillStatEnum.SUCCESS))){

WebSocketServer.sendInfo(array[0].toString(), "秒杀成功");//推送给前台

}else{

WebSocketServer.sendInfo(array[0].toString(), "秒杀失败");//推送给前台

redisUtil.cacheValue(array[0], "ok");//秒杀结束

}

}

}

测试案例:

@ApiOperation(value="秒杀五(ActiveMQ分布式队列)",nickname="科帮网")

@PostMapping("/startActiveMQQueue")

public Result startActiveMQQueue(long seckillId){

seckillService.deleteSeckill(seckillId);

final long killId = seckillId;

LOGGER.info("开始秒杀五");

for(int i=0;i<1000;i++){

final long userId = i;

Runnable task = new Runnable() {

@Override

public void run() {

if(redisUtil.getValue(killId+"")==null){

Destination destination = new ActiveMQQueue("seckill.queue");

//思考如何返回给用户信息ws

activeMQSender.sendChannelMess(destination,killId+";"+userId);

}else{

//秒杀结束

}

}

};

executor.execute(task);

}

try {

Thread.sleep(10000);

redisUtil.cacheValue(killId+"", null);

Long seckillCount = seckillService.getSeckillCount(seckillId);

LOGGER.info("一共秒杀出{}件商品",seckillCount);

} catch (InterruptedException e) {

e.printStackTrace();

}

return Result.ok();

}

注意事项

spring-boot-starter-activemq 依赖即可默认采用内嵌的 ActiveMQ,这个跟 elasticsearch 是一样的,测试的小伙伴可以不用安装,注释掉相关参数,使用默认即可。

如果自行安装 ActiveMQ 记得配置防火墙/安全组,配置web访问密码以及连接密码。

在生产环境下尽量还是采用外部 activemq 服务,提高扩展性、稳定性、可维护性。

读到这里,这篇"SpringBoot怎么整合ActiveMQ实现秒杀队列"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。

队列 生产 配置 消息 消费 整合 基础 密码 文章 消费者 环境 项目 内容 前台 案例 生产者 服务 测试 中中 妥当 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网新科技 广东万易互联网科技有限公司惠州分公司 广州为想互联网科技有限公司 伟宏互联网科技 科技互联网项目 互联网扶贫科技 嘟嘟瓜互联网科技 小马过河互联网科技 以后互联网后是啥科技 昭通云南众福互联网科技有限公司 河南猎农互联网科技有限公司 中国航天科技大学国际工业互联网 链环科技传统企业怎么转型互联网 威龙国际互联网科技公司 工业互联网展湾科技股份有限公司 本届互联网大会上的黑科技 九思连强互联网电子科技有限公司 福建互联网展示科技馆设计 互联网科技和医药行业 银川新华互联网科技学校招聘 没上市的科技互联网公司 网络科技有限互联网 狮子座互联网科技有限公司 深圳卡尔迅互联网科技有限公司怎么样 互联网科技创新服务 卓翼科技产业互联网合作 深圳无忧互联网科技 互联网金融运营模式中的金融科技 优雇互联网科技有限公司 互联网高科技绘画
0