zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    最大连续序列和
    打印有序链表的公共部分
    字符串最长子串大小
    jvm简介
    大浮点数乘法
    java代码的快速排序理解
    从内存分配分析程序初始化和存储
    时间复杂度
    Filter&Listener
    MVC开发模式&EL表达式&JSTL&三层架构开发
  • 原文地址:https://www.cnblogs.com/magicbowie/p/15596792.html
Copyright © 2011-2022 走看看