当前位置: 首页 > 知识库问答 >
问题:

微服务实例间的JPA同步

爱唯
2023-03-14

我有个计时器工作

@Component
public class Worker {

    @Scheduled(fixedDelay = 100)
    public void processEnvironmentActions() {
        Job job = pickJob();
    }

    public Job pickJob() {
        Job job = jobRepository.findFirstByStatus(Status.NOT_PROCESSED);
        job.setStatus(Status.PROCESSING);
        jobRepository.save(job);
        return job;
    }
}

现在,在大多数情况下,这会给我正确的结果。但如果有两个微服务实例同时执行这段代码,会发生什么呢?

共有1个答案

郁光熙
2023-03-14

但如果有两个微服务实例同时执行这段代码,会发生什么呢?

答案常常是:这要看情况而定。

所有这些都假设您的代码在事务中运行

无(JPA级别)锁定。

如果job实体没有version属性,则JPA将默认不应用任何锁定。访问作业的第二个进程将发出一个更新,该更新本质上是一个NOOP,因为第一个进程已经更新了它。两者都不会注意到问题。你可能想避免这样。

悲观锁定

当然,可能有库或框架可以为您处理这些细节。

 类似资料:
  • 什么是 CoolStore CoolStore 是在线电子商务平台,它由如下微服务构成。 不同服务代码地址如下: $ git clone https://github.com/gpte-appmod-microservices-advanced/inventory-service.git $ git clone https://github.com/gpte-appmod-microservic

  • 本文向大家介绍Spring Cloud多个微服务之间调用代码实例,包括了Spring Cloud多个微服务之间调用代码实例的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了Spring Cloud多个微服务之间调用代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 现在又一个学生微服务 user 和 学校微服务 school,如果u

  • 这更多的是一个系统设计问题。 让我们假设我有一个微服务体系结构,我有X个实例(用于负载平衡对服务的HTTP请求)。但是,也是Kafka主题的消费者。如何避免将同一消息处理X次(X是的实例数)<如果处理是幂等的,至少一次就可以了。它不需要是,但不能是。 服务A可以是订单服务。它生成关于用户向订单主题下单的消息。 服务B可以是支付服务。它使用订单主题中的消息向用户收费。 支付订单可能是幂等操作。但是,

  • 我们有一个具有多个副本的服务,它可以在没有事务和阻塞方法的情况下使用存储。因此我们需要通过某种“分片”键来同步多个实例之间的并发请求。现在,我们在Kubernetes环境中作为副本集托管该服务。 难道你不知道任何简单的开箱即用的方法,如何做到这一点,而不是从头开始实现它吗? 下面是我们如何做到这一点的几个想法: > 将服务部署为StatefulSet,并实现一些代理API,通过从HTTP请求分片密

  • 本教程是一个关于Python微服务的实战教程,根据测试驱动开发(TDD)的指导思想,开发容器化的Python微服务应用,涉及 TDD、Flask、React、Docker、微服务 等知识点。 在这个课程中,你将学习如何使用Docker快速创建开发环境、管理多个微服务,应用程序在本地运行后,您将学习怎样在生产环境部署应用。我们也会练习TDD(测试驱动开发),在你的项目中测试先行,我们重点将放在服务端