6

我试图环顾四周,看看如何修改我的执行器端点(特别是健康)以限制其频率。我想看看我是否可以将其设置为每分钟触发一次特定数据集(例如邮件),但留给其他人使用?

到目前为止,我似乎无法在任何地方找到这种逻辑。我能想到的唯一已知方法是创建自己的健康服务器:

@Component
@RefreshScope
public class HealthCheckService implements HealthIndicator, Closeable {
@Override
public Health health() {
    // check if things are stale
    if (System.currentTimeMillis() - this.lastUpdate.get() > this.serviceProperties.getMonitorFailedThreshold()) {
        String errMsg = '[' + this.serviceName + "] health status has not been updated in over ["
                + this.serviceProperties.getMonitorFailedThreshold() + "] milliseconds.  Last updated: ["
                + this.lastUpdate.get() + ']';
        log.error(errMsg);
        return Health.down().withDetail(this.serviceName, errMsg).build();
    }

    // trace level since this could be called a lot.

    if (this.detailMsg != null) {
        Health.status(this.status);
    }

    Health.Builder health = Health.status(this.status); 

    return health.build();
}

/**
 * Scheduled, low latency health check.
 */
@Scheduled(fixedDelayString = "${health.update-delay:60000}")
public void healthUpdate() {
    if (this.isRunning.get()) {
        if (log.isDebugEnabled()) {
            log.debug("Updating Health Status of [" + this.serviceName + "].  Last Status = ["
                    + this.status.getCode() + ']');
        }

        // do some sort of checking and update the value appropriately.
        this.status = Status.UP;
        this.lastUpdate.set(System.currentTimeMillis());

        if (log.isDebugEnabled()) {
            log.debug("Health Status of [" + this.serviceName + "] updated to [" + this.status.getCode() + ']');
        }
    }
}

我不确定是否有办法在春季将其专门设置为配置,或者解决此问题的唯一方法是构建自定义 HealthIndicator?

4

0 回答 0