在上一篇文章中说到,dapr默认的状态是不可能跨appid的,也就是只能在相同的应用内访问自己设置的状态数据,dapr支持三种状态的共享配置:appid,nam,none,是通过修改components下的statestore.yaml文件中的keyPrefix配置项来实现的。

说明:本篇所有demo都是接上一篇的代码和配置,不同部分会罗列出来。

appid模式

这种配置是默认的,在上篇中有涉及到,这里为了明确比对,所以列举了出来。

1、statestore.yaml

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:name: statestore
spec:type: state.redisversion: v1metadata:- name: redisHostvalue: redis:6379- name: redisPasswordvalue: ""- name: actorStateStorevalue: "true"- name: keyPrefixvalue: "appid"

2、通过order访问pay设置的key,访问不到数据

3、查看redis中的keys,以各服务的appid作为前缀

name模式

1、statestore.yaml

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:name: statestore
spec:type: state.redisversion: v1metadata:- name: redisHostvalue: redis:6379- name: redisPasswordvalue: ""- name: actorStateStorevalue: "true"- name: keyPrefixvalue: "name"

2、通过order访问pay设置的key,能访问到数据

3、查看redis中的keys,有状态存储的名称作为前缀

多个name的情况该如何实现呢?下面是order服务和pay服务分别有自己的组件配置文件,文件夹分别是components_order,components_pay,状态组件的名称分别是statestore_order和statestore_pay,参见下面的配置文件。

1、docker-compose.yml

version: '3.4'services:#┌────────────────────────────────┐#│ ordersystem app + Dapr sidecar │#└────────────────────────────────┘ordersystem:image: ${DOCKER_REGISTRY-}ordersystemdepends_on:- redis- placementbuild:context: ../dockerfile: /OrderSystem/Dockerfileports:- "3500:3500"volumes:   - ../OrderSystem:/OrderSystem  networks:- b2c-daprordersystem-dapr:image: "daprio/daprd:latest"command: [ "./daprd", "-app-id", "order", "-app-port", "80","-placement-host-address", "placement:50006","-components-path","/components"]build:context: ../depends_on:- ordersystemnetwork_mode: "service:ordersystem"volumes:   - ../components_order:/components  #┌─────────────────────────┐#│ Dapr placement1 service │#└─────────────────────────┘  placement:image: "daprio/dapr"command: ["./placement", "-port", "50006"]ports:- "50006:50006"networks:- b2c-dapr#┌────────────────────┐#│ Redis1 state store │#└────────────────────┘  redis:image: "redis:latest"ports:- "6380:6379"networks:- b2c-dapr###################################################################################################################      #┌───────────────────────────────────┐#│ paymentsystem1 app + Dapr sidecar │#└───────────────────────────────────┘  paymentsystem1:image: ${DOCKER_REGISTRY-}paymentsystemdepends_on:- redis- placementbuild:context: ../dockerfile: /PaymentSystem/Dockerfileports:- "3601:3500"volumes:   - ../PaymentSystem:/PaymentSystem      networks:- b2c-dapr      paymentsystem1-dapr:image: "daprio/daprd:latest"command: [ "./daprd", "-app-id", "pay", "-app-port", "80","-placement-host-address", "placement:50006","-components-path","/components" ]build:context: ../depends_on:- paymentsystem1network_mode: "service:paymentsystem1"volumes:   - ../components_pay:/components #┌───────────────────────────────────┐#│ paymentsystem2 app + Dapr sidecar │#└───────────────────────────────────┘   paymentsystem2:image: ${DOCKER_REGISTRY-}paymentsystemdepends_on:- redis- placement    build:context: ../dockerfile: /PaymentSystem/Dockerfilevolumes:   - ../PaymentSystem:/PaymentSystem            ports:- "3602:3500"networks:- b2c-dapr      paymentsystem2-dapr:image: "daprio/daprd:latest"command: [ "./daprd", "-app-id", "pay", "-app-port", "80" ,"-placement-host-address", "placement:50006","-components-path","/components"]build:context: ../depends_on:- paymentsystem2network_mode: "service:paymentsystem2"volumes:   - ../components_pay:/components      networks:b2c-dapr:

2、components_order文件夹下的statstore.yaml

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:name: statestore_order
spec:type: state.redisversion: v1metadata:- name: redisHostvalue: redis:6379- name: redisPasswordvalue: ""- name: actorStateStorevalue: "true"- name: keyPrefixvalue: "name"

3、components_pay文件夹下的statstore.yaml

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:name: statestore_pay
spec:type: state.redisversion: v1metadata:- name: redisHostvalue: redis:6379- name: redisPasswordvalue: ""- name: actorStateStorevalue: "true"- name: keyPrefixvalue: "name"

4、通过order访问pay设置的key,能访问到数据

5、查看redis中的keys,有状态存储的名称作为前缀

none模式

1、statestore.yaml

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:name: statestore
spec:type: state.redisversion: v1metadata:- name: redisHostvalue: redis:6379- name: redisPasswordvalue: ""- name: actorStateStorevalue: "true"- name: keyPrefixvalue: "none"

2、通过order访问pay设置的key,能访问到数据

