当前位置: 首页 > news >正文

【dapr】服务调用(Service Invokation) - app id的解析

逻辑图解

在这里插入图片描述
上图来自Dapr官网教程,其中Checkout是一个服务,负责生成订单号, Order Processor是另一个服务,负责处理订单。Checkout服务需要调用Order Processor的API, 让Order Processor获取到其生成的订单号并进行处理。

本地测试(Self-Hosted)

按照官网教程进行实验的过程中,用python的代码测试,发现Order Processor没有任何的输出信息。 改用golang的代码测试, 发现Order Processor依然没有任何的输出, 但是checkout服务出现以下错误:

== APP == Order passed: {"errorCode":"ERR_DIRECT_INVOKE","message":"fail to invoke, id: order-processor, err: timeout waiting for address for app id order-processor"}

表明没有解析到请求的app id(oder-processor). 教程中并没有其他说明,但是观察上图,Service Invokation的图解告诉我们, dapr进行服务调用时, 需要Name resolution component, 本地模式中, dapr默认会使用mDNS进行域名解析, 这个错误表明mDNS解析失败。

查阅域名解析相关文档, 替代方案可以是在本地部署consul, 作为域名解析的组件。在dapr的配置文件~/.dapr/config.yaml中添加consul组件(以下代码中的最后4行)

apiVersion: dapr.io/v1alpha1
kind: Configuration
metadata:name: daprConfig
spec:tracing:samplingRate: "1"zipkin:endpointAddress: http://localhost:9411/api/v2/spansnameResolution:component: "consul"configuration:selfRegister: true

重新安装dapr环境:

dapr uninstall
dapr init 

注意,此处只是将consul注册为dapr的一个组件,但consul的示例还需要我们自己创建, 此时,我们还没有创建consul的实例, 如果此时运行checkout的代码,则会报错:

panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x2 addr=0x20 pc=0x10536808c]goroutine 119 [running]:
github.com/dapr/dapr/pkg/messaging.(*directMessaging).getRemoteApp(0x14000ada600, {0x140003d78e0?, 0x0?})/Users/runner/work/dapr/dapr/pkg/messaging/direct_messaging.go:309 +0x7c
github.com/dapr/dapr/pkg/messaging.(*directMessaging).Invoke(0x14000ada600, {0x10700d988, 0x1400034b800}, {0x140003d78e0?, 0x14000c41538?}, 0x102354dc0?)/Users/runner/work/dapr/dapr/pkg/messaging/direct_messaging.go:126 +0x3c
github.com/dapr/dapr/pkg/http.(*api).onDirectMessage.func1({0x10700d988?, 0x1400034b800?})/Users/runner/work/dapr/dapr/pkg/http/api.go:1390 +0x88
github.com/dapr/dapr/pkg/resiliency.(*NoOp).EndpointPolicy.func1(0x1053e137c?)/Users/runner/work/dapr/dapr/pkg/resiliency/noop.go:36 +0x30
github.com/dapr/dapr/pkg/http.(*api).onDirectMessage(0x1400053a300, 0x1400034b800)/Users/runner/work/dapr/dapr/pkg/http/api.go:1389 +0x598
github.com/fasthttp/router.(*Router).Handler(0x14000b4f5e0, 0x1400034b800)/Users/runner/go/pkg/mod/github.com/fasthttp/router@v1.4.12/router.go:427 +0x7f0
github.com/dapr/dapr/pkg/diagnostics.(*httpMetrics).FastHTTPMiddleware.func1(0x1400034b800)/Users/runner/work/dapr/dapr/pkg/diagnostics/http_monitoring.go:227 +0x104
github.com/dapr/dapr/pkg/diagnostics.HTTPTraceMiddleware.func1(0x1400034b800)
apiVersion: dapr.io/v1alpha1/Users/runner/work/dapr/dapr/pkg/diagnostics/http_tracing.go:56 +0x138
github.com/valyala/fasthttp.(*Server).serveConn(0x14000e7e900, {0x1070211f0?, 0x140005a31f0})/Users/runner/go/pkg/mod/github.com/valyala/fasthttp@v1.40.0/server.go:2311 +0xde4
github.com/valyala/fasthttp.(*workerPool).workerFunc(0x140005d15e0, 0x140004ea320)/Users/runner/go/pkg/mod/github.com/valyala/fasthttp@v1.40.0/workerpool.go:224 +0x70
github.com/valyala/fasthttp.(*workerPool).getCh.func1()/Users/runner/go/pkg/mod/github.com/valyala/fasthttp@v1.40.0/workerpool.go:196 +0x38
created by github.com/valyala/fasthttp.(*workerPool).getCh/Users/runner/go/pkg/mod/github.com/valyala/fasthttp@v1.40.0/workerpool.go:195 +0x220
❌  The daprd process exited with error code: exit status 2
ℹ️
terminated signal received: shutting down
❌  Error exiting Dapr: exit status 2
✅  Exited App successfully

