千家信息网

怎么利用Service Fabric承载eShop On Containers

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要讲解了"怎么利用Service Fabric承载eShop On Containers",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么利
千家信息网最后更新 2026年11月02日怎么利用Service Fabric承载eShop On Containers

这篇文章主要讲解了"怎么利用Service Fabric承载eShop On Containers",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"怎么利用Service Fabric承载eShop On Containers"吧!

从模块化到微服务化

从Pet Shop 到eShop on Container都是Microsoft在技术演进的路径上给开发者展示.Net的开发能力和架构能力的Sample工程,Petshop的时候更多的是展现应用的分层架构,设计的抽象与模块间的通讯。到了eShop on Container更多的关注在架构设计与微服务化的,下面我们先来看看eshop on Container的架构图

在上图,我们可以看到后端服务分成了

  1. Identity microservice(验证服务)

  2. Catalog microservice(商品分类服务)

  3. Ordering microservice(订单服务)

  4. Basket microservice(购物车服务)

  5. Marketing microservice(市场营销服务)

  6. Locations microservice(地理位置信息服务)

在以前的分层架构中,通常这些服务都是以某一模块来体现的,为什么现在要将他们拆分成了各个服务呢?当我们从业务场景上面来看这些服务时,我们会发现每个服务的访问峰值时间区间、容量规划都是不一样的,甚至实现这些服务最方便最简单的技术栈都有可能是不一样的(当然强大的.net core无所不能,但是公司内不同业务线上的技术储备不一样,就有可能选择不同的技术实现)。这是因为如果我们都将这些模块整合到了一个程序或者服务中的时候,就会碰到在不同时间内服务高峰期扩展系统容量困难,要不就是资源不足,要不就是资源过剩。譬如抢购业务开始前大家提前个半小时登录了系统,这时候系统最忙的是登录模块,到了开始抢购时间,系统最忙的是订单模块。不采用微服务架构的话,半小时前准备给登录模块使用的资源不一定能够及时的释放出来给订单模块。如果两个模块都使用单一程序架构的话,很可能出现的情况就是抢购的业务把所有资源都占满了了,连其他正常访问系统的用户资源都被占用掉,导致系统崩溃。在讲究Dev/Ops的今天,开发人员和架构师需要更多的考虑硬件架构层面对程序应用带来的影响。

用Service Fabric来承载eShop on Container微服务的方法一,通过Service Fabric直接管理Docker

首先我们先到Azure上申请一个Container Registry来承载eShop各个微服务程序的镜像(image).创建Azure Docker Registry可以参考官方文档:https://docs.microsoft.com/zh-cn/azure/container-registry/

现在最新版本Service Fabric已经可以直接管理编排Docker了。

1.创建一个类型为Container的Service

2.在servicemanifest.xml中描述清楚image所在路径

eshopsample.azurecr.io/catalog:latest

这里非常简单,指定了image所在位置就好了,如果本身Docker Image里需要很多配置信息譬如:数据库链接串、其他服务的地址等等都可以在EnvironmentVariables里面去配置。

3.配置Registry的访问账号密码,需要在ApplicationManifest.xml上面来配置

整个过程不会太复杂,只要配置好了Catalog microserivce的ServiceManifest.xm和ApplicationManifest.xml文件之后,我们可以用同样的方法将其他服务一一配置完成,然后我们就可以将Service Fabric的配置Publish到Cluster上面了。

Service Fabric会自动根据配置在Cluster上面Pull Image和将Docker运行起来。非常简单

用Service Fabric承载eShop on Container微服务的方法二:用Service Fabric的Runtime运行eShop on Container的微服务

Service Fabric本身就是个微服务的开发框架,现在已经直接支持了.net Core 2.0了所以,我们更新了Service Fabric的SDK之后就可以直接创建.net core的服务了

eShop on Container的代码都已经是一份成型的.net core 2.0的代码,所以不需要重新编写服务。

1.通过nuget添加最新的Service Fabric最新的SDK。

2.修改programe.cs,启动ServiceFabric Runtime而不是直接启动Asp.net WebHost

