背景信息
我正在使用
spring-boot-starter-amqp
依赖项连接到 RabbitMQ。
在我的 application.yaml 中我有:
spring:
rabbitmq:
host: <host>
port: 5672
username: <username>
password: <password>
我有一个配置类,我在其中定义了一个 AmqpTemplate,如下所示:
@Bean
public AmqpTemplate amqpSenderTemplate(ConnectionFactory connectionFactory) {
RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
rabbitTemplate.setMessageConverter(jsonConverter());
return rabbitTemplate;
}
我有这样定义的听众:
@Component
@RequiredArgsConstructor
public class EventListener {
private final SomeService someService;
@RabbitListener(queues = "${rabbitmq.event.someQueue}")
public void process(SomeEvent event) {
this.someService.process(event);
}
我们使用配置树将用户名和密码注入到我们的容器中:
spring.config.import: configtree:/etc/apiconfig, ...
配置树包含来自 Hashicorp Vault 的动态机密。
问题/问题
出于安全原因,RabbitMQ 凭证经常会轮换并使用配置树重新注入。 我不明白如何刷新 Amqp 连接,以便它可以处理凭证轮换而无需重新启动容器。 因此,接收 (@rabbitlistener) 和发送 (amqpTemplate) 都需要重置连接。
有人可以指出我正确的方向吗?
我已经研究过@RefreshScope和spring-bus,但我不明白:
非常感谢任何代码示例!
请注意,使用 Hashicorp 的 configtree 的设置无法更改。 另请注意,容器正在 Kuberenetes 上运行。
Spring 开发团队的 Josh Long 已经分享了一个简单的教程,介绍如何使用 Hashicorp Vault 进行 凭证轮换示例,而无需手动点击任何刷新端点。
请按照他的教程这里。