.net 微服务框架

接触微服务框架已经很久了,很久之前就想写一个基于.net framework的微服务框架,奈何一直忙(LAN),最近终于抽出时间,实现了微服务通讯的主要功能,包括服务注册中心,微服务服务端以及微服务客户端。下面将逐一模块进行介绍SOA框架使用方式,

客户端主要类

1.1 ServicePool(服务池

1.1.1 设置服务中心地址(SetServiceCenterInfo)

用于设置服务中心地址,设置服务中心地址后,可以自动收到服务中心推送的服务列表。而不需客户端一一订阅,并且当微服务集群某个节点down机后,会自动收到服务中心通知并且更新服务列表。从而剔除不响应的节点。

1.1.1.1 使用方式

ServicePool servicePool = new ServicePool();

servicePool.SetServiceCenterInfo("192.168.1.101", 5001);

1.1.2 订阅服务(SubMicroService

从服务池中订阅微服务,返回MicroService(微服务)对象。

1.1.2.1 使用方式

ServicePool servicePool = new ServicePool();

servicePool.SetServiceCenterInfo("192.168.1.101", 5001);

var userService = servicePool.SubMicroService("UserService");

1.1.3 不通过服务注册中心订阅服务(SubWithoutServiceCenter

跳过服务注册中心,直接订阅微服务,在测试环境下,有时不需要服务中心,跳过服务中心,直接订阅微服务即可。

1.1.3.1 使用方式

ServicePool servicePool = new ServicePool();

servicePool.SetServiceCenterInfo("192.168.1.101", 5001);

var userService= servicePool.SubWithoutServiceCenter("User",new ServerInfo {

Ip="192.168.1.101",

Port=5000,

IsEnable=true

})

1.2 MicroService微服务

1.2.1 调用微服务接口(Invoke)

调用微服务提供的接口。

1.2.1.1 使用方式

var res = userService.Invoke("UserService/GetUser", "UserId");或者

var res = userService.Invoke<T>("UserService/GetUser", "UserId");

方法1直接返回json,方法2会将json序列化成T对象后返回。

1.2.2 异步调用微服务接口(InvokeAsync)

为什么要有异步调用呢?比如有这样一个需求,客户端界面需要显示订单的基本信息(购买用户、下单时间、订单状态等)以及订单物流信息,而订单基本信息数据以及订单物流信息数据分别由不同的微服务提供。假如获取订单基本信息耗时150毫秒,获取订单物流信息耗时120毫秒,则客户端界面调用接口耗时为150毫秒+120毫秒=270毫秒,如果采用异步调用,则耗时会大概在150毫秒左右。提高系统的响应速度。

1.2.2.1 使用方式

var t1= userService.InvokeAsync("OrderService/GetDetail", "OrderId");

var t2 = userService.InvokeAsync("ExpressService/GetExpressInfo", "OrderId");

Task.WaitAll(t1, t2);

var res1= t1.Result;

var res2 = t2.Result;

服务端

2.1 MicroServiceEngine(服务引擎

2.1.1 启动监听(Start)

启动监听,监听客户端的调用。同一个微服务可以发布多个节点,即服务Key相同,ip或者端口不通。

2.1.1.1 使用方式

MicroServiceEngine serviceEngine = new MicroServiceEngine();

serviceEngine.Start("192.168.1.101",5000);

2.1.2 将服务发布到服务注册中心(PublishToServiceCenter)

将服务发布到服务注册中心,发布到服务中心后,客户端会自动收到服务列表推送。

2.1.2.1 使用方式

serviceEngine.PublishToServiceCenter("UserService","192.168.1.101", 5001);

2.1.3 发布Api接口(PublishApi)

发布微服务接口。调用发布Api方法后,服务引擎会通过反射获取当前应用程序所有基类为RocService的类,并且将类中所有方法发布到Api集合中,供客户端调用。关于如何写一个服务端接口,例子如下:

2.1.3.1 使用方式

serviceEngine.PublishApi();

服务注册中心

服务注册中心使用起来相对简单。只需启动监听即可。

ServerCenter ServerCenter = new ServerCenter();

ServerCenter.Start("192.168.1.101", 5001);

简易例子

实现从服务注册中心获取服务列表,并且调用微服务UserService提供的GetUser接口的例子。

1)实例化服务注册中心,并且启动监听,采用Console Application。

代码如下:

启动后界面如下:

由于没有任何输出,所以黑屏。。

2)发布微服务接口

  1. 实例化服务引擎类,启动监听
  2. 发布到服务中心(参数为Key(客户端将通过key订阅服务),服务中心Ip,服务中心端口
  3. 发布接口

    调用PublishApi后,微服务引擎或自动将发布以下方法:

4.启动程序

启动后界面如下:

微服务会向服务注册中心发送心跳包,证明我还活着。

3)调用微服务提供的接口

  1. 实例化ServicePool,并设置服务注册中心地址
  2. 订阅服务,并获取微服务对象
  3. 调用接口

启动程序后界面如图:

可以看出调用微服务接口成功,输出的信息为微服务接口返回的数据。

以上为Roc.SOAFramework使用方式,后续将一一介绍各个模块实现思路。。

原文地址:https://www.cnblogs.com/305681384-lv/p/8179216.html

时间: 2024-08-29 23:57:17

.net 微服务框架的相关文章

基于spring-boot的rest微服务框架

周末在家研究spring-boot,参考github上的一些开源项目,整了一个rest微服务框架,取之于民,用之于民,在github上开源了,地址如下: https://github.com/yjmyzz/spring-boot-rest-framework 主要特性如下: ----------------- 数据访问 dao采用mybatis 3.3.0 + tk.mybatis通用Mapper3.1.3 , 支持事务回滚 数据库初始化脚本 见src/mybatis-generator/ddl

【GoLang】go 微服务框架 &amp;&amp; Web框架学习资料

参考资料: 通过beego快速创建一个Restful风格API项目及API文档自动化:  http://www.cnblogs.com/huligong1234/p/4707282.html Go 语言构建 RESTful Web 服务:  https://www.oschina.net/translate/hardcore-google-communicating-go Golang中使用 JWT认证来 保障Restful JSON API的安全(英文):   http://www.tuico

微服务框架Lagom介绍之一

背景 Lagom是JAVA系下响应式 微服务框架,在阅读本文之前请先阅读微服务架构设计,Lagom与其他微服务框架相比,与众不同的特性包括: 目前,大多数已有的微服务框架关注于简化单个微服务的构建--这是比较容易的一部分内容.Lagom将其扩展到了微服务所构成的系统,这是大型的系统--也是较为困难的一部分内容,因为在这里我们会面临到分布式系统的复杂性. 通信默认是异步的--基于消息和流--但是,如果需要的话,也考虑到了使用其他的方案,如同步的REST. 持久化默认是基于事件的--使用事件溯源Ev

(转)微服务框架落地实践之路

http://www.primeton.com/read.php?id=2276&his=1 一.微服务架构产生的背景 近十年中,互联网给我们生活带来了翻天覆地的变化,消费者的生活方式日益数字化,人们可以在任何时间.任何地点利用网络进行购物体验,运用社交媒体进行自我表达,企业也在运用多种技术手段,发挥数字化潜力,改善客户联系,促进企业业务模式的转型.在这种背景下,互联网也好,传统企业也罢,都面临一个共同的需求:面对快速变化的需求,面对业务模式的升级,如何构建出灵活的,可扩展,可重用的系统? 前几

基于.NET CORE微服务框架 -浅析如何使用surging

1.前言 surging受到大家这么强烈的关注,我感到非常意外,比如有同僚在公司的分享会上分享surging, 还有在博客拿其它的RPC框架,微服务做对比等等,这些举动都让我感觉压力很大,毕竟作为个人的开源项目,无法与成熟的开源社区的项目相比,也只有等到后面有许许多多志同道合的朋友加入一起研发完善surging,这样才能让surging 成为流行的微服务框架. 这篇文章介绍如何使用surging 开源地址:https://github.com/dotnetcore/surging 2.设计模式

Java微服务框架一览

引言:本文首先简单介绍了微服务的概念以及使用微服务所能带来的优势,然后结合实例介绍了几个常见的Java微服务框架. 微服务在开发领域的应用越来越广泛,因为开发人员致力于创建更大.更复杂的应用程序,而这些应用程序作为微小服务的组合能够更好地得以开发和管理.这些微小的服务可以组合在一起工作,并实现更大.应用更广泛的功能.现在出现了很多的工具来满足使用逐段法而不是一次性地设计和构建应用程序的所有需求.今天,我们来看一下什么是微服务.使用微服务的好处,以及几个代码示例. 微服务是什么? 微服务是一种面向

微服务框架学习收录链接(包括服务搭建中用到mybatis-plus等)

1.基于Spring Boot和Spring Cloud实现微服务架构学习(一)-Spring框架介绍 https://blog.csdn.net/zeb_perfect/article/details/51945350 2.Spring Cloud生态圈简介 https://blog.csdn.net/rickiyeat/article/details/59172258 3.标题:Spring Boot 快速搭建微服务框架详细教程 http://www.jb51.net/article/123

【干货】手动搭建一套可自动化构建的微服务框架

如何阅读 本文篇幅较长,我花了两天的时间完成,大约需要半小时阅读. 本文分为理论篇和实践篇,由于代码在手机端展示并不理想,建议大家收藏之后在PC端阅读.实践篇边动手边阅读更有助于理解. 在阅读的同时,也麻烦各位大佬多多分享! 本文你将学到什么? 本文将以原理+实战的方式,首先对"微服务"相关的概念进行知识点扫盲,然后开始手把手教你搭建这一整套的微服务系统. 这套微服务框架能干啥? 这套系统搭建完之后,那可就厉害了: 微服务架构你的整个应用程序将会被拆分成一个个功能独立的子系统,独立运行

日调度万亿次,微服务框架TSF大规模应用——云+未来峰会开发者专场回顾

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 演讲者:张浩 腾讯云中间件产品负责人 背景:众多开发者中,一定经历类似的甜蜜烦恼,就是当线上业务规模越来越大,系统分支发展越来越多的时候,初期上线的成就感很快就会被系统间数据不兼容.不通畅,折磨得精疲力尽,每次模块更新都是牵一发而动全身.腾讯云微服务框架TSF就可以为大家解决数据孤岛以及重复造轮子的问题,提供了简洁易用的代码入口,将复杂的底层网络.服务器部署接口化,使开发者更易用. 本文整理自腾讯云中间件产品负责人张浩在腾讯云云+未来峰