
Dapr 分布式锁
分布式锁简介
简单来讲:两个人做一件事情,同一时间内,我做的时候你不可以做,除非我没有在规定的时间内完成这项任务。
创建分布式锁项目
首先添加好Dapr.AspNetCore
包,并在components
目录下创建lockstore.yaml
组件,用于添加分布式锁的组件。
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: lockstore
spec:
type: lock.redis
metadata:
- name: redisHost
value: localhost:6379
- name: redisPassword
value: ""
然后我们在Program.cs
中创建分布式锁的代码,代码意思是:添加一个lockstore锁,设置锁定资源的ID为mylock
,锁的拥有者是random_id_abc123
,当所在5分钟内没有完成该任务将会自动退出。
拿到锁之后,工作5分钟。
内容如下:
using Dapr.Client;
string DAPR_LOCK_NAME = "lockstore";
var client = new DaprClientBuilder().Build();
var my_file_name = "mylock";
var sleepmin = 5;
await using (var fileLock = await client.Lock(DAPR_LOCK_NAME, my_file_name, "random_id_abc123", sleepmin * 60))
{
if (fileLock.Success)
{
Console.WriteLine("Success!");
Thread.Sleep(sleepmin * 60 * 1000);
}
else
{
Console.WriteLine($"Failed to lock {my_file_name}.");
}
Console.WriteLine("Finish!");
}
关于Lock方法中的参数意义如下表所示:
参数 | 描述 |
---|---|
storeName | 锁名称 |
resourceId | 要锁定的资源的 ID。可以是任何值 |
lockOwner | 锁拥有者的名字。应为每个请求设置一个唯一值 |
expiryInSeconds | 在过期之前持有锁的时间(以秒为单位) |
接下来我们到项目目录中打开两个命令窗口,分别通过如下命令运行dapr。
dapr run --app-id locker --dapr-grpc-port 50001 --components-path ./components -- dotnet run
dapr run --app-id locker --dapr-grpc-port 50002 --components-path ./components -- dotnet run
我们可以清楚的看到第一个窗口锁住了,第二个没有获取到锁。
注意:必须是同一应用。
创建分布式解锁项目
项目结构如下,只是Program.cs里面变成解锁的代码。
using Dapr.Client;
string DAPR_LOCK_NAME = "lockstore";
var client = new DaprClientBuilder().Build();
var response = await client.Unlock(DAPR_LOCK_NAME, "mylock", "random_id_abc123");
Console.WriteLine(response.status);
接下来我们通过dapr运行锁的项目。
dapr run --app-id locker --dapr-grpc-port 50001 --components-path ./components -- dotnet run
此时已经锁住了,然后我们到解锁的项目目录下打开一个命令窗口,执行locker应用的解锁。
dapr run --app-id locker --dapr-grpc-port 50002 --components-path ./components -- dotnet run
然后我们再打开一个新的命令窗口,发现它又可以锁住了。
dapr run --app-id locker --dapr-grpc-port 50003 --components-path ./components -- dotnet run
欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739
评价
排名
2
文章
634
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 :
好是好,这个对效率影响大不大哇,效率高不高
一个bug让程序员走上法庭 索赔金额达400亿日元
剑轩 : 有点可怕
ASP.NET Core 服务注册生命周期
剑轩 :
http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:
50010702506256


欢迎加群交流技术