ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

[.Net]使用Soa库+Abp搭建微服务项目框架(三):项目改造

2022-01-15 10:32:49  阅读:213  来源: 互联网

标签:Soa 服务 consul Host Abp token MatoProject cs Net


 上一章我们说道,如果要使各模块之间解耦,使得各自独立成服务,首先要解除各个模块之间的引用关系。

还记得上一章我们的小项目吗 ?们回到之前的代码上来,当前的项目架构如下图:

这次的任务是将它改造成面向服务体系的架构,是构建微服务的第一步改造:

 

一. 引入Soa库

首先将Soa库的三个项目引入到基础设施层:

二. 建立抽象层

  •  创建Interface文件夹,分别创建MatoProject.IService1、MatoProject.IService2 类库项目
  • 创建接口,继承于ISoaService,
  • 配置接口方法成员的SoaService属性和接口的SoaServiceRoute属性
  • 在领域层引用抽象层,并在各Manager中实现这个接口定义的方法 

 

 

三. 编写服务端Host代码

  •  创建ServiceHost文件夹,分别创建MatoProject.Service1.Host、MatoProject.Service2.Host 控制台项目

  • 项目添加appsettings.json,并配置好数据库连接字符串,并将文件的属性-复制到输出目录设置为“如果较新则复制”
  • 在程序入口点Program.cs 中编写服务启动代码:

​ 

  • 两个控制台应用作为Abp的模块,需要添加一个模块类,并继承自AbpModule
  • 重写PreInitialize方法并配置默认数据库配置名称

  • 重写Initialize方法并配置好Ioc

 四. 编写客户端调用代码

打开MatoProject.Web.Core项目中的MatoProjectWebCoreModule.cs,重写PostInitialize方法并配置好客户端相关配置

 解决方案属性,设置启动项目为三个Host

 五. 编写服务层代码

  • 回到服务层MainService.cs,添加两个接口声明

 

  • 在构造函数中注入IServiceProxy对象,并分别调用GetService方法将两个服务实例化

  •  GetExtends方法不需要作额外的修改,依旧是

 至此,所有的准备工作就绪。

 运行项目,打开swagger界面,调试请求GetExtends接口,发现type和num值已经正确地显示

 

 

 六. 高级应用

在Soa库中有一些自定义配置,这里列举一些。

 一. 接口描述

在SoaService属性中设置创建时间,创建人员,备注等,以供服务治理提供信息

 二. 端口,地址配置

服务Host项目 Program.cs 中的UseHttpForTransfer和方法中的SoaServiceRoute标签共同配置成微服务的端口和请求路由

例如.UseHttpForTransfer("127.0.0.1", 8008) 和 [SoaServiceRoute("soa_api/service2")]

客户端访问127.0.0.1:8008/soa_api/service2/GetNum 将调用GetNum方法。

 

 三. 配置服务发现(consul)

可以使用UseConsulForDiscovery方法配置基于consul的服务发现功能

consul是google开源的一个使用go语言开发的服务发现、配置管理中心服务。内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案

首先去consul官网下载二进制文件

Downloads | Consul by HashiCorp

安装直接下载zip包,解压后只有一个可执行的文件consul,将consul添加到系统的环境变量里面。

打开命令行并输入consul.exe  agent -dev -bind {你本机的ip地址} 来运行consul服务

打开服务Host项目 Program.cs ,注释掉UseInServerForDiscovery,加入下列代码

打开MatoProject.Web.Core项目中的MatoProjectWebCoreModule.cs,注释掉UseInServerForDiscovery,加入下列代码

 

  注意8500为consul所在ip地址

 

 服务运行时将自动注册ip和服务名称到consul的kv中,待客户端调用时,只需要传入key值即可

四. 鉴权

服务端设置

 

接口设置EnableAuthorization为true,不指定,或者指定一个Roles值

 完成鉴权设置

登录验证:

调用这个方法时,path设置为"token", 将username和passname传入params,请求对应微服务的验证(Authentication),返回token值

鉴权

向该服务发起请求中将token值传入UseToken中的委托返回参数

​(“token”中为获取到的token值)

调用 o.AddClaim("roles", "admin,patient");将角色信息写入token的payload

 结合token中的过期时间,和角色信息,完成请求授权

五. 服务监控

打开应用层的MainService.cs, 编写获取服务信息方法如下:

 运行项目,打开swagger界面,调试请求GetSoaService接口,可以获取所有服务信息

 若是使用Consul作为网络发现,可以在浏览器地址栏输入127.0.0.1:8500查看已在consul注册的服务


标签:Soa,服务,consul,Host,Abp,token,MatoProject,cs,Net
来源: https://www.cnblogs.com/jevonsflash/p/15806228.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有