You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用RabbitMQ API出现401未授权错误的求助

解决RabbitMQ API调用401未授权问题

问题原因

你遇到的401错误是因为调用RabbitMQ管理API时未携带认证信息。你配置的spring.rabbitmq.username和spring.rabbitmq.password是给AMQP客户端使用的,和RestTemplate调用REST API无关,所以请求被服务端拒绝。另外你的application.properties里存在配置错误:spring.rabbitmq.addresses是用来指定AMQP服务地址的,不是API地址,应该改成localhost:5672或者直接删除(因为已经单独配置了host和port)。

修复步骤

1. 修正application.properties

spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
# 移除错误的API地址配置,或改为正确的AMQP地址
# spring.rabbitmq.addresses=localhost:5672
rabbitmq-api-url = http://localhost:8080/api/

2. 给RestTemplate添加Basic认证

修改你的StartupCLass,注入RabbitMQ的用户名密码,配置RestTemplate携带认证信息:

@Component
public class StartupCLass implements ApplicationListener<ApplicationReadyEvent> {

    @Value("${rabbitmq-api-url}")
    private String endpoint;
    @Value("${spring.rabbitmq.username}")
    private String rabbitUser;
    @Value("${spring.rabbitmq.password}")
    private String rabbitPass;

    @Override
    public void onApplicationEvent(ApplicationReadyEvent event) {
        // 构建带Basic认证的RestTemplate
        RestTemplate restTemplate = new RestTemplateBuilder()
                .basicAuthentication(rabbitUser, rabbitPass)
                .build();
        
        // 获取队列列表
        ResponseEntity<String> queuesResponse = restTemplate.getForEntity(endpoint + "queues", String.class);
        // 获取交换机列表
        ResponseEntity<String> exchangesResponse = restTemplate.getForEntity(endpoint + "exchanges", String.class);
        
        // 后续可将响应字符串解析为实体对象,与本地JSON文件对比
        // 例如用ObjectMapper解析成List<Queue>、List<Exchange>类型
    }
}

针对你的实际需求

拿到队列和交换机的响应后,你可以用Jackson的ObjectMapper把JSON字符串解析成自定义的实体类(比如包含name字段的Queue、Exchange类),再读取本地修改后的JSON文件并解析为相同类型的列表,通过对比两者的名称差异,找出被重命名的资源。

内容的提问来源于stack exchange,提问作者user20598130

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 06:15:40