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

 

1.1  Dapr环境配置

1.1.1        在开发机安装Docker Desktop并启用Kubernetes

安装过程略,安装好后效果如下:(左下角两个绿色指示Docker和K8s正在运行)

 

1.1.2        在开发机安装Dapr Cli

安装命令:

powershell -Command "iwr -useb https://raw.githubusercontent.com/dapr/cli/master/install/install.ps1 | iex"

将会安装到如下目录:

 

验证安装命令:

dapr

 

1.1.3        为开发机配置Dapr

配置命令:

dapr init

验证命令:

dapr --version

命令:docker ps 可以看到多了Dapr自动加了三个容器:

 

1.1.4        为K8s配置Dapr

配置命令:

dapr init -k

验证命令:

kubectl get pods --namespace dapr-system

 

可通过命令: 

kubectl port-forward deploy/dapr-dashboard --namespace dapr-system 8080:8080

访问Dapr Dashbord

 

1.2         创建项目

1.2.1        创建Blazor WebAssembly项目

注意选择Asp.net Core hosted

 

1.2.2        向解决方案添加Asp.net Core WebApi项目

添加完如图,我增加了两个解决方案文件夹BlazorWeb和ServiceAPI以方便区分前端和后端。

 

启动DaprTest1.Server Project运行:启动端口配置为8000

 

1.3         直接调用微服务

当前解决方案中,DaprTest1.Client Blazor 项目的Fetch data 功能会调用DaprTest1.Server项目的WeatherForecastController.cs  中的Get接口以获取天气预报信息。

我们需要修改为:在DaprTest1.Server项目的的Get接口不再直接返回天气预报信息,而是调用DaprTest1.ServiceApi1项目的WeatherForecastController中的Get 接口获取天气预报。

1.3.1         引用Refit包

在项目DaprTest1.Server中安装Refit 包。

 

1.3.2        修改相关代码

在项目DaprTest1.ServiceApi1中引用DaprTest1.Shared项目,并删除原来的Wheatherforcast.cs实体类。

 

在项目DaprTest1.Server 中新增文件ICallServiceApi1.cs,并添加如下代码:

public interface ICallServiceApi1{[Get("/WeatherForecast")]Task<IEnumerable<WeatherForecast>> GetWeatherForecast();}

 

在项目DaprTest1.Server 的Startup.cs 中新增如下代码,其中http://localhost:8001 是ServiceApi1接口访问地址

// 注入httpClient

services.AddHttpClient("HttpClient").AddTypedClient(client =>{client.BaseAddress = new Uri("http://localhost:8001");return RestService.For<ICallServiceApi1>(client);});

 

修改项目DaprTest1.Server  WeatherForecastController.cs  中的Get接口如下:

 public class WeatherForecastController : ControllerBase{private readonly ILogger<WeatherForecastController> _logger;private readonly ICallServiceApi1 _callServiceApi1;public WeatherForecastController(ILogger<WeatherForecastController> logger, ICallServiceApi1 callServiceApi1){_logger = logger;_callServiceApi1 = callServiceApi1;}[HttpGet]public async Task<IEnumerable<WeatherForecast>> Get(){return await _callServiceApi1.GetWeatherForecast();}}

 

分别启动DaprTest1.Server 和 DaprTest1.ServiceApi1项目,访问http://localhost:8000/ 可看到效果, 效果图略。

1.4         通过Dapr调用微服务

我们需要修改为:在DaprTest1.Server中不直接调用DaprTest1.ServiceApi1的接口地址获取天气预报信息,而是通过Dapr调用DaprTest1.ServiceApi1 的服务ID来获取天气预报信息.

1.4.1        引用Dapr.Client包

在项目DaprTest1.Server中安装Dapr.Client包

 

1.4.2        修改相关代码

在项目DaprTest1.Server 的Startup.cs 中修改如下代码: 本代码参考了 张善友大神的

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

