spring-boot-starter-amqp 无法使用仅具有写入权限的用户凭据将消息发送到 AMQP 交换
spring-boot-starter-amqp not able to send message to AMQP exchange using user credentials with only write permission
我正在尝试从 springboot 应用程序向 RabbitMQ 发送消息。
使用的依赖项(springboot 和 amqp):
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
<version>2.1.6.RELEASE</version>
</dependency>
我可以使用具有以下访问权限(读取、写入和配置)的用户凭据将消息发布到交易所:
但是当我使用没有配置权限的用户时失败,如下所示:
调用 rabbitTemplate.convertAndSend(exchange, null, message);
时收到错误:
CachingConnectionFactory : Channel shutdown: channel error; protocol method: #method<channel.close>(reply-code=403, reply-text=ACCESS_REFUSED - access to exchange 'MyExchangeName' in vhost 'my_vHost' refused for user 'my_user', class-id=40, method-id=10
我认为这是因为 Spring 它试图创建交换或检查交换是否存在(使用管理员 API)。如果是这样的话,我们可以使用一些 属性?
来禁用它吗?
删除任何 Exchange/Queue/Binding
@Bean
或将 shouldDeclare
属性 设置为 false
。
@SpringBootApplication
public class So62316257Application {
public static void main(String[] args) {
SpringApplication.run(So62316257Application.class, args);
}
@Bean
public DirectExchange exchange() {
DirectExchange exchange = new DirectExchange("foo");
exchange.setShouldDeclare(false);
return exchange;
}
@Bean
public ApplicationRunner runner(RabbitTemplate template) {
return args -> {
template.convertAndSend("foo", "", "bar");
};
}
}
我正在尝试从 springboot 应用程序向 RabbitMQ 发送消息。 使用的依赖项(springboot 和 amqp):
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
<version>2.1.6.RELEASE</version>
</dependency>
我可以使用具有以下访问权限(读取、写入和配置)的用户凭据将消息发布到交易所:
但是当我使用没有配置权限的用户时失败,如下所示:
调用 rabbitTemplate.convertAndSend(exchange, null, message);
时收到错误:
CachingConnectionFactory : Channel shutdown: channel error; protocol method: #method<channel.close>(reply-code=403, reply-text=ACCESS_REFUSED - access to exchange 'MyExchangeName' in vhost 'my_vHost' refused for user 'my_user', class-id=40, method-id=10
我认为这是因为 Spring 它试图创建交换或检查交换是否存在(使用管理员 API)。如果是这样的话,我们可以使用一些 属性?
来禁用它吗?删除任何 Exchange/Queue/Binding
@Bean
或将 shouldDeclare
属性 设置为 false
。
@SpringBootApplication
public class So62316257Application {
public static void main(String[] args) {
SpringApplication.run(So62316257Application.class, args);
}
@Bean
public DirectExchange exchange() {
DirectExchange exchange = new DirectExchange("foo");
exchange.setShouldDeclare(false);
return exchange;
}
@Bean
public ApplicationRunner runner(RabbitTemplate template) {
return args -> {
template.convertAndSend("foo", "", "bar");
};
}
}