public static void Main(string[] args)

{

try

{

// ServiceManifest.XML 文件定义一个或多个服务类型名称。

// 注册服务会将服务类型名称映射到 .NET 类型。

// 在 Service Fabric 创建此服务类型的实例时,

// 会在此主机进程中创建类的实例。

ServiceRuntime.RegisterServiceAsync("Catalog.API",

context => new CatalogAPI(context)).GetAwaiter().GetResult();

ServiceEventSource.Current.ServiceTypeRegistered(Process.GetCurrentProcess().Id, typeof(CatalogAPI).Name);

// 防止此主机进程终止,以使服务保持运行。

Thread.Sleep(Timeout.Infinite);

}

catch (Exception e)

{

ServiceEventSource.Current.ServiceHostInitializationFailed(e.ToString());

throw;

}

}

3.编写

CatalogAPI 类用于启动WebHost

internal sealed class CatalogAPI : StatelessService

{

public CatalogAPI(StatelessServiceContext context)

: base(context)

{ }

///

/// Optional override to create listeners (like tcp, http) for this service instance.

///

/// The collection of listeners.

protected override IEnumerable CreateServiceInstanceListeners()

{

return new ServiceInstanceListener[]

{

new ServiceInstanceListener(serviceContext =>

new KestrelCommunicationListener(serviceContext, "ServiceEndpoint", (url, listener) =>

{

ServiceEventSource.Current.ServiceMessage(serviceContext, $"Starting WebListener on {url}");

return new WebHostBuilder()

.UseKestrel()

.ConfigureServices(

services => services

.AddSingleton(serviceContext))

.UseContentRoot(Directory.GetCurrentDirectory())

.ConfigureAppConfiguration((builderContext, config) =>

{

IHostingEnvironment env = builderContext.HostingEnvironment;

config.AddJsonFile("settings.json", optional: false, reloadOnChange: true)

.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true);

})

.UseStartup()

.UseServiceFabricIntegration(listener, ServiceFabricIntegrationOptions.None)

.UseUrls(url)

.UseWebRoot("Pics")

.Build();

}))

};

}

}

4.编写serviceManifest.xml描述服务端口等信息

Version="1.0.3"

xmlns="http://schemas.microsoft.com/2011/01/fabric"

xmlns:xsd="http://www.w3.org/2001/XMLSchema"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

Catalog.API.exe

CodePackage

5.修改AppcationManifest.xml增加几个服务的描述信息

添加ServiceImport节

  

在DefaultService中描述Service

这样我们就可以将Catalog这个服务改造成可以通过Service Fabric来管理的微服务了。通过Publish,我们可看到几个服务都已经在Service Fabric下面接受管理和编排了。

访问localhost:5100

感谢各位的阅读,以上就是"怎么利用Service Fabric承载eShop On Containers"的内容了,经过本文的学习后,相信大家对怎么利用Service Fabric承载eShop On Containers这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

服务 架构 模块 配置 系统 就是 类型 资源 业务 信息 技术 更多 程序 开发 管理 不同 方法 时间 订单 学习 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 咖啡 百单网互联网科技有限公司怎么样 科技互联网政务服务 互联网科技金融公司 华中科技有哪些互联网大佬 富国互联网科技创新基金 安控科技rtu产品工业互联网 西藏七维空间互联网科技有限公司 天速互联网络科技有限公司 广州慧亚互联网科技怎么样 武汉健翔互联网络科技有限公司 消费医药和互联网科技 互联网保险科技创业 互联网数据科技专业 南博望互联网科技有限公司 群盈汇互联网科技有限公司 互联网时代的科技公司 求路客互联网科技电话 米泉互联网科技专业怎么样 互联网 科技节活动 微视频大赛 互联网金融监管科技数据 互联网扶贫科技 广州宏创互联网科技 火传媒上海互联网科技 上海亿帐通互联网科技 多迪互联网科技有限公司 老年人脱离互联网科技的作文 金融科技与互联网金融相同和不同 本届互联网博览会上的黑科技 陕西云淼互联网科技公司
0