3、查看redis中的keys,没有任何前缀

dapr通过简单的配置实现了三种状态数据的共享机制,方便,简捷。所以在使用dapr前,就要把各服务的数据共用规划好,方便配置使用。

Dapr牵手.NET学习笔记:状态管理进阶(一)相关推荐

  1. Dapr牵手.NET学习笔记:状态管理之docker-compose发布

    Dapr牵手.NET学习笔记:想入非非的服务调用 Dapr牵手.NET学习笔记:跨物理机负载均衡服务调用 Dapr牵手.NET学习笔记:用docker-compose部署服务 说明:为了给出demo的 ...

  2. Dapr牵手.NET学习笔记:开篇

    dapr,一个为分布式应用程序的运行时,为开发者在对接分布式组件时,提供了便利.使用dapr带来的好处可扩展性,因为它是通过sidecar的理概念来集成其他运行时的.同时dapr还提供了多种语言的SD ...

  3. Dapr牵手.NET学习笔记:状态管理进阶(二)

    为了防止并发对数据修改造成差异,dapr使用了etag标签来作为版本号,对数据修改进行验证. 下面是对etag的一个demo appsettings.json中的url配置 "StateUr ...

  4. Dapr牵手.NET学习笔记:想入非非的服务调用

    demo运行环境:Windows10,Docker(dapr_zipkin,dapr_redid,dapr_placement) 安装:dapr init 卸载:dapr uninstall,然后删除 ...

  5. Dapr牵手.NET学习笔记:Actor一个场景

    接上一篇最后的场景,为了解决相同帐户并发引起的数据库行级锁,可以引入Actor的串机制,相同ActorID的实例,串行,这样就能在应用层把读取余额的资源争抢解决掉,剩下的工作就是一定时间间隔,把内存中 ...

  6. Dapr牵手.NET学习笔记:Actor小试

    Actor模型是一种避免线程共享数据,相同Actor实体串行化的方案,所以不便dapr的其他功能,几乎都是非编程入侵的,相反,Dapr Acror深度定制的,关于Actor,.net中有一些通用框架, ...

  7. Dapr牵手.NET学习笔记:可观测性-分布式跟踪

    分布式跟踪在dapr里是开箱即用的,不需要对应用作任何一丁点的侵入式编程.之前的开发,如果想实现分式跟踪,就得在应用中埋点,这是一个与业务无关系的动作.dpar通过sidecar可以轻松做到这点,从而 ...

  8. Dapr牵手.NET学习笔记:绑定

    绑定有点像订阅发布,但又不一样,绑定更简单,绑定输出(调用方)-绑定输入(被调用方). 本例是用docker compose编排,并且用rabbitMQ来支持,因为rabbitMQ支持输入和输出绑定. ...

  9. Dapr牵手.NET学习笔记:发布-订阅

    queue,是很好的削峰填谷工具,在业内也是主流:发布订阅,可以有效的解耦两个应用,所以dapr把他们进行了有效的封装,我们使用起来更简单高效. 本篇的案例是下完订单后,会把消息发布到redis(当然 ...

最新文章

  1. java.io与网络通信
  2. C++中operator关键字(重载操作符)
  3. AM335x(TQ335x)学习笔记——使用dtb方式启动内核
  4. contourArea函数
  5. 使用easyui框架form控件,单选按钮radio或复选框checkbox样式问题
  6. Python为何如此优秀?斯坦福教授告诉你!
  7. 解决SVN提交代码时的错误:“Could not execute PROPPATCH”
  8. js图片加载效果(延迟加载+瀑布流加载)
  9. 如果写文档发博客,你还在用Word文档你就out了,写文档神器Markdown的前世今生来了。(持续更新,欢迎关注点赞)
  10. The requested URL /xxxx.html was not found on this server
  11. 哪个版本好_揭秘爱他美奶粉哪个版本好?不同版本爱他美奶粉区别差异是什么?...
  12. 关于文件、文件夹加密隐藏原理的一点想法
  13. 【loadrunner】测试手机app性能
  14. 【LINUX C 写文件】
  15. 视频去模糊论文阅读-Cascaded Deep Video Deblurring Using Temporal Sharpness Prior
  16. 安全架构--14--企业安全管理体系建设总结
  17. 千兆以太网交叉线_什么是交叉以太网电缆? 比较交叉与跳线
  18. Java试用两个月,我快被劝退了
  19. 有哪些适合练手的爬虫小项目?
  20. EXE文件结构及原理

热门文章

  1. Performance Metrics(性能指标1)
  2. MySQL使用裸设备
  3. lstm需要优化的参数_使用PyTorch手写代码从头构建LSTM,更深入的理解其工作原理...
  4. LeetCode 581. 最短无序连续子数组(Shortest Unsorted Continuous Subarray)
  5. go run 和 go build 和 go install 命令区别
  6. Java设计模式(8)组合模式(Composite模式)
  7. 代码评审会议_如何将电话会议(和访问代码)另存为联系人
  8. 【Flutter教程】从零构建电商应用(一)
  9. mybatis源码学习(三):MappedStatement的解析过程
  10. SAP的SqlAnyWhere中数据库日志文件删除后如何新建