问题标签 [distributed-lock]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
53 浏览

apache-zookeeper - Zookeeper 的分布式锁。如何避免重复检查最小节点

众所周知,在使用 Zookeeper 实现分布式锁时,为了避免“羊群效应”,我们将在下一个序列号最小的节点上设置 watcher。所以,一旦节点被删除,我们可以立即得到通知。

如果与最低序列号节点的连接意外中断,我们将检查节点是否有新的“下一个最低序列号节点”并在其上设置观察者。

但是如果现在与这个新建立的节点的连接断开了,我们必须一次又一次地检查我们设置观察者的节点的节点。

那么,有没有什么办法可以避免这种情况呢?

0 投票
1 回答
175 浏览

spring - 如何在 Spring 集成中使用 ShedLock?

我正在结合 Spring Batch 和 Spring Integration,我将 poller 与玉米一起使用:

我知道 Spring Integration JDBC 提供JDBCLockRepository但我想知道如何使用 ShedLock。

0 投票
1 回答
41 浏览

spring-boot - 我可以为 FileWritingMessageHandler 提供自定义 FileLocker 吗?

我正在使用FileReadingMessageSource带有自定义的 a FileLocker

现在我想FileLocker jdbcFileLocker在处理文件后使用 来解锁文件FileWritingMessageHandler

我是否必须自己解锁文件,@ServiceActivator或者我可以FileLocker以某种方式将我的文件交给 FileWritingMessageHandler?


编辑:添加一个ExpressionEvaluatingRequestHandlerAdvice

所以我可以将它添加Advice到我的FileWritingMessageHandler

然后通过@ServiceActivator监听来处理解锁unlockChannel

0 投票
0 回答
206 浏览

java - 使用 Apache Curator 的分布式锁与 Redis 中的写入保持一致

我有基于 Redis 的缓存,其中我经常读取、创建和更新键值。为了避免脏读和写,我想使用 Apache Curator 实现分布式锁,因为我有多个微服务要执行这些操作。

这个想法是每次创建键值对时,我都想创建一个带有键的顺序临时节点。每当锁子发生变化时,我想观察这些变化并比较密钥,并以顺序方式在特定密钥上进行所有写入。

我的问题是如何观看事件并比较 Apache Curator 中的密钥。我们有关于钥匙级锁的任何例子吗?感谢你的帮助。

0 投票
0 回答
181 浏览

spring - Spring Boot:是否有调度程序锁允许多个 Spring 调度程序任务(基于 cron)在锁定期内多次运行?

我有一个 Spring Boot 应用程序,它有一个注释为 @Scheduled(cron = ....) 的 spring 调度程序,因为可以配置应用程序的多个容器,因此可以同时运行应用程序的多个实例。我想采用像 ShedLock 这样的分布式锁,以便在某个时间点只有一个调度程序实例运行。我尝试了 ShedLock,但即使该实例持有锁,它也不允许执行 spring 调度程序的多次运行。这对我来说不是一个可以接受的选择。那么我有什么选择呢?是否有任何分布式锁库可用于实现我的场景?

谢谢JK

0 投票
0 回答
196 浏览

sql-server - .NET Core TransactionScope 和 DistributedLock 的区别

大家,早安,

我们正在实现一种使用EF Core将文档存储到SqlServer的方法。

这个名为SAVE的方法由控制器的多个端点调用,并且可以从createDocument端点和另一个端点putDocument 使用

一个额外的要求是此方法包含两个调用,将文档及其属性存储到2 个不同的存储库中,因此我们希望实现,如果对存储库的两个调用之一失败,它会回滚更改。

此外,整个代码托管在多台机器上,这就是为什么我们还实现了 macallon (GitHub) 的分布式锁库,以避免两台不同的机器同时访问/修改同一个文档。

混合使用这些解决方案是否正确?作为一个菜鸟,transactionScope已经是一个锁,从某种意义上说,在事务期间,其他机器甚至无法访问 Db 中的同一行,但请帮助我理解。谢谢

lockhandler 只是一个包装器,它调用distributedLock、SqlDistributedReaderWriterLock 并以document.Guid 作为其名称

0 投票
0 回答
85 浏览

c# - SQL 分布式锁在处置时未释放

我正在尝试来自DistributedLock nuget的分布式锁。

这是我使用的代码片段:

问题是我总是在第一次获取锁后超时,就好像它永远不会被释放一样。虽然据说锁在处理后会被释放。但这并没有发生。第二个任务永远无法进入锁。

我得到的输出是:

然后我得到超时。

0 投票
1 回答
43 浏览

redis - 如果 Redis 集群中的分片失败会发生什么?

我们有一个 Redis 集群,其中包含 3 个分片,每个分片都有一个副本节点。如果在分片中获得锁并且当线程持有锁时,主节点和副本节点将关闭。集群会等到分片恢复运行并且直到那时才接受新的锁,还是会使用 2 个分片运行并在新分片中创建新锁?

0 投票
0 回答
23 浏览

hazelcast - Hazelcast 中 CP 数据结构的会话超时

我们正在为我们的应用程序使用 Hazelcast 3。但是,我们需要升级到 Hazelcast 4,因为 Hazelcast 3 已停产。Hazelcast 4 放弃了对信号量等基于 AP 的数据结构的支持。我们使用信号量进行分布式进程协调。

与基于 CP 的替换相比,基于 AP 的信号量表现不同。基于 CP 的信号量与 CP 会话相关联。此会话的生存时间为 300 秒(默认值)。根据我们的经验,这意味着在集群收到 CP 会话的最后一次心跳后 5 分钟后,信号量才会自动释放。

这意味着在这 5 分钟过去之前,其他进程无法获取信号量。使用基于 AP 的信号量,我们可以设置更小的超时(在我们的例子中为 5 秒)。我们可以用 5 秒多一点的时间逃脱,但 5 秒和 5 分钟之间的区别在于 bug。

尽管可以将 CP 会话的生存时间设置为小于 5 分钟的值,但Hazelcast 在他们自己的网站上建议不要这样做

我们正在寻找一种方法来安全地执行分布式过程控制,而不必依赖全局 CP 会话的生存时间。但是,我们无法在 Hazelcast 中找到它。有谁知道这样做的方法?

我们使用它来限制一次可以从远程系统读取的进程数为 1。尽管远程系统允许多个进程同时连接,但它实际上无法处理此问题,并且将开始以循环方式发送消息,即使这不应该发生。

0 投票
1 回答
138 浏览

redis - 带有 redisson 的分布式锁引发异常

我正在开发一个通过 tcp 套接字从设备读取数据的微服务。微服务也将服务于不同的服务器。因此,设计了分布式结构。在 redis 上创建了一个 RMapCache,以便设备可以被不同的服务定期查询。此 Map 保留进程中设备的当前 IP 信息。不希望同时向同一个 ip 发送多个请求。为将 ip 添加到此地图而创建的方法代码如下。在该方法中,已实现 redisson FairLock 以使代码块线程安全。

但是,当同时运行多个服务实例时,会抛出如下异常。