如上, 即使我们运行的是python版本的测试代码, 报错仍然是golangpanic, 这是因为这个异常是dapr抛出的,而不是app的代码抛出的, 原因是连接不上dapr注册的nameResolution组件。

用下面的命令启动一个consul容器:

docker run -d --name=dev-consul -e CONSUL_BIND_INTERFACE=eth0 consul

再运行教程中的代码,则可以得到正确的结果了。

k8s中的名字解析

上面一节解释了在本地测试时, dapr是如何通过app id找到相应的应用。在k8s集群中, dapr默认会使用k8s集群的DNS进行域名解析。那么在k8s中, dapr具体是怎么使用DNS的呢?

在官网教程中, 创建了两个应用,分别是nodeapppythonapp, 他们的yaml文件中,分别定义了各自的dapr.io/app-id, 分别是nodeapppythonapp, 在部署了这两个应用后,我们会发现多了两个k8s service: nodeapp-daprpythonapp-dapr

➜  checkout git:(master) ✗ kubectl get svc
NAME             TYPE           CLUSTER-IP     EXTERNAL-IP      PORT(S)                               AGE
kubernetes       ClusterIP      10.0.0.1       <none>           443/TCP                               3d14h
nodeapp          LoadBalancer   10.0.253.82    52.188.179.178   80:30807/TCP                          75m
nodeapp-dapr     ClusterIP      None           <none>           80/TCP,50001/TCP,50002/TCP,9090/TCP   75m
pythonapp-dapr   ClusterIP      None           <none>           80/TCP,50001/TCP,50002/TCP,9090/TCP   8m40s
redis-headless   ClusterIP      None           <none>           6379/TCP                              86m
redis-master     ClusterIP      10.0.244.122   <none>           6379/TCP                              86m
redis-replicas   ClusterIP      10.0.141.54    <none>           6379/TCP                              86m

由此可知, k8s会识别dapr.io/app-id, 并根据其值x, 创建一个名为x-daprservice,则可以以解析service域名同样的方式,对daprapp id进行解析了。

相关文章:

【dapr】服务调用(Service Invokation) - app id的解析

逻辑图解 上图来自Dapr官网教程&#xff0c;其中Checkout是一个服务&#xff0c;负责生成订单号&#xff0c; Order Processor是另一个服务&#xff0c;负责处理订单。Checkout服务需要调用Order Processor的API&#xff0c; 让Order Processor获取到其生成的订单号并进行处理。…...

Odoo丨5步轻松实现在Odoo中打开企微会话框

Odoo丨5步轻松实现在Odoo中打开企微会话框 在Odoo中开启企微会话框 企业微信作为一个很好的企业级应用发布平台&#xff0c;尤其是提供的数据和接口&#xff0c;极大地为很多企业级应用提供便利&#xff0c;在日常中应用广泛&#xff01; 最近在项目中就遇到一个与企业微信相…...

python读取.stl文件

目录 .1 文本方式读取 1.2 stl解析 1.3 stl创建 .2 把点转换为.stl .1 文本方式读取 代码如下 stl_path/home/pxing/codes/point_improve/data/003_cracker_box/0.stlpoints[] f open(stl_path) lines f.readlines() prefixvertex num3 for line in lines:#print (l…...

vue2.0项目第一部分

论坛项目后端管理系统服务器地址&#xff1a;http://172.16.11.18:9090swagger地址&#xff1a;http://172.16.11.18:9090/doc.html前端h5地址&#xff1a;http://172.16.11.18:9099/h5/#/前端管理系统地址&#xff1a;http://172.16.11.18:9099/admin/#/搭建项目vue create . …...

锁与原子操作

锁与原子操作 锁 以自增操作为例子&#xff1a; void *func(void *arg) {int *pcount (int *)arg;int i 0;//while (i < 100000) {(*pcount) ; // 并不会到达100000usleep(1);} }int main(){int i 0;for (i 0;i < THREAD_COUNT;i ) {pthread_create(&thid…...

Prometheus Pushgetway讲解与实战操作

目录 一、概述 1、Pushgateway优点: 2、Pushgateway缺点: 二、Pushgateway 架构 三、实战操作演示...

常见字符串函数的使用,你确定不进来看看吗?

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前是C语言学习者 ✈️专栏&#xff1a;C语言航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&a…...

Elasticsearch:在搜索中使用衰减函数(Gauss)

