全面的 Spring Boot 整合 RabbitMQ 的 `application.yml` 配置示例

spring:rabbitmq:# ===== 基础连接配置 =====host: localhost             # RabbitMQ 服务器地址port: 5672                  # 默认端口username: guest             # 默认用户名password: guest             # 默认密码virtual-host: /             # 虚拟主机(默认/)# ===== 连接池配置 =====connection-timeout: 5s      # 连接超时时间cache:connection:mode: CHANNEL           # 连接缓存模式: CHANNEL(默认)/CONNECTIONsize: 25                # 缓存连接数# ===== SSL/TLS 安全配置 =====ssl:enabled: false            # 启用 SSLalgorithm: TLSv1.2        # SSL 算法key-store: /path/to/keystore.jkskey-store-password: secrettrust-store: /path/to/truststore.jkstrust-store-password: secret# ===== 生产者配置 =====template:retry:enabled: true           # 启用发送重试max-attempts: 3         # 最大重试次数initial-interval: 1000ms # 初始重试间隔multiplier: 2.0         # 重试间隔倍数mandatory: true           # 强制消息路由(触发ReturnCallback)receive-timeout: 5000ms   # 接收超时时间(用于接收操作)# ===== 消费者配置 =====listener:type: direct              # 监听器类型: direct/simplesimple:concurrency: 5          # 最小消费者线程数max-concurrency: 10     # 最大消费者线程数prefetch: 50            # 每次预取消息数量auto-startup: true      # 是否自动启动监听器acknowledge-mode: auto  # 确认模式: auto(自动)/manual(手动)/none(无)retry:enabled: true         # 启用消费重试max-attempts: 3       # 最大重试次数initial-interval: 1000msmultiplier: 2.0max-interval: 10000msdefault-requeue-rejected: false  # 拒绝消息时不重新入队# ===== 高级配置 =====connection-factory:requested-heartbeat: 60s  # 心跳超时时间connection-timeout: 5s    # 连接建立超时publisher-confirm-type: correlated  # 发布者确认模式: none/correlated/simplepublisher-returns: true     # 启用发布者返回模式# ===== 自定义交换机/队列/绑定配置 =====direct-exchange: my-direct-exchangequeue: my-queuerouting-key: my.routing.key# ===== 死信队列配置 =====dead-letter-exchange: dlx.exchangedead-letter-routing-key: dlx.routing.key# ===== 自定义属性扩展 =====
custom:rabbit:queue:order-queue:name: orders.queuedurable: trueexclusive: falseauto-delete: falsenotification-queue:name: notifications.queuedurable: truettl: 60000  # 消息存活时间(ms)exchange:orders-exchange:name: orders.exchangetype: topicdurable: true

主要配置项说明:

  1. 连接配置

    • host/port: RabbitMQ 服务器地址
    • username/password: 认证信息
    • virtual-host: 虚拟主机隔离环境
    • connection-timeout: 连接超时时间
  2. 生产者配置

    • template.retry: 消息发送失败的重试策略
    • publisher-confirm-type: 消息确认机制
    • publisher-returns: 路由失败消息回调
  3. 消费者配置

    • listener.simple.concurrency: 消费者并发设置
    • prefetch: 控制流量(QoS)
    • acknowledge-mode: 消息确认方式
    • retry: 消费失败的重试策略
  4. 高级配置

    • cache.connection: 连接池配置
    • ssl: 安全连接配置
    • dead-letter-exchange: 死信队列设置
  5. 自定义队列/交换机

    • 可通过自定义属性定义多个队列/交换机
    • 支持 TTL、持久化等参数配置

