小编mir*_*rec的帖子

如何并行运行更多相同@Scheduled 作业的执行?

我有一个这样的实现,但不起作用。如您所见,作业大约需要 5 秒,运行时间应为fixedRate1 秒。这意味着应该有大约 5 个作业并行运行,但 Spring 等待完成一项作业后再开始另一个作业...如果我添加第二个具有相同参数的 @Scheduled 作业“schedule2”,我有 2 个不同的作业并行运行,但从来没有同一份工作。有可能以某种方式实现这一目标吗?

@Scheduled(fixedRate = 1000)
private void schedule1() {
    int index = atomicInteger1.addAndGet(1); 
    logger.info("Run Schedule1 nr.{} started at: {}", index, LocalDateTime.now());
    try {
        Thread.sleep(5000);
    } catch (InterruptedException e) {
        Thread.currentThread().interrupt();
    } finally {
        logger.info("Schedule1 nr.{} finished at: {}", index, LocalDateTime.now());
    }
}

@Bean(destroyMethod = "shutdown")
public Executor taskExecutor() {
    return Executors.newScheduledThreadPool(10);
}
Run Code Online (Sandbox Code Playgroud)

java spring spring-boot

5
推荐指数
1
解决办法
1096
查看次数

如何让多个 Fe​​ignClient-s 使用相同的 serviceId/name?

假设有 2 个端点:

@RequestMapping("/ep1")
interface Endpoint1 {
    @GetMapping("/echo")
    String echo();
}

@RequestMapping("/ep2")
interface Endpoint2 {
    @GetMapping("/echo")
    String echo();
}
Run Code Online (Sandbox Code Playgroud)

在后端,两者都在同一服务器中运行,该服务器在 Eureka 或 Consul 中注册为 serviceId="MY-SERVER" 或...

@RestController
public class Endpoint1Controller implements Endpoint1 {
    public String echo() {
        return "echo from Endpoint1"
    }
}
@RestController
public class Endpoint2Controller implements Endpoint2 {
    public String echo() {
        return "echo from Endpoint2"
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我的 2 个 FeignClients 必须共享相同的名称/serviceId 才能发现 Eureka/Consul 中的服务,但每个 feign 客户端的 serviceId 应该是唯一的!……这该怎么处理?

@FeignClient("MY-SERVER")
public interface Endpoint1Client extends Endpoint1 {
} …
Run Code Online (Sandbox Code Playgroud)

spring spring-boot spring-cloud-feign feign openfeign

5
推荐指数
1
解决办法
4307
查看次数