在我之前的文章 “Elasticsearch&#xff1a;使用 function_score 及 script_score 定制搜索结果的分数” 我有讲到 Decay 函数在搜索中的使用。在那里&#xff0c;我有一个例子讲述在规定的时间里&#xff0c;分数不进行衰减。同一的函数也可以适用于地理位置的搜索。位置搜索…...

微信小程序 Springboot英语在线学习助手系统 uniapp

四六级助手系统用户端是基于微信小程序端&#xff0c;管理员端是基于web端&#xff0c;本系统是基于java编程语言&#xff0c;mysql数据库&#xff0c;idea开发工具&#xff0c; 系统分为用户和管理员两个角色&#xff0c;其中用户可以注册登陆小程序&#xff0c;查看英语四六级…...

LeetCode算法题解——双指针2

LeetCode算法题解——双指针2第五题思路代码第六题思路代码第七题思路代码这里介绍双指针在数组中的第二类题型&#xff1a;两端夹击。 第五题 977. 有序数组的平方 题目描述&#xff1a; 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的…...

线性杂双功能peg化试剂——HS-PEG-COOH,Thiol-PEG-Acid

英文名称&#xff1a;HS-PEG-COOH&#xff0c;Thiol-PEG-Acid 中文名称&#xff1a;巯基-聚乙二醇-羧基 HS-PEG-COOH是一种含有硫醇和羧酸的线性杂双功能聚乙二醇化试剂。它是一种有用的带有PEG间隔基的交联或生物结合试剂。巯基或SH、巯基或巯基选择性地与马来酰亚胺、OPSS、…...

Linux第三讲

目录 三、 磁盘和文件管理和使用检测和维护 3.1 磁盘目录 3.2 安装软件 3.2.1 rpm命令 3.2.2 克隆虚拟机 3.2.3 yum或压缩包方式安装jdk 3.2.4 使用虚拟机运行SpringBoot项目 3.2.5 安装mysql80&#xff08;57&#xff09; 3.2.6 运行web项目 3.2.7 安装tomcat 三、 …...

SpringBoot07:SpringSecurity

Security是什么&#xff1f; 是一个安全框架。可以用来做认证和授权 官网&#xff1a;Spring Security SpringSecurity环境搭建 1、创建一个新的project 2、导入thymeleaf依赖 <dependency><groupId>org.thymeleaf</groupId><artifactId>thymeleaf…...

C++ 浅谈之 STL Vector

C 浅谈之 STL Vector HELLO&#xff0c;各位博友好&#xff0c;我是阿呆 &#x1f648;&#x1f648;&#x1f648; 这里是 C 浅谈系列&#xff0c;收录在专栏 C 语言中 &#x1f61c;&#x1f61c;&#x1f61c; 本系列阿呆将记录一些 C 语言重要的语法特性 &#x1f3c3;&…...

【个人作品】非侵入式智能开关

一、产品简介 一款可以通过网络实现语音、APP、小程序控制&#xff0c;实现模拟手动操作各种开关的非侵入式智能开关作品。 非侵入式&#xff0c;指的是不需要对现有的电路和开关做任何改动&#xff0c;只需要将此设备使用魔术无痕胶带固定在旁边即可。 以下为 ABS 材质的渲…...

数据存储技术复习(三)未完

module4智能存储系统是功能丰富且可提供高度优化的I/o处理能力的RAID阵列。请绘制智能存储系统架构&#xff0c;并说明其各个关键组件的主要功能。前端缓存后端物理磁盘2&#xff0e;智能存储系统中&#xff0c;使用缓存进行的写入操作与直接写入到磁盘相比&#xff0c;可以带来…...

ThinkPHP数据库迁移工具

安装 composer require topthink/think-migration 创建迁移工具文件 //执行命令,创建一个操作文件,一定要用大驼峰写法,如下 php think migrate:create AnyClassNameYouWant //执行完成后,会在项目根目录多一个database目录,这里面存放类库操作文件 //文件名类似/database/m…...

代理模式(Proxy Pattern)

代理模式定义&#xff1a; 提供了对目标对象另外的访问方式&#xff1b;即通过代理对象访问目标对象。举个例子&#xff1a;猪八戒去找高翠兰结果是孙悟空变的&#xff0c;可以这样理解&#xff1a;把高翠兰的外貌抽象出来&#xff0c;高翠兰和孙悟空都实现了这个接口&#xff…...

Elasticesearch内存详解

1.ES基本概念 为了更好的理解内存,我们先看一下ES的基本概念。 1.1 cluster 集群 多个节点组合在一起就形成了一个集群,在每个ES节点中,我们可以通过配置集群的名称来使各个节点组合在一起,成为一个集群。当某些节点的集群名称一样,ES会自动根据配置文件中的地址找到这些…...

SpringCloud之断路器聚合监控

