前置条件

dapr 自托管模式运行

新建一个webapi无权限项目



launchSettings.json中applicationUrl端口改成5001,如下:

"applicationUrl": "http://localhost:5001"
//WeatherForecastController.cs更改如下
using Microsoft.AspNetCore.Mvc; namespace backend.Controllers
{
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
private static readonly string[] Summaries = new[]
{
"Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
}; private readonly ILogger<WeatherForecastController> _logger; public WeatherForecastController(ILogger<WeatherForecastController> logger)
{
_logger = logger;
} [HttpGet(Name = "GetWeatherForecast")]
public IEnumerable<WeatherForecast> Get()
{
return Enumerable.Range(1, 5).Select(index => new WeatherForecast
{
Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
TemperatureC = Random.Shared.Next(-20, 55),
Summary = Summaries[Random.Shared.Next(Summaries.Length)]
})
.ToArray();
} [HttpPost(Name = "Hello")]
public object SayHello()
{
return new { message = "Hello" }; //这里返回必须是json对象,如果为字符串,则在daprClient.InvokeMethodAsync调用时会出错
}
}
}

到backend目录运行运行下面命令:

dapr run --app-id backend --app-port 5001 dotnet run

然后运行:

dapr invoke --app-id backend --method WeatherForecast
dapr invoke --app-id backend --method WeatherForecast --verb GET

显示下图表示运行成功

dapr服务调用

新建一个名为front的weiapi无权限项目

launchSettings.json中applicationUrl端口改成5002,如下:

"applicationUrl": "http://localhost:5002"

添加nuget包:Dapr.Client

修改WeatherForecastController.cs如下:

using Dapr.Client;
using Microsoft.AspNetCore.Mvc; namespace front.Controllers
{
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{ [HttpPost(Name = "Hello")]
public async Task<string> HelloAsync()
{
var appId = "backend";
var methodName = "WeatherForecast"; using (var daprClient = new DaprClientBuilder().Build())
{
try
{
var result = await daprClient.InvokeMethodAsync<object>(HttpMethod.Post, appId, methodName);
Console.WriteLine(result);
return result.ToString();
}
catch (Exception ex)
{
Console.WriteLine($"An exception occurred while invoking method: '{methodName}' on app-id: '{appId}'");
Console.WriteLine(ex.ToString());
}
}
return "Error!";
}
}
}

访问http://http://localhost:5002/swagger/页面运行如下就成功了

k8s&dapr模式运行

Dapr uninstall --all
dapr init -k

新增docker支持

添加backend的k8s配置文件dapr-backend.yaml

kind: Deployment
apiVersion: apps/v1
metadata:
name: dapr-deploy-backend
labels:
service: backend
spec:
replicas: 2
selector:
matchLabels:
service: backend
template:
metadata:
labels:
service: backend
annotations:
dapr.io/enabled: "true"
dapr.io/app-id: "backend" #这里要注意app-id要与front调用的名称要一致
dapr.io/app-port: "8080"
#dapr.io/config: "dapr-config"
spec:
containers:
- name: daprbackend
image: daprbackend
imagePullPolicy: Never
ports:
- name: http
containerPort: 8080
protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
name: daprbackend
labels:
service: backend
spec:
type: NodePort
ports:
- port: 80
targetPort: 8080
nodePort: 30003
protocol: TCP
name: http
- port: 50001
targetPort: 50001
nodePort: 30042
protocol: TCP
name: dapr-grpc
selector:
service: backend

添加backend的k8s配置文件dapr-backend.yaml

kind: Deployment
apiVersion: apps/v1
metadata:
name: dapr-deploy-front
labels:
service: front
spec:
replicas: 1
selector:
matchLabels:
service: front
template:
metadata:
labels:
service: front
annotations:
dapr.io/enabled: "true"
dapr.io/app-id: "front"
dapr.io/app-port: "8080"
#dapr.io/config: "dapr-config"
spec:
containers:
- name: daprfrontend
image: daprfrontend
imagePullPolicy: Never
ports:
- name: http
containerPort: 8080
protocol: TCP
---
apiVersion: v1
kind: Service
metadata:
name: daprfrontend
labels:
service: front
spec:
type: NodePort
ports:
- port: 80
targetPort: 8080
nodePort: 30002
protocol: TCP
name: http
- port: 50001
targetPort: 50001
nodePort: 30041
protocol: TCP
name: dapr-grpc
selector:
service: front

启动批处理文件start-all.bat

docker build -t daprbackend -f backend/Dockerfile .
docker build -t daprfrontend -f front/Dockerfile . Dapr uninstall --all
dapr init -k
kubectl apply -f k8s/dapr-backend.yaml
kubectl apply -f k8s/dapr-front.yaml pause

停止批处理文件stop-all.bat

kubectl delete -f ./k8s/dapr-front.yaml
kubectl delete -f ./k8s/dapr-backend.yaml Dapr uninstall --all pause

运行成功验证





访问http://localhost:30002/swagger/index.html

显示如下说明已经成功

项目源码下载

项目源码下载

常用命令

dapr uninstall
Dapr uninstall --all
dapr init
dapr init -k
dapr run --app-id myapp --dapr-http-port 3500 --dapr-grpc-port 50001 -- dotnet run #运行.net项目
dapr run --app-id backend --app-port 5001 dotnet run
dapr invoke --app-id backend --method WeatherForecast #调用接口
dapr invoke --app-id backend --method WeatherForecast --verb GET

相关文章

