You need to enable JavaScript to run this app.
文档中心
消息队列 RabbitMQ版

消息队列 RabbitMQ版

复制全文
下载 pdf
Spring Boot SDK
配置连接隔离
复制全文
下载 pdf
配置连接隔离
本文介绍在 AMQP 协议下,使用 Spring Boot 连接 RabbitMQ 实例时,如何配置连接隔离。​
准备工作​
  • 在 RabbitMQ 实例详情页中获取 AMQP 接入点。如需为实例开启公网访问,请参见设置公网访问。​
  • 直接使用管理员用户进行生产和消费,可能会有信息泄露风险。您在进行生产和消费前,需要先在 RabbitMQ 集群管理 Web UI 上创建一个非 Admin 角色的新用户,并为新用户绑定 Virtual Host。操作步骤,请参见绑定用户和 Vhost。​
  • 提前在 RabbitMQ 集群管理 Web UI 上创建 Queue 和 Exchange。​
步骤一:添加依赖​
在pom.xml文件中添加以下依赖:​
​
<dependency>​
<groupId>org.springframework.boot</groupId>​
<artifactId>spring-boot-starter-amqp</artifactId>​
<version>2.3.1.RELEASE</version>​
</dependency>​
<dependency>​
<groupId>org.springframework.boot</groupId>​
<artifactId>spring-boot-starter-web</artifactId>​
<version>2.3.1.RELEASE</version>​
</dependency>​
​
步骤二:准备配置文件​
在resources路径下,创建配置文件application.yml。请正确填写 RabbitMQ 实例相关配置后,将以下内容填写到配置文件中。​
​
spring:​
rabbitmq:​
host: rbtmq-516***.rabbitmq.volces.com​
port: 5671​
virtual-host: /​
username: doc-user​
password: user-password​
# 如果实例开启公网访问,需要配置如下信息。​
ssl:​
enabled: true​
algorithm: TLSv1.2​
verify-hostname: false​
validate-server-certificate: false​
​
步骤三:配置连接隔离​
选择以下任意一种策略实现连接隔离。​
​
使用独立 Publisher Connection
显式配置双 ConnectionFactory
​
在RabbitTemplate中设置setUsePublisherConnection(true),使消息发布使用独立的publisher connection,示例代码如下:​
​
@Bean​
public RabbitTemplate rabbitTemplate(CachingConnectionFactory cf) {​
RabbitTemplate template = new RabbitTemplate(cf);​
template.setUsePublisherConnection(true); // 使用独立的 publisher connection 发布消息​
return template;​
}​
​
​
​
步骤四:配置超时与确认参数​
选择以下任意一种方式配置超时与确认参数。​
​
配置文件配置
代码配置
​
​
spring:​
rabbitmq:​
connection-timeout: 30s​
publisher-confirm-type: correlated # none / simple / correlated,默认是 fire-and-forget,无法超时​
publisher-returns: true​
cache:​
channel:​
size: 25 # channelCacheSize,请根据业务实际情况调整至合适值​
checkout-timeout: 5s # channelCheckoutTimeout,大于 0 时 size 变成硬上限​
​
​
​
步骤五:配置 BlockedListener 与业务熔断​
建议增加BlockedListener和业务熔断配置,避免 Tomcat 线程池被耗尽。​
  1. 在publisherConnectionFactory上添加事件监听,示例代码如下:​
  • ​
    ConnectionFactory publisherCf = cf.getPublisherConnectionFactory();​
    ​
    if (publisherCf != null) {​
    publisherCf.addConnectionListener(connection ->​
    connection.addBlockedListener(new BlockedListener() {​
    @Override​
    public void handleBlocked(String reason) {​
    log.warn("Publisher 连接被 BLOCK,原因: {}", reason);​
    }​
    ​
    @Override​
    public void handleUnblocked() {​
    log.info("Publisher 连接已 UNBLOCK,恢复发布");​
    }​
    })​
    );​
    }​
    ​
  1. 根据BlockedListener状态,判断是否允许发送消息,如果不允许,应避免向 RabbitMQ 服务端发起请求,业务可进行降级处理(fallback),将消息存储到其他存储系统。​
最近更新时间:2026.08.18 18:43:47
这个页面对您有帮助吗?
有用
有用
无用
无用