spring-boot - 如何及时(每10分钟)从微服务(SpringBoot)连接到RabbitMQ 3次
问题描述
我的 Java 微服务(SpringBoot 应用程序)检测到由于 RabbitMQ 关闭而丢失的 RabbitMQ 连接。但是它应该如何在一定时间后尝试重新连接(例如 3 秒,3 次)。如果 3 次尝试后仍然无法连接,那么如何触发邮件。
解决方案
因为您使用的是 Spring Boot,所以您可以使用 Spring Retry 功能。
我不了解 RabbitMQ,因此代码仅供您提出想法(不会编译)。
假设您有一个尝试连接到 RabbitMQ 的方法,或者尝试向 RabbitMQ 发送一些东西:
@Retryable(value = {RabbitMQConnectinTimeoutException.class},
maxAttempts = 3,
backoff = @Backoff (3000))
public boolean sendRabbitMQmessage(final String message) {
RabbitMQConnection.sendMessage(message); // this method can throw RabbitMQConnectinTimeoutException
}
使用@Retryable
注解,当方法抛出 RabbitMQConnectinTimeoutException 时,Spring 将重试您的方法 3 次,回退时间为 3000 毫秒。
3 次尝试后,如果 RabbitMQConnectinTimeoutException 仍然发生,则该sendEmail
方法将被执行,因为@Recover
:
@Recover
public void sendEmail(RabbitMQConnectinTimeoutException e) {
Email.send(YOUR_EMAIL_MESSAGE);
}
在上面的示例中,我假设您是sendRabbitMQmessage
从另一个@Service
. 如果您想每 10 分钟运行一次此方法,则还应使用sendRabbitMQmessage
以下注释@Scheduled
:
@Scheduled(fixedDelayString = "600000", initialDelayString = "1000")
@Retryable(value = {RabbitMQConnectinTimeoutException.class}
maxAttempts = 3,
backoff = @Backoff (3000))
public boolean sendRabbitMQmessage(final String message) { ... }
推荐阅读
- c++ - 现代 C++ 会支持 C#“Object Initalizer”语法吗?
- vb.net - 如何在 vb.net 中运行静默模式批处理脚本命令
- sql - ms访问查询有
- bash - 使用 clickhouse-client 的查询中未显示列字段名称 | 重击
- javascript - Why I am getting Uncaught ReferenceError is not defined error in jquery
- corda - 使用 CordaService 从 CorDapp 访问数据库
- intellij-idea - 在 Intellij 中用黄瓜配置量角器
- php - RatchetPHP 无法循环向所有客户端发送消息
- wordpress - 在 wordpress woocommerce 上减小图像大小
- angularjs - 邮递员 POST 工作,但 AngularJS 投掷 404