k8s&dapr开发部署实验(1)服务调用的更多相关文章

  1. Dapr微服务应用开发系列3:服务调用构件块

    题记:这篇开始逐一深入介绍各个构件块,从服务调用开始 原理 所谓服务调用,就是通过这个构件块让你方便的通过HTTP或者gRPC协议同步调用其他服务的方法,这些方法也是通过HTTP或者gRPC来暴露的. ...

  2. Dapr 客户端 搭配 WebApiClientCore 玩耍服务调用

    使用Dapr 客户端 处理服务调用,需要遵循的他的模式,通常代码是这个样子的: var client = DaprClient.CreateInvokeHttpClient(appId: " ...

  3. Dapr实战(二) 服务调用

    服务调用是什么 在分布式应用程序中的服务之间进行调用会涉及到许多挑战. 例如: 维护其他服务的地址. 如何安全地调用服务. 在发生短暂的 暂时性错误 时如何处理重试. 分布式应用程序调用链路追踪. 服 ...

  4. Blazor+Dapr+K8s微服务之服务调用

    1.1         Dapr环境配置 1.1.1        在开发机安装Docker Desktop并启用Kubernetes 安装过程略,安装好后效果如下:(左下角两个绿色指示Docker和 ...

  5. GIS应用|快速开发REST空间分析服务

    随着计算机的快速发展,GIS已经在各大领域得到应用,和我们的生活息息相关, 但是基于GIS几大厂商搭建服务,都会有一定的门槛,尤其是需要server,成本高,难度大,这里介绍一种在线GIS云平台,帮你 ...

  6. spring cloud 系列第4篇 —— feign 声明式服务调用 (F版本)

    源码Gitub地址:https://github.com/heibaiying/spring-samples-for-all 一.feign 简介 在上一个用例中,我们使用ribbon+restTem ...

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

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

  8. Caller 服务调用 - Dapr

    前言 上一篇我们讲了使用HttpClient的方式调用,那么如果我们现在需要更换为通过dapr实现服务调用,我们需要做哪些事情呢? Caller.Dapr 入门 如果我们的项目原本使用的是Caller ...

  9. 3. Caller 服务调用 - dapr

    前言 上一篇我们讲了使用HttpClient的方式调用,那么如果我们现在需要更换为通过dapr实现服务调用,我们需要做哪些事情呢? Caller.Dapr 入门 如果我们的项目原本使用的是Caller ...

  10. .Net 7 轻松上手Dapr之服务调用

    前言 对于Dapr ,在项目中也有用过一段时间,优缺点并存,但是瑕不掩瑜,目前随着版本的迭代和第三方团队对它的支持也使得我们用得更加得心应手,所以借此也回顾一下Dapr的相关知识以及分享一下项目中用到 ...

随机推荐

  1. C# 方法详解:定义、调用、参数、默认值、返回值、命名参数、方法重载全解析

    C# Methods 方法是一段代码,只有在调用时才会运行. 您可以将数据(称为参数)传递给方法. 方法用于执行某些操作,也被称为函数. 为什么使用方法?为了重用代码:定义一次代码,然后多次使用. 创 ...

  2. C 语言用户输入详解:scanf、fgets、内存地址解析及实用指南

    C 语言中的用户输入 您已经学习了 printf() 函数用于在 C 语言中输出值. 要获取用户输入,可以使用 scanf() 函数: // 声明一个整数变量,用于存储我们从用户那里获得的数字 int ...

  3. 知识图谱在RAG中的应用探讨

    在这篇文章中,我们来详细探讨知识图谱(KG)在RAG流程中的具体应用场景. 缘起 关于知识图谱在现在的RAG中能发挥出什么样的作用,之前看了360 刘焕勇的一个分享,简单的提了使用知识图谱增强大模型的 ...

  4. AGC066 题解

    题解:AT_agc066_a [AGC066A] Adjacent Difference 笑点解析:没有必要将总成本最小化. 我们将格子间隔的黑白染色(显然有两种染色方法),对于黑点我们要求它是奇数倍 ...

  5. HarmonyOS NEXT应用开发—听歌识曲水波纹特效案例

    介绍 在很多应用中,会出现点击按钮出现水波纹的特效. 效果图预览 使用说明 进入页面,点击按钮,触发水波纹动画. 再次点击按钮,停止水波纹动画. 实现思路 本例涉及的关键特性和实现方案如下: 要实现存 ...

  6. Kruise Rollout:灵活可插拔的渐进式发布框架

    简介: Kruise Rollout 是 OpenKruise 社区开源的渐进式交付框架.Kruise Rollout 支持配合流量和实例灰度的金丝雀发布.蓝绿发布.A/B Testing 发布,以及 ...

  7. NoSQL 数据库管理工具,搭载强大支持:Redis、Memcached、SSDB、LevelDB、RocksDB,为您的数据存储提供无与伦比的灵活性与性能!

    NoSQL 数据库管理工具,搭载强大支持:Redis.Memcached.SSDB.LevelDB.RocksDB,为您的数据存储提供无与伦比的灵活性与性能! [官网地址]:http://www.re ...

  8. Istio微服务入门---通过istio部署微服务实现灰度发布(15)

    一.Istio简介 1.1 Istio介绍 官方文档:https://istio.io/docs/concepts/what-is-istio/ 中文官方文档:https://istio.io/zh/ ...

  9. mybatis插件generator使用生成错误问题Execution default-cli of goal org.mybatis.generator:mybatis-generator-maven-plugin:1.3.2:generate failed: Exception getting JDBC Driver

    使用插件除了其他回答的路径等问题,我遇到的把jar版本换一下就成了 把5点几的换成8点几的就好使了

  10. LMDeploy量化部署LLM&LVM实操-书生浦语大模型实战营第二期第5节作业

    书生浦语大模型实战营第二期第5节作业 本页面包括实战营第二期第五节作业的全部操作步骤.如果需要知道模型量化部署的相关知识请访问学习笔记. 作业要求 基础作业 完成以下任务,并将实现过程记录截图: 配置 ...