重要注意事项:

  1. 确认模式选择

    • auto: Spring 自动确认(默认)
    • manual: 需手动调用 basicAck
    • none: 无确认(不推荐)
  2. 死信队列配置

    java代码

    @Bean
    public Queue orderQueue() {return QueueBuilder.durable(orderQueueName).deadLetterExchange("dlx.exchange").deadLetterRoutingKey("dlx.routing.key").build();
    }
    
  3. 消息转换器
    推荐使用 JSON 序列化:

    java代码

    @Bean
    public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {RabbitTemplate template = new RabbitTemplate(connectionFactory);template.setMessageConverter(jsonMessageConverter());return template;
    }
    
  4. 消费者并发控制

    yaml代码

    listener:simple:concurrency: 3  # 初始消费者数量max-concurrency: 10 # 最大消费者数量
    
  5. 生产环境建议

    • 启用 TLS 加密通信
    • 使用连接池 (cache.connection.size)
    • 配置合理的重试策略
    • 启用消息确认机制
    • 设置死信队列处理失败消息

根据实际业务需求调整配置参数,特别是并发数、prefetch count 和重试策略,这些对系统性能有显著影响。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/87715.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/87715.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Win32 API实现串口辅助类

近期需要使用C++进行串口通讯,将Win32 API串口接口进行了下封装,可实现同步通讯,异步回调通讯 1、SerialportMy.h #pragma once #include <Windows.h> #include <thread> #include <atomic> #include <functional> #include <queue> #inclu…

Python-执行系统命令-subprocess

1 需求 2 接口 3 示例 4 参考资料 Python subprocess 模块 | 菜鸟教程

Web攻防-XMLXXE上传解析文件预览接口服务白盒审计应用功能SRC报告

知识点&#xff1a; 1、WEB攻防-XML&XXE-黑盒功能点挖掘 2、WEB攻防-XML&XXE-白盒函数点挖掘 3、WEB攻防-XML&XXE-SRC报告 一、演示案例-WEB攻防-XML&XXE-黑盒功能点挖掘 1、不安全的图像读取-SVG <?xml version"1.0" standalone"yes&qu…

