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

在上一篇文章中说到,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,访问不到数据

83cff11bdf107b896cc99d1b6331f81a.png

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

156468def65c5f43f89310199b332ad8.png

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,能访问到数据

924a245fb8d4761a46ee9b17ec1cb493.png

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

835cec593c88028f35958975b41a2ff4.png

多个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,能访问到数据

ed9ed639648bad5aa94010a6644981f5.png

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

005cd7eb2869b4f885d597f05d18846c.png

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,能访问到数据

e099395fc527a453ef616b78f4471063.png

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

4c4260fd97b0a95b5210b6f1899c1f46.png

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/297434.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ext 浅谈类的实例

打开ext的API,如下找到Class这个选项将鼠标移到config那里可以看到有以下属性:好了,让我们开始进入主题:首先,来讲讲如何自定义一个类,在ext中,创建一个类其实与其他语言差不多,只是…

构造函数怎么在主函数调用_C++ 虚基类及其派生类构造函数(学习笔记:第7章 12)...

虚基类及其派生类构造函数[1]建立对象时所指定的类称为最远派生类。虚基类的成员是由最远派生类的构造函数通过调用虚基类的构造函数进行初始化的。在整个继承结构中,直接或间接继承虚基类的所有派生类,都必须在构造函数的成员初始化表中为虚基类的构造函…

打得了橄榄球大联盟,进得了麻省理工,无论是四肢还是头脑都同样发达,这才叫猛男!...

全世界只有3.14 % 的人关注了爆炸吧知识今天小天就介绍一位同样在学术界、体坛都很生猛的猛男吧约翰尤索 (John Urschel) 关于约翰尤索一直有“学霸”“学神”这些词伴随着他然而尤索却说他从来都没认真听过老师讲课尤索出生在加拿大温尼伯父亲是医生,母亲是律师很小…

加菲猫语录,只准笑不准学

-今天我要做俯卧撑今天先俯卧,明天再撑。 --真不愿意起来,尤其我还病了,可我还得带病坚持吃饭。 --肚子大不可怕,可怕的是肚子里没有好东西。或者说,没有好…

python 什么是原类_Python 什么是元类(metaclasses)?

1.什么是类 在理解元类之前,我们必须先掌握Python中的类(class)。 和大多数语言一样,Python中的类知识用来描述如何“生成一个对象”:但是,在Python中,类不仅能用来描述如何生成一个对象,类本身也是对象。 …

听说这是和女朋友住一起后的现象之一

