dapr学习
5.1、概念知识
官方文档:
Dapr 配置选项概述 | Dapr 文档库
run CLI 命令参考 | Dapr 文档库
该部分持续更新中…
dapr云原生框架,服务于开发人员的,是一个cs服务框架
5.2、dapr配置redis中间件组件
1、首先下载redis进行并启动容器
2、dapr中$HOME/.dapr/components目录(没有则自己创建)中创建yaml文件绑定redis,yaml这些文件就是对应的订阅主题、状态部分所需要的。
root@ubuntu:~/.dapr/components# ls
pubsub.yaml statestore.yaml subscription.yaml
root@ubuntu:~/.dapr/components# cat pubsub.yaml
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:name: pubsub
spec:type: pubsub.redisversion: v1metadata:- name: redisHostvalue: localhost:6379- name: redisPasswordvalue: ""
root@ubuntu:~/.dapr/components# cat statestore.yaml
apiVersion: dapr.io/v1alpha1
kind: Component
metadata:name: statestore
spec:type: state.redisversion: v1metadata:- name: redisHostvalue: localhost:6379- name: redisPasswordvalue: ""- name: actorStateStorevalue: "true"
root@ubuntu:~/.dapr/components# cat subscription.yaml
apiVersion: dapr.io/v1alpha1
kind: Subscription
metadata:name: myevent-subscription
spec:topic: deathStarStatusroute: /dsstatuspubsubname: pubsub
scopes:
- app1
- app2
再启动daprd如果加载组件仍然找不到则需要dapr run来运行了。
这个错误就是加载组件失败
WARN[0000] failed to load components: open : no such file or directory app_id=sbtframework_server_test instance=ubuntu scope=dapr.runtime type=log ver=1.6.1
5.3、daprd和dapr run区别
在工程中会有两种启动方式:
方式1,使用daprd来启动dapr服务,然后再起应用程序的服务端去指定端口
#起dapr服务
daprd --app-id sbtframework_server_test --dapr-http-max-request-size 104857600 --app-protocol grpc --app-port 50051 --dapr-grpc-port 64011 --dapr-http-port 64012 --metrics-port 64013 &
#起应用程序服务端
./sbtframework_server 50051
#起应用程序客户端
./sbtframework_client sbtframework_server_test 64011
方式2、dapr run来直接起服务并且把应用程序服务也带起来。
#起dapr服务并将应用程序一起启动
dapr run --app-id sbtframework_server_test --dapr-http-max-request-size 104857600 --app-protocol grpc --app-port 60051 --dapr-grpc-port 54011 --dapr-http-port 54012 --metrics-port 54013 ./catch2test_server
#再起客户端
./sbtframework_client sbtframework_server_test 54011
那么两者的区别其实就是dapr服务是否跟我们应用程序的服务是不是一个进程。
daprd就是两个进程,使用它需要注意的是当第二次启动应用程序服务的时候可以连接不到dapr服务了,因为dapr它存在一个扫描周期,当第一次启动的应用程序服务断开之后就会扫描,如果第二次应用程序服务启动在扫描周期内就可以连接上,否则不能连接上,如连接失败那么需要去kill掉dapr进程再重新起daprd服务,重新操作一次。涉及到的linux命令ps -aux | grep “daprd”,再kill -9 具体ID,也可以直接pkill -9 daprd 。
dapr run 方法启动就是与应用程序的服务端一个进程,结束应用程序的服务端的时候也会把dapr服务结束掉的。
5.4、dapr和protobuf及grpc的关系
Dapr 是一个开源的、跨平台的分布式应用程序运行时,旨在简化构建微服务应用程序的过程。它提供了一组可插拔的构建块,用于处理常见的分布式系统功能,如服务调用、状态管理、事件发布-订阅等。Dapr 可以与各种编程语言和框架一起使用,并且与基础设施无关,可以在本地、云或边缘环境中运行。
ProtoBuf 是一种用于序列化结构化数据的语言无关、平台无关的机制。它使用简洁的二进制格式来表示数据,并提供了代码生成工具,可以根据定义的消息格式自动生成各种编程语言的代码。ProtoBuf 通常用于定义数据模型和消息格式,并用于在不同的系统之间进行数据交换。
gRPC 是一种高性能、开源的远程过程调用框架,可以在客户端和服务器之间进行双向通信。它使用 ProtoBuf 来定义消息格式和数据模型,并使用 HTTP/2 协议进行通信。gRPC 提供了多种语言的支持,并且可以在云和边缘环境中使用。
在分布式系统中,你可以使用 ProtoBuf 和 gRPC 来定义消息格式和数据模型,并使用 Dapr 进行服务调用和处理。Dapr 提供了与 ProtoBuf 和 gRPC 集成的支持,可以使用 ProtoBuf 格式的消息进行服务调用,并使用 gRPC 进行通信。你可以在 Dapr 中使用 ProtoBuf 序列化和反序列化消息,并使用 gRPC 进行远程过程调用。