services.AddScoped<InvocationHandler>();// 注入httpClientservices.AddHttpClient("HttpClient").AddHttpMessageHandler<InvocationHandler>().AddTypedClient(client =>{client.BaseAddress = new Uri("http://serviceapi1");return RestService.For<ICallServiceApi1>(client);});

1.4.3        在Dapr中运行项目

分别在DaprTest1.Server和DaprTest1.ServiceApi1项目中添加文件dapr-selfhosted.ps1

文件内容分别为:

dapr run `--app-id blazorweb `--app-port 8000 `--dapr-http-port 3600 `--dapr-grpc-port 60000 `dotnet run
dapr run `--app-id serviceapi1 `--app-port 8001 `--dapr-http-port 3601 `--dapr-grpc-port 60001 `dotnet run

 

PowerShell分别启动DaprTest1.Server 和 DaprTest1.ServiceApi1项目下面的dapr-selfhosted.ps1文件, 访问 http://localhost:8000/ 即可看到效果

 

 

1.5         在K8s中运行项目

1.5.1        添加Docker文件生成镜像

分别在DaprTest1.Server和DaprTest1.ServiceApi1项目中添加Docker文件dockerfile, 并修改文件内容如下:

ARG NET_IMAGE=5.0-buster-slimFROM mcr.microsoft.com/dotnet/aspnet:${NET_IMAGE} AS baseWORKDIR /appEXPOSE 5000FROM mcr.microsoft.com/dotnet/sdk:${NET_IMAGE} AS buildWORKDIR /srcCOPY ["Server/DaprTest1.Server.csproj", "Server/"]COPY ["Shared/DaprTest1.Shared.csproj", "Shared/"]COPY ["Client/DaprTest1.Client.csproj", "Client/"]RUN dotnet restore "Server/DaprTest1.Server.csproj"COPY . .WORKDIR "/src/Server"RUN dotnet build "DaprTest1.Server.csproj" -c Release -o /app/buildFROM build AS publishRUN dotnet publish "DaprTest1.Server.csproj" -c Release -o /app/publishFROM base AS finalWORKDIR /appCOPY --from=publish /app/publish .ENTRYPOINT ["dotnet", "DaprTest1.Server.dll"]
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.ARG NET_IMAGE=5.0-buster-slim
FROM mcr.microsoft.com/dotnet/aspnet:${NET_IMAGE} AS base
WORKDIR /app
EXPOSE 5000FROM mcr.microsoft.com/dotnet/sdk:${NET_IMAGE} AS build
WORKDIR /src
COPY ["ServiceApi/DaprTest1.ServiceApi1/DaprTest1.ServiceApi1.csproj", "ServiceApi/DaprTest1.ServiceApi1/"]
COPY ["Shared/DaprTest1.Shared.csproj", "Shared/"]
RUN dotnet restore "ServiceApi/DaprTest1.ServiceApi1/DaprTest1.ServiceApi1.csproj"
COPY . .
WORKDIR "/src/ServiceApi/DaprTest1.ServiceApi1"
RUN dotnet build "DaprTest1.ServiceApi1.csproj" -c Release -o /app/buildFROM build AS publish
RUN dotnet publish "DaprTest1.ServiceApi1.csproj" -c Release -o /app/publishFROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "DaprTest1.ServiceApi1.dll"]

 

在解决方案根目录增加文件build-docker-images.ps1 以生成Docker image,文件内容如下:

docker build -t dapr-test1/blazorweb:1.0 -f Server/Dockerfile .

docker build -t dapr-test1/serviceapi1:1.0 -f ServiceApi/DaprTest1.ServiceApi1/Dockerfile .

 

在解决方案根目录执行build-docker-images.ps1后, 可看到生成的两个镜像:

 

1.5.2        部署Docker镜像到K8s

在解决方案根目录新建文件夹 Deploy, 放置k8s部署文件

 

其中deploy.ps1 为部署命令,内容如下:

kubectl apply `-f namespace.yaml `-f dapr-config.yaml `-f blazorweb.yaml `-f serviceapi1.yaml

 

部署完成后,可通过端口转发给node看到效果.

 

 

