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,一经查实,立即删除!

相关文章

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;以及其在基础设施中执行关键安全策略的重要用…

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

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

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

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

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

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

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

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

Java基础---变量(三)

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

腾讯,1000 亿!

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

php mysql 执行sql文件_PHP执行SQL文件并将SQL文件导入到数据库_PHP

//读取文件内容$_sql file_get_contents(test.sql);$_arr explode(;, $_sql);$_mysqli new mysqli(DB_HOST,DB_USER,DB_PASS);if (mysqli_connect_errno()) {exit(连接数据库出错);}//执行sql语句foreach ($_arr as $_value) {$_mysqli->query($_value.;);}$_mysqli->…

What?你还搞不懂什么是物体检测?

全世界只有3.14 % 的人关注了爆炸吧知识计算机视觉在上一个世纪60年代脱胎于人工智能与认知神经科学&#xff0c;并旨在通过设计算法来让计算机自动理解图像的内容。于是为了“解决”这类机器视觉的问题&#xff0c;麻省理工在1966年正式将这个问题作为一个夏季项目&#xff0c…

IIS服务器上增加mp4格式MIME 类型映射设置具体步骤

2019独角兽企业重金招聘Python工程师标准>>> 也许你会在纳闷&#xff0c;为什么我上传了flv或MP4文件到服务器&#xff0c;可输入正确地址通过http协议来访问总是出现“无法找到该页”的404错误呢&#xff1f;这就 表明mp4格式文件是服务器无法识别的&#xff0c;其…

WPAD原理介绍暨故障排查:ISA2006系列之三

WPAD的部署原理暨故障排查<?XML:NAMESPACE PREFIX O />WPAD是Web Proxy Auto Discovery的缩写&#xff0c;意思是Web代理服务器自动发现。WPAD的设计目的是让浏览器能自动发现代理服务器&#xff0c;这样用户可以轻松访问互联网而且无需知道哪台计算机是代理服务器。在…

Web服务器HttpServer(嵌入式设备)

HttpServer是一个轻量级Web服务器&#xff0c;用于在嵌入式设备以及客户端环境中提供简单Web服务。HttpServer支持路由映射到匿名委托、WebApi接口、静态文件&#xff0c;以及具有多个接口的控制器类。从简单到复杂&#xff0c;控制权交给开发者。源码&#xff1a;https://gith…

mysql同时查两张表数据库表_如何同时查询两个数据库表?

展开全部 sql多表关联查询跟条件查询大同小异,主要是要知道表与表之前的关系很重e69da5e6ba9062616964757a686964616f31333431353238要; 举例说明:(某数据库中有3张表分别为:userinfo,dep,sex) userinfo(用户信息表)表中有三个字段分别为:user_di(用户编号),user_name(用…

200万年薪,招不到清华姚班毕业生,能上姚班的都是什么人?

全世界只有3.14 % 的人关注了爆炸吧知识清华姚班可能很多人都没有听说过&#xff0c;不是我们孤陋寡闻&#xff0c;而是姚班确实是不一般的存在。即便是在清华&#xff0c;姚班的学霸也是可以碾压其他学霸的。在清华有一句话&#xff0c;半国英才聚清华&#xff0c;清华半英在姚…

分布式拒绝服务攻击(DDoS)原理及防范

转自:http://www.cnblogs.com/rootq/archive/2009/11/06/1597215.html http://www.ibm.com/developerworks/cn/security/se-ddos/ 2002 年 6 月 01 日 分布式拒绝服务攻击&#xff08;DDoS&#xff09;是目前黑客经常采用而难以防范的攻击手段。本文从概念开始详细介绍了这种攻…

Blazor 应用如何使用 Azure Active Directory 认证登录

点击上方蓝字 / 关注“汪宇杰博客”原文&#xff1a;Azure Tips and Tricks翻译&#xff1a;汪宇杰使用 Azure Active Directory 保护您的应用程序您可以使用 Azure Active Directory (AAD) 让用户进行身份验证并授权使用您的应用。AAD 提供了一种智能身份即服务来保护您的应用…

python notebook右侧网页_《Python web开发》笔记 一:网页开发基础

网页基础知识网页的构成网页由html、css和Javascript构成&#xff0c;html是框架&#xff0c;CSS是样式和装饰&#xff0c;JS则是各项功能实现。我们把网页的组成类比成一栋房子&#xff0c;Html相当于房子的结构&#xff0c;CSS相当于房子的装修装饰&#xff0c;JavaScript相当…

推荐几个超有趣的公众号

全世界只有3.14 % 的人关注了爆炸吧知识想要和别人有聊不完的话题&#xff1f;当然是多读书多看新闻了解新鲜有趣的事物啦如果你没有时间去阅读那么关注以下公号将会让你收获更多信息~长按下方二维码选择“识别图中二维码”订阅疯狂历史ID&#xff1a;fkhistory▼ 简介&#xf…