浏览器工作原理37 [#] 浏览上下文组:如何计算Chrome中渲染进程的个数?

一、前言 在默认情况下&#xff0c;如果打开一个标签页&#xff0c;那么浏览器会默认为其创建一个渲染进程。 如果从一个标签页中打开了另一个新标签页&#xff0c;当新标签页和当前标签页属于同一站点&#xff08;相同协议、相同根域名&#xff09;的话&#xff0c;那么新标…

位置编码和RoPE

前言 关于位置编码和RoPE 应用广泛&#xff0c;是很多大模型使用的一种位置编码方式&#xff0c;包括且不限于LLaMA、baichuan、ChatGLM等等 第一部分 transformer原始论文中的标准位置编码 RNN的结构包含了序列的时序信息&#xff0c;而Transformer却完全把时序信息给丢掉了…

手动使用 Docker 启动 MinIO 分布式集群(推荐生产环境)

在生产环境中&#xff0c;MinIO 集群通常部署在多个物理机或虚拟机上&#xff0c;每个节点运行一个 MinIO 容器&#xff0c;并通过 Docker 暴露 API 和 Console 端口。 1. 准备工作 假设有 4 台服务器&#xff08;也可以是同一台服务器的不同端口模拟&#xff0c;但不推荐生产…

如何在IntelliJ IDEA中设置数据库连接全局共享

在现代软件开发中&#xff0c;数据库连接管理是开发过程中不可或缺的一部分。为了提高开发效率&#xff0c;减少配置错误&#xff0c;并方便管理&#xff0c;IntelliJ IDEA 提供了一个非常有用的功能&#xff1a;数据库连接全局共享。通过这个功能&#xff0c;你可以在多个项目…

【Python】文件应用: 查找读取的文件内容

查找读取的文件内容 from pathlib import Pathpath Path(pi_million_digits.txt) contents path.read_text()lines contents.splitlines() pi_string for line in lines:pi_string line.lstrip()birthday input("Enter your birthday, in the form mmddyy: "…

交互式剖腹产手术模拟系统开发方案

以下是为您设计的《交互式剖腹产手术模拟系统》开发方案框架,包含技术实现路径与详细内容结构建议。由于篇幅限制,这里呈现核心框架与关键模块说明: 交互式剖腹产手术模拟系统开发方案 一、项目背景与意义 1.1 传统医学教学痛点分析 尸体标本成本高昂(约$2000/例)活体训…

AWS WebRTC: 判断viewer端拉流是否稳定的算法

在使用sdk-c viewer端进行拉流的过程中&#xff0c;viewer端拉取的是视频帧和音频帧&#xff0c;不会在播放器中播放&#xff0c;所以要根据收到的流来判断拉流过程是否稳定流畅。 我这边采用的算法是&#xff1a;依据相邻帧之间的时间间隔是否落在期望值的 20% 范围内。 音频…

【Python】文件读取:逐行读取应用实例——从一个JSONL文件中逐行读取文件

从一个JSONL文件中逐行读取文件&#xff0c;并将这些问题保存到一个新的JSONL文件中 import json import argparse import os # 导入os模块用于检查文件是否存在def read_questions_from_jsonl(file_path, limit):"""从JSONL文件中读取指定数量的question部分…

百宝箱生成智能体

点击新建应用 工作流如下&#xff1a; 点击发布 点击Web服务&#xff0c;上架

嵌入式 数据结构学习(五) 栈与队列的实现与应用

一、栈(Stack)详解 1. 栈的基本概念 栈的定义与特性 后进先出(LIFO)&#xff1a;最后入栈的元素最先出栈 操作限制&#xff1a;只能在栈顶进行插入(push)和删除(pop)操作 存储位置&#xff1a;我们实现的链栈位于堆区(malloc分配)&#xff0c;系统栈区存储函数调用信息 栈…

汇编与接口技术:8259中断实验

一、实验目的 该实验使学生掌握8259向量中断方式的硬件连接和软件编程的方法&#xff0c;同时使同学掌握中断和其它接口芯片配合来完成某一特定任务的方法。 二、实验内容 1、手动产生单脉冲作为中断请求信号连接到MIRQ3上和SIRT10上。每按一次开关产生一次中断&#xff0c;…

Ajax的初步学习

一、什么是 Ajax&#xff1f; Ajax (Asynchronous JavaScript and XML) 是一种无需重新加载整个网页的情况下&#xff0c;能够更新部分网页的技术。通过在后台与服务器进行少量数据交换&#xff0c;Ajax 可以使网页实现异步更新。 主要特性&#xff1a; 异步性 (Asynchronous…

OOM电商系统订单缓存泄漏,这是泄漏还是溢出

电商系统订单缓存泄漏的本质分析一、明确概念区别内存泄漏&#xff08;Memory Leak&#xff09;定义&#xff1a;对象已经不再被使用&#xff0c;但由于被错误引用而无法被垃圾回收特点&#xff1a;内存使用量随时间持续增长&#xff0c;最终可能导致OOM类比&#xff1a;像浴缸…

二进制安全-汇编语言-02-寄存器

二、寄存器 水滴石穿 一个典型的CPU由运算器、控制器、寄存器等器件构成&#xff0c;这些器件靠内部总线相连 内部总线实现CPU内部各个器件之间的联系&#xff0c;外部总线实现CPU和主板上其他器件的联系 简单说&#xff0c;在CPU中&#xff1a; 运算器进行信息处理寄存器进…

Java——初始guava(1)

基于 Google Guava 官方教程的解答 📚 Guava 提供了哪些 JDK 不具备的 API? Guava 扩展了 JDK 的集合框架,提供了多种 JDK 没有的实用 API: 不可变集合(Immutable Collections) ImmutableList、ImmutableSet、ImmutableMap 等特性:创建后不可修改,线程安全,性能优于…

day53

import torch import torch.nn as nn import torch.optim as optim from torch.utils.data import DataLoader, TensorDataset import numpy as np from sklearn.preprocessing import MinMaxScaler from sklearn.datasets import load_iris import warnings # 忽略不必要的警…

c++ python 共享内存

一、目的 是为了c来读取并解码传递给python&#xff0c;Python做测试非常方便&#xff0c;c 和 python之间必须定好协议&#xff0c;整体使用c 来解码&#xff0c;共享内存传递给python 二、主类 主类&#xff0c;串联decoder&#xff0c;注意decoder并没有直接在显存里面穿…