一、Hystrix Turbine简介 看单个的Hystrix Dashboard的数据并没有什么多大的价值&#xff0c;要想看这个系统的Hystrix Dashboard数据就需要用到Hystrix Turbine。Hystrix Turbine将每个服务Hystrix Dashboard数据进行了整合。Hystrix Turbine的使用非常简单&#xff0c;只需要…...

Vex:VS Code向量数据库管理扩展,提升AI开发效率

1. 项目概述&#xff1a;Vex&#xff0c;一个为开发者设计的向量数据库管理利器如果你正在用 VS Code 开发 AI 应用&#xff0c;并且和向量数据库&#xff08;比如 Milvus 或 ChromaDB&#xff09;打交道&#xff0c;那你大概率经历过这样的场景&#xff1a;为了插入几条测试向…...

OpenClaw:让 AI 从 “对话” 走向 “实干” 的开源智能体

在人工智能技术快速发展的今天&#xff0c;大语言模型的对话能力已日趋成熟&#xff0c;但 “能说不能做” 的痛点始终制约着 AI 的实际应用价值。2026 年&#xff0c;一款名为 OpenClaw&#xff08;社区昵称 “小龙虾 AI”&#xff09;的开源项目迅速走红&#xff0c;它以 “真…...

芯片测试中的扫描压缩技术解析与应用

1. 扫描压缩技术概述在当今纳米级芯片设计中&#xff0c;扫描压缩技术已成为降低测试成本、保证测试质量的必备手段。随着芯片复杂度呈指数级增长&#xff0c;传统扫描测试方法面临两大核心挑战&#xff1a;测试数据量&#xff08;Test Data Volume&#xff09;爆炸式增长导致测…...

跨越平台壁垒:在STM32与MSP430上构建Arduino式开发体验

1. 为什么要在STM32和MSP430上实现Arduino开发体验&#xff1f; 我第一次接触嵌入式开发就是在Arduino平台上&#xff0c;那种插上USB就能烧录、几行代码让LED闪烁的爽快感&#xff0c;让我这个非科班出身的小白瞬间爱上了硬件编程。但后来参加电子设计竞赛时&#xff0c;队友递…...

【PTA实战】矩阵乘法:从输入格式到核心算法的完整解析

1. 矩阵乘法在PTA平台的核心挑战 第一次在PTA平台做矩阵乘法题时&#xff0c;我被那个"格式卡顿"坑得差点怀疑人生。明明算法逻辑完全正确&#xff0c;提交后却总是提示"格式错误"&#xff0c;这种经历相信很多同学都遇到过。矩阵乘法作为线性代数的基础运…...

Betaflight飞行控制固件:5分钟快速上手指南与完整配置教程

Betaflight飞行控制固件&#xff1a;5分钟快速上手指南与完整配置教程 【免费下载链接】betaflight Open Source Flight Controller Firmware 项目地址: https://gitcode.com/gh_mirrors/be/betaflight 还在为穿越机飞行不稳定而烦恼吗&#xff1f;&#x1f914; 想体验…...

用PyTorch复现DKT模型:从Assistment数据集处理到LSTM训练全流程(附完整代码)

用PyTorch构建DKT模型&#xff1a;从数据预处理到LSTM实战全解析 在教育技术领域&#xff0c;追踪学生知识掌握程度一直是个核心挑战。想象一下&#xff0c;当学生在在线学习平台上完成一系列数学题时&#xff0c;系统如何预测他们下一步可能遇到的困难&#xff1f;这正是深度知…...

99%人开发Agent的致命误区!6大避坑指南助你从“调参怪”变“落地王”

本文揭示了开发Agent最常见的认知陷阱——将模型能力等同于系统能力&#xff0c;并提供了6大避坑指南&#xff1a;1. 掌握四层架构&#xff08;Persona、CoT、Skill、MCP&#xff09;&#xff1b;2. 选择合适的执行模型&#xff08;ReAct、Plan-and-Execute、Reflection&#x…...

如何让老款Mac重获新生:OpenCore Legacy Patcher完整指南

如何让老款Mac重获新生&#xff1a;OpenCore Legacy Patcher完整指南 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 还在为苹果官方停止支持的老款Mac无法升…...

国产化服务器运维笔记:手把手搞定MariaDB/PostgreSQL(瀚高)服务启停、远程连接与基础排查

国产化环境数据库运维实战&#xff1a;MariaDB与瀚高数据库深度管理指南 在信息技术应用创新背景下&#xff0c;国产服务器与开源数据库的组合已成为企业基础架构的重要选择。面对复杂的生产环境&#xff0c;掌握数据库服务的精细化管理能力&#xff0c;是每位运维工程师的必备…...