Dapr初体验之服务调用
初次理解服务调用
在微服务中,有一个难点就是:如果你想使用各个服务组件,你就得知道不同服务的地址和端口,也就是服务发现。
在传统应用我们是怎么做的?就是在web项目里配置上api地址,如下:

在一个web对应一个api的时候,这种方式非常简单并且实用。但是,这不适用微服务项目,在超过三个服务部署的时候,光记住各个服务的地址和端口就给部署带来不小的困难。
于是,微服务框架的服务发现和调用就排上了用场。
Dapr中的服务注册

在上一篇 Dapr初体验之Hello World 我们使用了命令 dapr run --app-id nodeapp --app-port 3000 --dapr-http-port 3500 node app.js 启动了一个nodejs应用。
--app-id指定了注册到dapr的应用名称--app-port指定了注册到dapr的应用端口号
Dapr采用边车(Sidecar)方式,在不修改原服务代码的方式,就能通过这两种参数完成服务的注册。
Dapr中的调用逻辑
下图描述了Dapr服务调用是如何工作的
https://docs.dapr.io/developing-applications/building-blocks/service-invocation/service-invocation-overview/

这个是Dapr官方手册服务调用的例子,具体调用步骤大家直接访问连接来阅读,我不在做官方文档的搬运工了。这里,我只提取一下要点信息:
- 服务A和服务B是两个api服务,通过dapr边车方式进行了服务注册
- Dapr通过服务A和服务B的
--app-id,来确定不同的组件 - 所有的请求首先到dapr上之后有dapr转发到应用
- 所以,这些请求都需要使用dapr的api才能完成
Dapr服务调用API
通过Dapr服务调用的api,就可以调用注册到Dapr的服务方法
请求地址
POST/GET/PUT/DELETE http://localhost:<daprPort>/v1.0/invoke/<appId>/method/<method-name>
- daprPort : dapr服务的端口
- appId:注册到dapr服务的应用id,也就是
--app-id指定的参数 - method-name:方法名称
来举个例子
一个api服有get方法请求数据的接口/mydata吗,通过命令dapr run --app-id myapi --app-port 5000 --dapr-http-port 3500 dotnet MyApi.dll注册了到了dapr。
那么你访问http://localhost:3500/v1.0/invoke/myapi/method/mydata 就可以访问到这个api的接口。
写个实例
利用官方quickstarts库中的hello-world项目,增加一get接口,代码类似:
app.get('/test',(_req, res)=>{
return res.status(200).send({message: 'server 1'});;
});
使用命令 dapr run --app-id nodeapp --app-port 3000 node app.js启动应用,那么使用dapr访问此应用的接口就应该是http://localhost:3500/v1.0/invoke/nodeapp/method/test
使用postman访问如下图所示:

