SpringBoot RabbitMq 使用

springboot整合rabbitMQ 登录rabbitMQ后台。拉取rabbitMQ镜像。查看容器是否启动成功。运行rabbitMQ。安装docker参考。查看镜像是否拉取成功。第二步:生产者(publisher)创建test。新建一个父项目和两个子项目。一个为生产者、一个为消费者。我这里使用的是vm虚拟机做演示。application.yml 配置。消费者(consumer)接收代码。 阅读详情

SpringBoot RabbitMq 使用

最近业务场景需要,进行订单支付后,等待指定时间后检查订单是否支付完成,支付失败的话取消订单;支付成功不做其他操作;
通过面向百度开发,决定使用RabbitMq 作为消息中间件实现需要的功能;

通过资料翻阅知道,RabbitMq并没有延迟消息发送这个功能的;但可以通过其的两个特性TTL 和DLX 实现;
TTL :RabbitMq 运行我们为消息获取队列设置有效期; 当消息和队列同时设置时,以小值为准;
DLX:设置在队列上,作用是在于当队列中的消息被拒绝,过期获取队列达到最大长度被排出时,将消息发送到指定的交换器中,通过设置指定好的路由键,到底要接收消息的队列;
(这里个人理解是这样的,若有不当或错误的地方,望指出赐教;)

代码实现

  • 引入依赖,配置RabbitMq
  • 创建交换器和队列,并配置队列属性实现DLX
  • 队列绑定交换器
  • 测试发送TTL消息到设置DLX属性的队列
  • 监听接收到转发消息的队列,实现接收延迟消息

第一步,引入依赖

		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>

配置RabitMq

spring:
  rabbitmq:
    host: 127.0.0.1
    port: 5672
    username: test
    password: test
    virtual-host: my_test

创建一个配置类,配置创建交换器和队列

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.HashMap;
import java.util.Map;

/**
 * 2019/8/21 14:21
 *
 * @Author lzm
 */
@Configuration
public class DmRabbitMqConfig {


    /**
     * 交换器
     */
    public final static String DM_EXC = "DM_EXC";

    /**
     * 接收DLX转发消息的队列名字,同时作为路由键
     */
    public final static String DM_QUEUE = "DM_QUEUE";

    /**
     * 配置DLX属性的队列名字,同时作为路由键
     */
    public final static String DM_DLX_QUEUE = "DM_DLX_QUEUE";

    /**
     * 创建一个直接模式的交换器
     * @return
     */
    @Bean
    public DirectExchange directExchange(){

        return new DirectExchange(DM_EXC,true,false);
    }

    /**
     * 创建一个普通的队列
     * @return
     */
    @Bean
    public Queue dmQueue(){
        Queue queue = new Queue(DM_QUEUE,true,false,false);
        return queue;
    }

    /**
     * 创建一个队列,并配置DLX 属性,
     * 配置信息可查阅官网:https://www.rabbitmq.com/dlx.html
     * @return
     */
    @Bean
    public  Queue dlxQueue(){
        Map<String,Object> map = new HashMap<>();

        map.put("x-dead-letter-exchange",DM_EXC);
        map.put("x-dead-letter-routing-key",DM_QUEUE);
        Queue queue = new Queue(DM_DLX_QUEUE,true,false,false,map);
        return queue;
    }

    // 两个队列和交换器进行绑定

    @Bean
    public Binding bindingDmQueue(){
        return BindingBuilder.bind(dmQueue()).to(directExchange()).with(DM_QUEUE);
    }

    @Bean
    public Binding bindinDlxQueue(){
        return BindingBuilder.bind(dlxQueue()).to(directExchange()).with(DM_DLX_QUEUE);
    }
}

写个测试类,发送消息进行测试;(进行消息发送时,交换器和队列必须是存在的了,否则会保错;)

@RunWith(SpringRunner.class)
@SpringBootTest
public class DmApplicationTests {

    @Autowired
    private RabbitTemplate template;

