Dapr官网https://docs.dapr.io
首先安装好docker,这里就不说了。
一、安装 Dapr CLI 脚手架工具(我这里装的1.1版)
可以通过wget -q https://raw.githubusercontent.com/dapr/cli/master/install/install.sh -O - | /bin/bash
这种方式安装
也可以手动下载安装,下载好dapr_linux_amd64.tar.gz别下载错了
放到centos7的/usr/local/bin目录下
进入目录cd /usr/local/bin
解压文件tar -zvxf dapr_linux_amd64.tar.gz
设置权限chmod 777 dapr
验证脚本架的安装dapr
1.3.0出来后,后来我又手动去下载安装了1.3.0的CLI,并且dapr uninstall --all移除旧版运行时,然后安装新版dapr init --runtime-version=1.3.0
.net5 demo代码https://download.csdn.net/download/junshangshui/20670286
二、初始化dapr
运行 dapr init
会自动下载Dapr的运行时 daprd ,并在Docker中启动3个容器:
dapr_placement:镜像是daprio/dapr,用于Dapr的Actor应用的注册
dapr_zipkin:镜像是openzipkin/zipkin,用于分布式跟踪
dapr_redis:镜像是redis,用于状态存储和发布 消息订阅处理
过一段时间下载完后输入docker images
就可看到这三个镜像了
再输入docker ps
可看到这三个镜像的容器
输入dapr --version
可看到CLI version: 1.1.0 Runtime version: 1.1.2
验证组件目录已初始化ls $HOME/.dapr
您应该看到bin components config.yaml
输入echo $HOME
可看到结果为/root
三、安装.net5 SDK
官网说明https://docs.microsoft.com/zh-cn/dotnet/core/install/linux-centos
安装准备
将 Microsoft 包签名密钥添加到受信任密钥列表,并添加 Microsoft 包存储库。
Sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
安装 SDKsudo yum install dotnet-sdk-5.0 -y
使用 dotnet --list-sdks
和 dotnet --list-runtimes
命令查看安装了哪些版本
四、dapr运行.net5程序
新建两个.net5 webapi项目,如下图,都安装Dapr.AspNetCore包
两个Startup都要添加AddDapr(),如下
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers().AddDapr();
}
UserController和TestController的代码分别如下
namespace Service1.Controllers
{
[ApiController]
[Route("[controller]")]
public class UserController : ControllerBase
{
private readonly ILogger<UserController> _logger;
public UserController(ILogger<UserController> logger)
{
_logger = logger;
}
[HttpGet]
public IEnumerable<string> Get()
{
_logger.LogInformation("查询用户信息");
return new[] { "张三", "李四", "王五" };
}
}
}
namespace Service2.Controllers
{
[ApiController]
[Route("[controller]")]
public class TestController : ControllerBase
{
private readonly ILogger<TestController> _logger;
public TestController(ILogger<TestController> logger)
{
_logger = logger;
}
[Route("info")]
[HttpGet]
public IEnumerable<string> Get()
{
// 1、创建Dapr客户端
var daprClient = new DaprClientBuilder().Build();
// 2、访问service1
var content = daprClient.InvokeMethodAsync<IEnumerable<string>>(HttpMethod.Get, "service1", "User").Result;
return content;
}
}
}
然后编译并发布这两个webapi
将发布后的service1和service2放到虚拟机中的/root/projects目录下
cd /root/projects/service1
dapr run --app-id service1 --app-port 5000 --dapr-http-port 6000 -- dotnet Service1.dll --urls "http://*:5000"
再新开一个终端
cd /root/projects/service2
dapr run --app-id service2 --app-port 7000 --dapr-http-port 8000 -- dotnet Service2.dll --urls "http://*:7000"
输入dapr list
可看到service1和service2已启动
在命令行分别输入
curl http://localhost:6000/v1.0/invoke/service1/method/user
curl http://localhost:8000/v1.0/invoke/service2/method/test/info
可打印出两次查询用户信息的log控制台日志
开放端口firewall-cmd --zone=public --add-port=5000/tcp --add-port=7000/tcp --permanent
重启防火墙firewall-cmd --reload
在我的win10里打开浏览器,输入虚拟机中centos的地址访问
http://192.168.3.180:5000/user
http://192.168.3.180:7000/Test/info
都能成功返回信息
Sidecar意义在于解耦基础设施和核心业务。
--dapr-http-port表示Dapr边车暴露的HTTP端口(默认50001)
--dapr-grpc-port表示Dapr边车暴露的gRPC端口(默认3500)
四、win10中docker运行.net5程序和dapr
service1项目和service2项目通过右键添加了Docker支持,还添加了docker-compose。
docker-compose.yml的代码如下
version: '3.4'
services:
service1:
image: ${DOCKER_REGISTRY-}service1
build:
context: .
dockerfile: Service1/Dockerfile
service1-dapr:
image: "daprio/daprd:1.2.0"
network_mode: "service:service1"
depends_on:
- service1
service2:
image: ${DOCKER_REGISTRY-}service2
build:
context: .
dockerfile: Service2/Dockerfile
service2-dapr:
image: "daprio/daprd:1.2.0"
network_mode: "service:service2"
depends_on:
- service2
docker-compose.override.yml的代码如下:
version: '3.4'
services:
service1:
environment:
- ASPNETCORE_ENVIRONMENT=Development
ports:
- "5001:80"
service1-dapr:
command: ["./daprd",
"-app-id", "service1",
#"-app-port", "5001",#不是5001而是用80
"-app-port", "80",
#"-dapr-http-port", "6000"#没有成功,以后再说
]
service2:
environment:
- ASPNETCORE_ENVIRONMENT=Development
ports:
- "5002:80"
service2-dapr:
command: ["./daprd",
"-app-id", "service2",
#"-app-port", "5002",#不是5002而是用80
"-app-port", "80",
#"-dapr-http-port", "8000"#没有成功,以后再说
]
用docker for windows桌面版,下面的是1.2.0版的dapr,如下图
在VS2019中,以Dock-compose运行,成功后如下
在我的win10里打开浏览器,输入地址,访问成功
http://localhost:5001/user
http://localhost:5002/Test/info