总结
这次我们简单体验了一下Dapr中服务发现和调用。通过Dapr边车(sidecar)方式,我们在不修改原项目代码的情况下部署项目。通过这种方式,我们有很多优势:
- 无感知的进行服务发现和调用,向其他服务提供了一种友好的接口调用方式
- 通过阅读dapr文档,dapr能够友好的为我们提供服务间安全性、接口重试、mDNS轮训负载均衡和接口调用追踪等高级功能
https://docs.dapr.io/zh-hans/developing-applications/building-blocks/service-invocation/service-invocation-overview/
https://github.com/dapr/quickstarts
Dapr初体验之服务调用的更多相关文章
- ASP.NET Core 6框架揭秘实例演示[03]:Dapr初体验
也许你们可能没有接触过Dapr,但是一定对它"有所耳闻",感觉今年它一下子就火了,一时间很多人都在谈论它.我们从其命名(Dapr的全称是"分布式应用运行时Distribu ...
- web api 初体验 解决js调用跨域问题
跨域界定 常见跨域: 同IP不同端口: http:IP:8001/api/user http:IP:8002/api/user 不同IP不同端口: http://172.28.20.100:8 ...
- Webservice初体验:axis调用wsdl和document解析
Neo君遇到了需要调用webservice接口的情况,然而作为一只小白对这方面了解困乏,经过摸索,完成了一个小的Demo,记录下. 一:背景 同事给了我一个webservice地址,打开后后缀是&qu ...
- SpringCloud初体验:三、Feign 服务间调用(FeignClient)、负载均衡(Ribbon)、容错/降级处理(Hystrix)
FeignOpenFeign Feign是一种声明式.模板化的HTTP客户端. 看了解释过后,可以理解为他是一种 客户端 配置实现的策略,它实现 服务间调用(FeignClient).负载均衡(Rib ...
- 【阿里云产品公测】结构化数据服务OTS之JavaSDK初体验
[阿里云产品公测]结构化数据服务OTS之JavaSDK初体验 作者:阿里云用户蓝色之鹰 一.OTS简单介绍 OTS 是构建在阿里云飞天分布式系统之上的NoSQL数据库服务,提供海量结构化数据的存储和实 ...
- ASP.NET Core 3.0 上的gRPC服务模板初体验(多图)
早就听说ASP.NET Core 3.0中引入了gRPC的服务模板,正好趁着家里电脑刚做了新系统,然后装了VS2019的功夫来体验一把.同时记录体验的过程.如果你也想按照本文的步骤体验的话,那你得先安 ...
- SpringCloud初体验:五、Sidecar 将 PHP 这类非 Java 生态语言的服务接入 Spring Cloud
先起一个 Sidecar 服务,一个PHP服务一个应用,和PHP服务部署在同一台机子,通过 localhost 访问,这样就解决了网络开销,相当于本地进程间调用 Sidecar 服务比较简单, 1.这 ...
- # 初体验之腾讯位置服务彩云天气开发者api
初体验 最近接触到了boxjs,看到了里面一个比较有意思的彩云天气的脚本,由于自己本身就是彩云天气pro的用户,日常使用过程中感觉到彩云的降雨提醒还是挺方便的,于是就准备开始使用这个天气的脚本. 脚本 ...
- 手把手教你学Dapr - 4. 服务调用
上一篇:手把手教你学Dapr - 3. 使用Dapr运行第一个.Net程序 介绍 通过使用服务调用,您的应用程序可以使用标准的gRPC或HTTP协议与其他应用程序可靠.安全地通信. 为什么不直接用Ht ...
随机推荐
- RobotFramework+Selenium如何提高脚本稳定性
通过RF来跑selenium的脚本,正常运行一遍都没有问题,但如果要多次运行,提高脚本的稳定性,那么应该如何做呢? 当然有时候最简单最简单的方法就是直接通过sleep来等待,虽然简单粗暴,但会带来 ...
- java语言程序设计与数据结构(基础篇)第二章答案
答案为本人自己求解,若有错误,还望海涵并及时告知.如有雷同,纯属巧合. 2.1 import java.util.Scanner; public class Welcome { public stat ...
- [NOIP2013 提高组] 华容道 P1979 洛谷
[NOIP2013 提高组] 华容道 P1979 洛谷 强烈推荐,更好的阅读体验 经典题目:spfa+bfs+转化 题目大意: 给出一个01网格图,和点坐标x,y空格坐标a,b,目标位置tx,ty要求 ...
- OGG-如何只同步最近某个时间范围的数据
一.需求,某客户希望使用OGG只同步时间大于2021-02-01日期之后的数据变换 需求如标题所示,如何使用OGG进行配置? 客户环境需要同步的表有几百G,表数据太大了;如果同步所有数据,目标库空间存 ...
- Less-(5~7) error based
Less-5: 核心语句: 我们注意到,当输入正确时,并不能获得有价值的回显.好在出现错误时,会爆出错误内容: 于是,使用报错注入: 1' and updatexml(1,concat(0x7e,( ...
- 注解,@Qualifier+@Autowired 和 @Resource
摘要: 项目中,对于AOP的使用,就是通过用注解来注入的. 更改之前的注解,是使用:@Qualifier+@Autowired 但是,通过这样注解,在项目启动阶段,需要自动扫描的过程是非常缓慢的, ...
- 关于下载pyton第三方库的细节
1.下载Python第三方库有时候国外的网站网速很不好,需要选择国内的镜像网站去下载 阿里云 http://mirrors.aliyun.com/pypi/simple 中国科技大学 https: ...
- 嵌入式大佬给你分析stm32串口
stm32作为现在嵌入式物联网单片机行业中经常要用多的技术,相信大家都有所接触,今天这篇就给大家详细的分析下有关于stm32的出口,还不是很清楚的朋友要注意看看了哦,在最后还会为大家分享有些关于stm ...
- 攻防世界 web5.disabled_button
我觉得戴上手套按应该可以! 方法一: 打开网址,发现flag按钮无法点击,F12查看源代码,删除disabled=" ",flag就点击了. 方法二 POST请求, 先分析一下源代 ...
- OpenEuler树莓派基础实验
OpenEuler树莓派基础实验 1.任务详情 1. 参考https://www.cnblogs.com/rocedu/p/14615565.html 完成OpenEuler的安装,提交过程博客和截图 ...