    @Test
    public void contextLoads() {
       template.convertAndSend(DmRabbitMqConfig.DM_EXC,DmRabbitMqConfig.DM_DLX_QUEUE, "我是5秒前发生的消息,5秒前是"+LocalDateTime.now(), message -> {
           message.getMessageProperties().setExpiration("5000");
           return message;
       });
    }

写个消息接收类

@Component
public class Test {

    @RabbitListener(queues = DmRabbitMqConfig.DM_QUEUE)
    @RabbitHandler
    public void get(String msg){
        System.out.println("接收到消息,现在时间是:"+ LocalDateTime.now());
        System.out.println(msg);

  }

测试结果

接收到消息,现在时间是:2019-08-21T14:57:22.513
我是5秒前发生的消息,5秒前是2019-08-21T14:57:17.470

RabbitMQ在SpringBoot中的使用详解 RabbitMQ在SpringBoot中的应用指南 本文全面介绍了RabbitMQ消息中间件在SpringBoot中的集成与应用。内容涵盖RabbitMQ核心概念(队列、交换机、绑定)、环境搭建(Docker推荐)、SpringBoot集成步骤以及五种常用消息模式(简单队列、工作队列、发布订阅、路由、主题)的详细实现。特别强调了消息确认机制(生产者/消费者确认)、实际项目应用案例(订单系统、延迟队列)以及常见问题解决方案(消息丢失、重复消费、性能优化)。文章还提供了监控配置建议和最佳实践指导,帮助开发者构建 阅读详情

相关推荐

RabbitMQ连接池+SpringBoot实现

RabbitMQ连接池+SpringBoot实现。通过连接池实现将高效的管理RabbitMQ的Connection,并与springboot进行整合,实现消息发送,获取队列列表等功能。基于此可以进行更多功能的扩充。

RabbitMq整合springboot超详细,超适合新手

Rabbitmq。

weixin_62108279的博客 5901

使用Java编写的RabbitMQ连接池方法

RabbitMQ客户连接池的Java实现。我们刚开始也是采用这种方式来实现的,但做压力测试时,发现这种每次新建Connection和新建Channel是非常耗时的,在大并发下,一般都要8毫秒左右,慢的话,好多都是几十毫秒。因此我们创建了Java的RabbitMQ的连接池对象。

SpringBoot整合RabbitMQ应用

SpringBoot整合RabbitMQ的应用

onePlus5T的博客 1998

RabbitMQ客户端连接池实现代码可直接复制项目中使用

RabbitMQ客户端连接池实现代码可直接复制项目中使用,内含MQhelper getMessage sendMessage

Moltbot 超详细安装使用教程(初学者版)

你在外面逛街,用微信/Telegram 发消息说"帮我查一下明天的天气"它立刻帮你查好并回复你说"帮我在电脑上新建一个文件夹叫'工作文档'"它真的帮你在电脑上创建了这就是 Moltbot ——一个能真正帮你干活的 AI 助手。API Key 就像是一把"钥匙",让 Moltbot 能够使用 AI 服务。

weixin_51040479的博客 2015

SpringBoot+RabbitMQ

RabbitMQ RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现,如下这张图描述了RabbitMQ如何在生产者和消费者之间来传递消息的。 Exchange 我们在开篇的时候就留了一个坑,就是那个应用结构图里面,消费者Client A和消费者Client B是如何知道我发送的消息是给Queue1还是给Queue2,有没有过这个问题,那...

kangshifu591549734的博客 213

Centos7.9使用kubeadm部署K8S集群

使用kubeadm部署一个k8s集群,单master+2worker节点。

lldhsds的专栏 1302

RabbitMQ 连接池集成到 SpringBoot

在高并发应用场景中,消息队列作为核心组件之一发挥着至关重要的作用。RabbitMQ 作为一款成熟的消息中间件,常被用于系统间异步通信、流量削峰填谷等场景。然而,创建和销毁 RabbitMQ 连接是一项资源消耗较大的操作,频繁地建立连接会导致系统性能下降、网络资源浪费,甚至可能引发连接泄漏等问题。本文将介绍如何在 Spring Boot 应用中实现一个简单高效的 RabbitMQ 连接池,通过连接复用机制显著提升应用对 RabbitMQ 的访问性能和稳定性。

m0_74109105的博客 1202

基于 AUTOSAR 的域控产品软件开发进阶探索

本文深入探讨了AUTOSAR架构在汽车域控产品开发中的进阶应用。首先从系统设计角度分析了AUTOSAR分层架构原理及其在域控产品中的优化部署策略;其次详细介绍了Davinci和EBTresos等主流工具链的特点与协同使用方法;然后重点阐述了ASPICE流程与功能安全/信息安全标准的实施要点;最后分享了多核车载芯片(如NXP S32G)的适配经验与优化实践。通过架构设计、工具运用、标准遵循和芯片适配四个维度的专业解析,为域控产品的AUTOSAR开发提供了系统性指导。

SiArch的博客 1199

02.1 知识图谱工具 Protege的下载安装与使用

Protege的下载安装与使用 本文是王昊奋老师《知识图谱》系列笔记第2.1篇。 文章目录Protege的下载安装与使用0 相关介绍0.0 Protege相关介绍0.1 Protégé的特点0.2 Protégé的用途1 Protege的下载1.1 准备工作:安装配置JAVA环境1.2 官网下载2 Protege的安装2.1 直接解压缩2.2 双击运行3 Protege的使用实例-创建类...

和而不流 7万+

SpringBoot如何整合RabbitMQ

好久没有写博客了,终日忙于生计,真是人过30不如狗啊,但写点什么好呢?想想当年自己入门时候那痛苦的经历,还是写点优质实用的入门文章吧,既满足了自己好为人师的本性,也能给后辈提供一些帮助。今天咱们就来聊聊springboot整合rabbitmq的那些事吧。SpringBoot的风头之盛不多说了,我是在2016年首次接触springboot的,当时自己要写个APP,后台采用了springboot。当时还真是个新鲜事物,没想到以后几年的发展犹如黄河泛滥,一发不可收拾…rabbitmq官网https。...

ShuSheng007的程序人生 1万+

EEG/ERP新手必看:5本神经科学入门书籍推荐(附高清PDF下载)

本文为EEG/ERP研究新手推荐5本神经科学入门书籍,涵盖认知神经科学、数据分析、ERP技术等核心内容。特别推荐《认知神经科学—关于心智的生物学》和《事件相关电位基础》,这些书籍不仅提供理论框架,还包含实用案例和MATLAB代码,帮助研究者快速掌握脑电研究技术。附高清PDF下载,适合实验室小组学习。

weixin_29210727的博客 445

springboot项目使用RabbitMQ

本文主要介绍rabbitMQ在Spring Boot项目中的简单使用,通过简单配置快速完成消息收发,还包括消息可靠性机制介绍及示例。

weixin_53231767的博客 2321

MuJoCo 入门教程(四)建模

在 MJCF 中,一个体可以包含多个关节,因此无需引入虚拟体来创建复合关节。相反,只需在同一主体中定义构成所需复合关节的所有原始关节即可。例如,可以使用两个滑块和一个铰链来模拟在平面内运动的肢体。其他 MJCF 元素可以在嵌套的主体元素所创建的树中定义,特别是关节、几何体、场地、摄像机、灯光。当一个元素被定义在一个肢体内时,它就固定在该肢体的局部坐标系上,并始终随其移动。涉及多个机构或根本不涉及机构的元素,将在运动树之外的单独部分中定义。

机器人控制与仿真应用 4163

精密装配机器人系列编程:ABB IRB 120_(20).编程项目设计与实施

在精密装配机器人系列编程中,项目的成功设计与实施涉及多个关键步骤。从项目需求分析到最终调试,每一个环节都需要细致的考虑和专业的技术。选择合适的编程语言、设计良好的程序结构、掌握调试技巧以及解决常见问题,都是确保机器人高效、稳定运行的重要因素。通过不断优化和改进,可以提高生产效率和产品质量,满足不断变化的生产需求。

zhubeibei168的博客 1243

springboot使用rabbitmq

简介:rabbitmq是基于amqp协议,用elang语言开发的一个高级的消息队列,以高性能,高可靠,高吞吐量而被大量应用到应用系统作为第三方消息中间件使用,为应用系统实现。我们打开rabbitmq的控制台(http://你的主机名:15672),可以开到队列里面也收到了消息,但是还没有被消费。rabbitmq主要构造有,producter,consumer,exchange,queue组成。3.msg: “今日日本出现大暴雨,怀疑是哥斯拉来了”,type:“Japan.weather”

2301_79158740的博客 2062

机器学习项目实战案例数据集

本专栏整理了《机器学习项目实战案例》,内包含了各种不同的机器学习项目,包含项目原理以及源码,每一个项目实例都附带有完整的代码+数据集。

优快云 精品推荐 3636

Spring Boot 中使用 RabbitMQ

通过本文的介绍,你已经学习了如何在 Spring Boot 中使用 RabbitMQ 实现异步消息的发送和接收。你了解了如何配置 RabbitMQ 连接信息,并使用 Spring Boot 提供的和注解进行消息的发送和接收。通过实际的案例,我们展示了如何使用 RabbitMQ 实现任务队列,以邮件发送服务为例。你学习了如何创建消息发送者和消息接收者,并使用队列来实现任务的异步处理。使用 RabbitMQ 可以帮助我们实现解耦和异步处理,提高系统的可靠性和性能。

good7ob的博客 2343

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

SpringBoot中使用RabbitMQ

SpringBoot操作RabbitMQ攻略

程序员小王的博客 4004

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

SpringBoot 使用 RabbitMQ

RabbitListener(queues = “order.create”) 可以加在类上,也可以加在方法上,加在类上,如果消息是 String 类型就会执行 String 类型的方法,如果是对象类型,就会执行对象类型的方法。@RabbitListener 是 Spring 框架中用于监听 RabbitMQ 队列的注解,通过使用这个注解,可以定义一个方法,以便从 RabbitMQ 队列中接收消息,该注解支持多种参数类型。声明两个队列和一个交换机,然后绑定队列和交换机。声明队列,并和交换机绑定。

旺旺小崔崔的博客 1146

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

SpringBoot整合Rabbitmq:超详细(包括docker配置Rabbitmq的详细过程)

MQ(message queue),从字面意思上看就个 FIFO 先入先出的队列,只不过队列中存放的内容是 message 而已,它是一种具有接收数据、存储数据、发送数据等功能的技术服务。在互联网架构中,MQ 是一种非常常见的上下游“逻辑解耦+物理解耦”的消息通信服务,用于上下游传递消息。使用了 MQ 之后,消息发送上游只需要依赖 MQ,不用依赖其他服务常见的MQ消息中间件有很多,例如ActiveMQRabbitMQKafkaRocketMQ等等。

yw2490614330的博客 2907

Spring Boot 中的 RabbitMQ 是什么,如何使用

本文介绍了 RabbitMQ 的基本概念,以及如何在 Spring Boot 中使用 RabbitMQ。我们还介绍了 RabbitMQ 的一些高级功能,包括消息确认、消息持久化、消息 TTL 和死信队列。通过学习本文,你应该已经有了足够的知识来开始在 Spring Boot 中使用 RabbitMQ 了。

Java徐师兄的博客 1138

Spring Boot中使用RabbitMQ

Message Broker与AMQP简介 Message Broker是一种消息验证、传输、路由的架构模式,其设计目标主要应用于下面这些场景: 消息路由到一个或多个目的地 消息转化为其他的表现方式 执行消息的聚集、消息的分解,并将结果发送到他们的目的地,然后重新组合成相应的结果返回给消息用户 调用Web服务来检索数据 响应事件或错误 使用发布-订阅模式来提供内容或基于主题的消息路由 AMQP...

JavaAlliance 4672

Springboot RabbitMQ

Springboot RabbitMQ 开发,Idea 的文件目录: 安装过程我就不写了,服务的安装请参考前往:RabbitMQ Centos7 安装以及使用 https://blog.youkuaiyun.com/yexiaomodemo/article/details/80473411 同样,RabbitMQ里面的运行机制等如:虚拟地址、交换机、路由键、队列、Direct、Topic、Fanou...

悟能的师兄的专栏 5926
下一篇: ftp 上传425异常记录
LZM_CODE
博客等级 码龄9年 1粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值