问题标签 [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.
apache-zookeeper - Zookeeper 的分布式锁。如何避免重复检查最小节点
众所周知,在使用 Zookeeper 实现分布式锁时,为了避免“羊群效应”,我们将在下一个序列号最小的节点上设置 watcher。所以,一旦节点被删除,我们可以立即得到通知。
如果与最低序列号节点的连接意外中断,我们将检查节点是否有新的“下一个最低序列号节点”并在其上设置观察者。
但是如果现在与这个新建立的节点的连接断开了,我们必须一次又一次地检查我们设置观察者的节点的节点。
那么,有没有什么办法可以避免这种情况呢?
spring - 如何在 Spring 集成中使用 ShedLock?
我正在结合 Spring Batch 和 Spring Integration,我将 poller 与玉米一起使用:
我知道 Spring Integration JDBC 提供JDBCLockRepository
但我想知道如何使用 ShedLock。
spring-boot - 我可以为 FileWritingMessageHandler 提供自定义 FileLocker 吗?
我正在使用FileReadingMessageSource
带有自定义的 a FileLocker
:
现在我想FileLocker jdbcFileLocker
在处理文件后使用 来解锁文件FileWritingMessageHandler
:
我是否必须自己解锁文件,@ServiceActivator
或者我可以FileLocker
以某种方式将我的文件交给 FileWritingMessageHandler?
编辑:添加一个ExpressionEvaluatingRequestHandlerAdvice
所以我可以将它添加Advice
到我的FileWritingMessageHandler
:
然后通过@ServiceActivator
监听来处理解锁unlockChannel
。
java - 使用 Apache Curator 的分布式锁与 Redis 中的写入保持一致
我有基于 Redis 的缓存,其中我经常读取、创建和更新键值。为了避免脏读和写,我想使用 Apache Curator 实现分布式锁,因为我有多个微服务要执行这些操作。
这个想法是每次创建键值对时,我都想创建一个带有键的顺序临时节点。每当锁子发生变化时,我想观察这些变化并比较密钥,并以顺序方式在特定密钥上进行所有写入。
我的问题是如何观看事件并比较 Apache Curator 中的密钥。我们有关于钥匙级锁的任何例子吗?感谢你的帮助。
spring - Spring Boot:是否有调度程序锁允许多个 Spring 调度程序任务(基于 cron)在锁定期内多次运行?
我有一个 Spring Boot 应用程序,它有一个注释为 @Scheduled(cron = ....) 的 spring 调度程序,因为可以配置应用程序的多个容器,因此可以同时运行应用程序的多个实例。我想采用像 ShedLock 这样的分布式锁,以便在某个时间点只有一个调度程序实例运行。我尝试了 ShedLock,但即使该实例持有锁,它也不允许执行 spring 调度程序的多次运行。这对我来说不是一个可以接受的选择。那么我有什么选择呢?是否有任何分布式锁库可用于实现我的场景?
谢谢JK
sql-server - .NET Core TransactionScope 和 DistributedLock 的区别
大家,早安,
我们正在实现一种使用EF Core将文档存储到SqlServer的方法。
这个名为SAVE的方法由控制器的多个端点调用,并且可以从createDocument端点和另一个端点putDocument 使用。
一个额外的要求是此方法包含两个调用,将文档及其属性存储到2 个不同的存储库中,因此我们希望实现,如果对存储库的两个调用之一失败,它会回滚更改。
此外,整个代码托管在多台机器上,这就是为什么我们还实现了 macallon (GitHub) 的分布式锁库,以避免两台不同的机器同时访问/修改同一个文档。
混合使用这些解决方案是否正确?作为一个菜鸟,transactionScope已经是一个锁,从某种意义上说,在事务期间,其他机器甚至无法访问 Db 中的同一行,但请帮助我理解。谢谢
lockhandler 只是一个包装器,它调用distributedLock、SqlDistributedReaderWriterLock 并以document.Guid 作为其名称
c# - SQL 分布式锁在处置时未释放
我正在尝试来自DistributedLock nuget的分布式锁。
这是我使用的代码片段:
问题是我总是在第一次获取锁后超时,就好像它永远不会被释放一样。虽然据说锁在处理后会被释放。但这并没有发生。第二个任务永远无法进入锁。
我得到的输出是:
然后我得到超时。
redis - 如果 Redis 集群中的分片失败会发生什么?
我们有一个 Redis 集群,其中包含 3 个分片,每个分片都有一个副本节点。如果在分片中获得锁并且当线程持有锁时,主节点和副本节点将关闭。集群会等到分片恢复运行并且直到那时才接受新的锁,还是会使用 2 个分片运行并在新分片中创建新锁?
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。尽管远程系统允许多个进程同时连接,但它实际上无法处理此问题,并且将开始以循环方式发送消息,即使这不应该发生。
redis - 带有 redisson 的分布式锁引发异常
我正在开发一个通过 tcp 套接字从设备读取数据的微服务。微服务也将服务于不同的服务器。因此,设计了分布式结构。在 redis 上创建了一个 RMapCache,以便设备可以被不同的服务定期查询。此 Map 保留进程中设备的当前 IP 信息。不希望同时向同一个 ip 发送多个请求。为将 ip 添加到此地图而创建的方法代码如下。在该方法中,已实现 redisson FairLock 以使代码块线程安全。
但是,当同时运行多个服务实例时,会抛出如下异常。