1 被人叫醒时的你!2 分享一只软糯香甜的香蕉。。3 到底选哪根好呢?4 大叔你的手机壳怎么肥四??5 听说这是和女朋友住一起后的现象之一6 爱国主义教育培养了一群吃货!7 今天做做题吧!(本视频来源…

PDF 补丁丁 (修改PDF书签;拆分、合并、制作PDF;提取图片) 0.3.0.8 正式版

PDF 补丁丁 0.3.0.8 正式版 新版本已经发布,请到博客首页下载。 软件简介 PDF补丁丁是一个用于修改PDF文件信息的工具。它具有以下功能:■ 修改文档(带“*”号部分功能需通过高级补丁修改功能实现): ● 修改文档属性…

Dapr + .NET 实战(八)服务监测

服务监测分布式服务性能指标,链路追踪,运行状况,日志记录都很重要,我们日常开发中为了实现这些功能需要集成很多功能,替换监控组件时成本也很高。Dapr 可观测性模块将服务监测与应用程序分离。它自动捕获由 Dapr sidec…

世界上第一位程序员是位美女——AdaLovelace【有图为证】

AdaLovelace画像 仙女一般吧....简介: 阿达奥古斯塔,19世纪诗人拜伦的女儿,数学家。穿孔机程序创始人,建立了循环和子程序概念。为计算程序拟定“算法”,写作的第一份“程序设计流程图”,被珍视为“第一个…

php mysql管理_MySQL 连接与管理

让 PHP 支持 MySQLPHP 有专有的 MySQL 函数库以使用操作 MYSQL 数据库。在 PHP 5 及以后版本中不再默认支持 MySQL ,所以在运行这些库之前,请确定 php.ini 加载了 MySQL 数据库支持:extension mysql.dllMySQL 连接mysql_connect() 函数用于开…

android开发我的新浪微博客户端-用户授权页面UI篇(3.1)

上一篇讲了讲OAuth授权认证的事情,大概的介绍了OAuth的原理,并且完成了一个OAuth.java的类库,提供了几个OAuth认证必要的方法,本篇开始具体讲本项目的用户授权功能,用户授权页面是当用户第一次使用本软件的时候自动从载入页面跳转…

还缺30万人!程序员2020年要过好日子了……

全世界只有3.14 % 的人关注了爆炸吧知识最近,程序员届有一个重大好消息,可能很多人还不知道,那就是:国内某些城市已经开始程序员人才补贴了!对于人工智能公司的项目开发、人才引进、科技研发,最高按照国拨经…

iNeuOS工业互联网操作系统部署在华为欧拉(openEuler)国产系统

目 录1. 概述... 32. 创建虚拟机&安装华为欧拉(openEuler)系统... 42.1 创建新的虚拟机... 42.2 默认选择Wowrkstation 16.x. 52.3 选择稍后安装操作系统... 62.4 选择其他Liunx 4.x 64位.…

datatables 一列显示两个字段的数据_【tableau入门教程16】计算字段

有时数据表中的原始维度和度量并不满足我们的需求,因此可通过计算字段功能,利用各种函数新建字段。创建字段步骤1、在侧栏 创建计算字段2、拖曳字段到输入框或是输入部分字段名称选择字段,当输入框下面显示“计算有效”时可点击 确定 完成计算…

gcc 安装包_LNMP安装的前期准备(LNMP一键安装包下载)

如果我们手工安装 LNMP 环境,那么同样需要安装大概 14 个源码包(根据版本和功能不同而不同)。不过,现在网上非常流行的 LNMP 环境的搭建过程是采用 LNMP 一键安装包直接安装。这个一键安装包实际上就是一个事先写好的安装脚本,按照这个安装脚…

Dapr + .NET 实战(七)Secrets

什么是Secrets应用程序通常会通过使用专用的存储来存储敏感信息,如连接字符串、密钥等。通常这需要建立一个密钥存储,如Azure Key Vault、Hashicorp等,并在那里存储应用程序级别的密钥。要访问这些密钥存储,应用程序需要导入密钥存…

只有成年人才懂的“爽”,一定要安利给每一个人

▲ 点击查看在日常生活中,诸位是不是经常遇到这些问题:打球扭伤、骑车摔伤、跑步拉伤、户外受伤。或者经常伏案工作,一天上班下来,感觉肩膀酸痛到僵硬,对什么事都提不起兴趣。回到家腰酸、背疼,随便做个伸展…

xml.query() 实例演示

xml.query()函数,XQuery表达式可以返回xml一个单一的元素或是所有元素。 我们继续使用上一篇所创建表[dbo].[tbDevLanguage] http://www.cnblogs.com/insus/archive/2012/02/25/2367668.html 首先我们演示Query所有元素,注意一下查询节点,返回…

图像处理前沿技术_深入浅出人工智能前沿技术—机器视觉检测,看清人类智慧工业...

早在50年前,工业机器人就已经横空出世,给人类带来更多的方便与可能。今天,工业机器人正以迅猛的发展速度替代人工,从事繁重及枯燥的工作,并且向着更智能的方向在发展,而服务机器人,将会是下一个…

最全高考分数线出炉!!查了分后,这届学生为了过线真是太拼了.......

全世界只有3.14 % 的人关注了爆炸吧知识2020年高考成绩今天可以查了!你还记得自己查分那天是什么心情吗?反正超模君当年是想看却又不敢看表面越是想要云淡风轻内心就越不受控制的心跳失控转眼过去了许多年又到了高考放榜的日子在这么欢乐的日子里怎么能缺…