初次理解服务调用

在微服务中,有一个难点就是:如果你想使用各个服务组件,你就得知道不同服务的地址和端口,也就是服务发现。

在传统应用我们是怎么做的?就是在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初体验之服务调用的更多相关文章

  1. ASP.NET Core 6框架揭秘实例演示[03]:Dapr初体验

    也许你们可能没有接触过Dapr,但是一定对它"有所耳闻",感觉今年它一下子就火了,一时间很多人都在谈论它.我们从其命名(Dapr的全称是"分布式应用运行时Distribu ...

  2. web api 初体验 解决js调用跨域问题

    跨域界定 常见跨域: 同IP不同端口: http:IP:8001/api/user     http:IP:8002/api/user 不同IP不同端口: http://172.28.20.100:8 ...

  3. Webservice初体验:axis调用wsdl和document解析

    Neo君遇到了需要调用webservice接口的情况,然而作为一只小白对这方面了解困乏,经过摸索,完成了一个小的Demo,记录下. 一:背景 同事给了我一个webservice地址,打开后后缀是&qu ...

  4. SpringCloud初体验:三、Feign 服务间调用(FeignClient)、负载均衡(Ribbon)、容错/降级处理(Hystrix)

    FeignOpenFeign Feign是一种声明式.模板化的HTTP客户端. 看了解释过后,可以理解为他是一种 客户端 配置实现的策略,它实现 服务间调用(FeignClient).负载均衡(Rib ...

  5. 【阿里云产品公测】结构化数据服务OTS之JavaSDK初体验

    [阿里云产品公测]结构化数据服务OTS之JavaSDK初体验 作者:阿里云用户蓝色之鹰 一.OTS简单介绍 OTS 是构建在阿里云飞天分布式系统之上的NoSQL数据库服务,提供海量结构化数据的存储和实 ...

  6. ASP.NET Core 3.0 上的gRPC服务模板初体验(多图)

    早就听说ASP.NET Core 3.0中引入了gRPC的服务模板,正好趁着家里电脑刚做了新系统,然后装了VS2019的功夫来体验一把.同时记录体验的过程.如果你也想按照本文的步骤体验的话,那你得先安 ...

  7. SpringCloud初体验:五、Sidecar 将 PHP 这类非 Java 生态语言的服务接入 Spring Cloud

    先起一个 Sidecar 服务,一个PHP服务一个应用,和PHP服务部署在同一台机子,通过 localhost 访问,这样就解决了网络开销,相当于本地进程间调用 Sidecar 服务比较简单, 1.这 ...

  8. # 初体验之腾讯位置服务彩云天气开发者api

    初体验 最近接触到了boxjs,看到了里面一个比较有意思的彩云天气的脚本,由于自己本身就是彩云天气pro的用户,日常使用过程中感觉到彩云的降雨提醒还是挺方便的,于是就准备开始使用这个天气的脚本. 脚本 ...

  9. 手把手教你学Dapr - 4. 服务调用

    上一篇:手把手教你学Dapr - 3. 使用Dapr运行第一个.Net程序 介绍 通过使用服务调用,您的应用程序可以使用标准的gRPC或HTTP协议与其他应用程序可靠.安全地通信. 为什么不直接用Ht ...

随机推荐

  1. VUE中v-for更新检测

    口诀: 数组变更方法,就会导致 v-for 更新,页面更新 数组非变更方法:返回新数组,就不会导致 v-for 更新,更新值检测不到可采用覆盖或者 this.$set() 数组变更方法如下: 1. a ...

  2. 初学python写个自娱自乐的小游戏

    一.摘要 当编写完后的代码执行第一次后达到了目标的预期效果,内心有些许满足,但是当突发情况产生后,程序便不能正常运行,于是准备从简单的版本开始出发,综合考虑使用者的需求,和使用过程中会遇到的问题,一步 ...

  3. SharkCTF2021 Babyhttp && get_or_lose

    两道web. Babyhttp: 直接dirsearch,发现同时存在git和bak泄露:经验证,git的没用. 访问index.php.bak, 下载源码: 抓包,改包,发包即可. get_or_l ...

  4. 【Java虚拟机4】Java内存模型(硬件层面的并发优化基础知识--缓存一致性问题)

    前言 今天学习了Java内存模型第一课的视频,讲了硬件层面的知识,还是和大学时一样,醍醐灌顶.老师讲得太好了. Java内存模型,感觉以前学得比较抽象.很繁杂,抽象. 这次试着系统一点跟着2个老师学习 ...

  5. CentOS 用户与群组

    目录 1.用户管理 1.1.切换用户 1.2.添加用户 1.3.删除用户 1.4.修改用户 2.群组管理 2.1.查看群组 2.2.添加群组 2.3.删除群组 2.4.修改群组 1.用户管理 Linu ...

  6. LCP 07.传递消息

    题目 小朋友 A 在和 ta 的小伙伴们玩传信息游戏,游戏规则如下: 有 n 名玩家,所有玩家编号分别为 0 - n-1,其中小朋友 A 的编号为 0 每个玩家都有固定的若干个可传信息的其他玩家(也可 ...

  7. UltraSoft - Beta - Scrum Meeting 8

    Date: May 24th, 2020. Scrum 情况汇报 进度情况 组员 负责 今日进度 q2l PM.后端 记录Scrum Meeting Liuzh 前端 暂无 Kkkk 前端 暂无 王f ...

  8. Spring Authorization Server的使用

    Spring Authorization Server的使用 一.背景 二.前置知识 三.需求 四.核心代码编写 1.引入授权服务器依赖 2.创建授权服务器用户 3.创建授权服务器和客户端 五.测试 ...

  9. Noip模拟30 2021.8.4

    T1 毛一琛 考场上打的稳定的$O((2^n)^2)$的暴力.其实再回忆一下上次那道用二进制枚举的题$y$ 就可以知道一样的道理,使用$\textit{Meet In the Middle}$, 按照 ...

  10. 一文带你掌握【TCP拥塞窗口】原理

    ❝ 关注公众号:高性能架构探索.后台回复[资料],可以免费领取 ❞ 学过网络相关课程的,都知道TCP中,有两个窗口: 滑动窗口(在我们的上一篇文章中有讲),接收方通过通告发送方自己的可以接受缓冲区大小 ...