代码地址:iamxiaozhuang/dapr-test (github.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/299210.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

squid2.6加速WEB支持虚拟主机配置心得体会 .txt

人一台web服务器&#xff0c;日流量约10万&#xff0c;上面有好几个虚拟主机&#xff0c;近日装上Squid 2.6进行WEB加速&#xff0c;Squid 和Apache均在同一台服务器上面&#xff0c;效果非常明显&#xff0c;看到论坛上好多人问如何配置squid2.6支持,虚拟主机现在将安装过程贴…

IT职涯路

在51cto周刊上发现了这篇文章&#xff0c;不错&#xff0c;转载过来~~ 前段时间看了一篇文章&#xff0c;叫做《IT人为什么难以拿高薪》&#xff0c;颇有感触&#xff0c;于是写下这篇文章&#xff0c;希望与各位XDJM共勉&#xff5e; 能够看到这个帖子的每个XDJM&#xff0c;…

mysql 卸载插件_MySQL 插件安装或卸载(window validate_password 为例)

查看插件&#xff1a;mysql> show plugins;mysql> select plugin_name,plugin_status,plugin_type,load_option,plugin_library from information_schema.plugins;默认插件目录&#xff1a;mysql> show variables like plugin_dir;----------------------------------…

11部高分学科纪录片,助力孩子涨姿势拓视野~

全世界只有3.14 % 的人关注了爆炸吧知识▌导读本文为同学们整理了11部高分经典学科纪录片&#xff0c;对应文学、数学、经济学、地理、化学、生物、物理、历史、社会学、美学、天文学11个学科。这不仅是课堂学习的补充与延伸&#xff0c;更是开拓视野、激发学习内驱力的绝佳利器…

Istio 首次安全评估结果公布

本文译自 Istio 社区官方博客 Announcing the results of Istio’s first security assessment[1]&#xff0c;作者 Neeraj Poddar&#xff0c;译者宋净超。Istio 服务网格已在各行各业获得广泛的生产应用。该项目的成功&#xff0c;以及其在基础设施中执行关键安全策略的重要用…

mile for gallon 汽车省油

计算汽车省油&#xff0c;用英里每加仑比较&#xff0c;允许重复比较//mile for gallon 汽车省油 #include<iostream>const double GALLON 0.264179; double milepergallon(double kilo,double mile);int main() {using namespace std;double kilo[2],mile[2],milebygal…

使用C#制作简易的注册表编辑器

本文节选自《21天学通C#》一书 下面来实现一个简易的注册表编辑器。它具备了Windows操作系统自带的注册表编辑器的一般功能。如示例代码19-7所示。示例代码19-7主窗体。主窗体在启动时&#xff0c;会在加载事件中加载注册表到树形控件中&#xff0c;就像在Windows操作系统中…

世博游览技巧

世博游览技巧 方案一&#xff1a; 一日进园 步骤1&#xff1a;4:50-5:30到达5号门3号口 07:00开园后最大速度向后面的安检口跑 看到少于30人就可以拿到中国的预约&#xff08;也就是安检的前3排&#xff09; 09:00安检后就会有人发中国的预约券&#xff08;可以不按预约的时间…

node 16位 转24位_同时将24位和32位BMP图像顺时针旋转90度

上一次我们将24位的皮卡丘旋转了90度&#xff0c;但是后来改需求了。。。要求把32位的.bmp文件也能够旋转90度。上次就懵逼的我继续懵逼&#xff0c;只好继续转向CSDN求助。浏览了各种求助帖&#xff08;还找到了数年前的信科大一学长&#xff09;&#xff0c;终于发现了32位和…

这几个关乎我们一生教养的原则,每个人都应该知道。

▲ 点击查看最近刷到这样两条微博&#xff0c;让人心头一暖。一条是杭州一个小男孩给医院捐款千元&#xff0c;还附上了一封感谢信。临走时还给医生敬了个少先队礼。另一条是扬州一名女孩把自己的小黄鸭储蓄罐整个捐到派出所&#xff0c;留下一张写着“武汉加油”的纸条&#x…

莫名其妙的主机名 VM_32_234_centos

在腾讯服务器上部署的时候出现的莫名其妙的错误, 我在配置文件上都写 master, node1, 但是运行mapredure的时候的时候老是出现 Job job_1409546978133_0001 failed with state FAILED due to: Application application_1409546978133_0001 failed 2 times due to Error launc…

如何通过提问成为更好的开发人员

如何通过提问成为更好的开发人员这是新的一年的开始&#xff0c;所以我想以一篇我已经计划写了一段时间但从未真正开始创作的帖子开始。我最近开始了一份新工作&#xff0c;加入Elastic[1]&#xff0c;负责开发他们的 .NET 语言客户端。因此&#xff0c;最终将这个主题编写并发…

生活经典名句

&#xff11;&#xff0c;记住该记住的&#xff0c;忘记该忘记的。改变能改变的&#xff0c;接受不能改变的 &#xff12;&#xff0c;能冲刷一切的除了眼泪&#xff0c;就是时间&#xff0c;以时间来推移感情&#xff0c;时间越长&#xff0c;冲突越淡&#xff0c;仿佛不断稀释…

转载 一篇UI规范文件

这是一个UI模板规范&#xff0c;在做B/S版应用程序时比较适用&#xff0c;其实这样的东西算不上什么正规的规范&#xff0c;只是为了适应我们现在面对的开发环境和组织流程做的一些权宜的努力&#xff0c;和解决了一些与程序沟通和接口的问题&#xff0c;尽量避免误会和摩擦。 …

怎么提交 checkbox 表单_8. html form表单

“仅供学习&#xff0c;转载请注明出处”form表单表单用于搜集不同类型的用户输入&#xff0c;表单由不同类型的标签组成&#xff0c;相关标签及属性用法如下&#xff1a;1、标签 定义整体的表单区域action属性 定义表单数据提交地址method属性 定义表单提交的方式&#xff0c;…

越来越多的人不刷朋友圈竟然是因为.....

全世界只有3.14 % 的人关注了爆炸吧知识有些人&#xff0c;生活离不开朋友圈朋友圈是他们展示自我、观察世界的一扇窗户而有些人&#xff0c;从来也不点开朋友圈他们更愿意利用地铁上的零散化时间看点有意义、有知识的公众号推送完成对自我知识库的更新今天为大家推荐以下优质订…

Java基础---变量(三)

简单的说&#xff0c;我们可以把变量看作是个盒子&#xff0c;可以将钥匙、手机、饮料等物品存放在这个盒子中&#xff0c;也可以在需要的时候换成我们想存放的新物品。在 Java 中&#xff0c;我们通过三个元素描述变量&#xff1a;变量类型、变量名以及变量值。如果我们把变量…

批处理文件总结(三)

三.如何使用组合命令(Compound Command)   1.amp;   Usage&#xff1a;第一条命令 amp; 第二条命令 [amp; 第三条命令...]   用这种方法可以同时执行多条命令&#xff0c;而不管命令是否执行成功   Sample&#xff1a;   C:\>dir z: amp; dir c:\Ex4rch   The s…

腾讯,1000 亿!

聊聊腾讯的开源技术大家好&#xff0c;我是鱼皮&#xff0c;最近一则新闻在公司内外闹得沸沸扬扬&#xff0c;就是下面这个&#xff1a;为了履行企业发展使命&#xff0c;促进高质量发展的共同繁荣&#xff0c;腾讯在投资 500 亿元启动 “可持续社会价值创新” 战略后&#xff…

线打断问题(转)

在处理数据时&#xff0c;我们经常会遇到线打断的问题&#xff0c;比如需要指定在线上某处打断线&#xff0c;或者新建网络数据集时需要在线的交点处打段线等等。现将桌面版中我所遇到的线打断的工具总结如下&#xff1a; 一、手工打断线 Editor工具条中的splittool。 使用该工…