dotnetcore microservices poc

其他类别 2025-08-06

ASCLAB .NET CORE POC-实验室保险销售门户网站

这是在微服务体系结构中使用:

  • .NET 8
  • 实体框架核心
  • MediaTr
  • 尤里卡
  • Ocelot
  • JWT令牌
  • 重复
  • RAWRABBIT
  • NHIBERNATE
  • 波莉
  • NEST(Elasticsearch客户端)
  • Dapper
  • DynamiceXpresso
  • 信号

可以在我们的博客上找到描述体系结构,应用设计模式和技术的综合指南:

  • 第1部分计划
  • 第2部分使用CQR和MediaTR塑造微服务的内部体系结构
  • 第3部分与尤里卡(Eureka)的服务发现
  • 第4部分与Ocelot构建API网关
  • 第5部分Marten是您的域聚合的理想存储库
  • 第6部分实时服务器客户端与Signalr和RabbitMQ的通信
  • 第7部分带有RabbitMQ的交易式输出箱

有关微服务的其他文章可能很有趣:

  • 开发人员的CQR和事件采购介绍
  • 从整体到微服务 - 迁移还是不迁移?
  • 活动猛烈袭击 - IT项目的创新

业务案例

我们将建立非常简化的系统,以供保险代理商出售各种保险产品。保险代理商将不得不登录,系统将向他们提供他们可以出售的产品列表。代理商将能够查看产品并找到适合其客户的产品。然后,他们可以创建要约,系统将根据提供的参数计算价格。
最终,代理商将能够通过将报价转换为政策和打印PDF证书来确认销售。
门户网站还将使他们能够搜索和查看要约和政策。
门户网站还将具有一些基本的社交网络功能,例如代理商聊天。
最新功能是一个业务仪表板,它使用Elasticsearch聚合和ChartJ显示销售统计信息。

体系结构概述

  • Web- VUEJS单页应用程序,可提供保险代理人为其客户选择合适的产品,计算价格,创建要约并通过将报价转换为保单来结束销售过程的能力。该应用程序还提供了策略和优惠的搜索和查看功能。 Frontend通过Agent-Portal-Gateway与后端服务进行对话。

  • Agent Portal API网关- 是一种特殊的微服务,其主要目的是从客户端应用程序中隐藏基础后台服务结构的复杂性。通常,我们为每个客户端应用创建一个专用的API网关。如果将来我们在系统中添加了一个Xamarin移动应用程序,我们将需要为其构建专用的API网关。 API网关还提供安全性障碍,不允许通过未经验证的请求将其传递给后端服务。 API网关的另一个流行用法是来自多个服务的内容汇总。

  • 验证服务- 负责用户身份验证的服务。我们的安全系统将基于JWT令牌。用户正确识别自己后,Auth Service会发出代币,该令牌可进一步用于检查用户许可和可用产品。

  • 聊天服务- 一种使用SignalR来使代理商互相聊天的服务。

  • 付款服务- 主要责任:创建策略帐户,显示策略帐户列表,在银行对帐单文件中的付款中注册。
    该模块正在照顾管理政策帐户。创建政策后,将在此服务中创建一个帐户,并具有预期的货币收入。 Paymentservice还实施了计划的过程,该过程已进口带有付款的CSV文件,并将付款分配给策略帐户。该组件使用RabbitMQ和创建背景作业的能力显示服务之间的异步通信。它还具有使用Dapper访问数据库的功能。

  • 政策服务- 创建优惠,转换为保险单。
    在这项服务中,我们演示了CQRS模式的使用,以更好地读取/写入操作隔离。该服务展示了服务之间的两种通信方式:通过HTTP客户端对PricingService的同步呼叫,以获取价格,并使用RabbitMQ使用RabbitMQ来发布有关新创建策略的信息的异步事件。在此服务中,我们还使用NHIBERNATE访问RDBMS。

  • 政策搜索服务- 提供保险政策搜索。
    该模块聆听RabbitMQ的事件,转换为“读取模型”的DTO和Elasticsearch中给定索引的索引,以提供高级搜索功能。

  • 定价服务- 一项负责根据其参数化计算给定保险产品价格的服务。
    对于每种产品,应定义关税。关税是一组规则,基于计算价格。 DynamiceXpresso用于解析规则。在政策购买过程中,政策服务与此服务连接以计算价格。价格是根据用户对定义问题的答案计算的。

  • 产品服务- 简单的保险产品目录。
    它提供有关每种保险产品及其参数的基本信息,这些信息可以在为客户创建报价时自定义。

  • 文档服务- 此服务使用JS报告生成PDF证书。

  • 仪表板服务- 列出销售统计信息的仪表板。
    呈现我们代理商销售结果的业务仪表板。仪表板服务订阅了Elasticsearch中销售政策和索引销售数据的事件。然后,Elasticsearch聚合框架用于计算销售统计数据,例如:每次产品的总销售额和每次产品的策略数量,给定时间段和销售时间表中的每个代理商销售。使用ChartJ可以很好地可视化销售统计数据。

每个业务微服务也都有.API项目(PaymentService.API,PolicyService.API等),我们在其中定义了使用单位和集成测试的命令,事件,查询和操作以及.test项目(Paymentservice.test,policyservice.test)。

与Docker一起跑步

您必须在撰写之前安装Docker&Docker。
脚本已分为两个部分:

  • Infra.yml运行必要的基础设施。
  • App.yml用于运行应用程序。

您可以使用脚本来构建/运行/停止/向下所有容器。

运行整个解决方案:

 cd scripts
./infra-run.sh
./app-run.sh

如果Elasticsearch无法启动,请尝试运行Sudo Sysctl -W VM.Max_map_count = 262144首先

启动应用程序和基础架构后,您可以在浏览器中打开http:// localhost:8080,并查看我们的欢迎页面。到达那里后,您可以使用帐户菜单项登录系统。有效的用户和密码可以在此处找到。例如,您可以使用密码管理员登录为管理员。

手动运行

先决条件

安装PostgreSQL版本> = 10.0。

安装兔子。

安装Elasticsearch版本> = 6。

初始数据库

视窗

 cd postgres
" PATH_TO_PSQL.EXE " --host " localhost " --port EXAMPLE_PORT --username " EXAMPLE_USER " --file " createdatabases.sql "

就我而言,此命令看起来像:

 cd postgres
" C:Program FilesPostgreSQL9.6binpsql.exe " --host " localhost " --port 5432 --username " postgres " --file " createdatabases.sql " 

Linux

sudo -i -u postgres
psql --host " localhost " --port 5432 --username " postgres " --file " PATH_TO_FILE/createdatabases.sql "

此脚本应创建LAB_USER用户和以下数据库:lab_netmicro_payments,lab_netmicro_jobs,lab_netmicro_policy和lab_netmicro_pricing。

运行尤里卡

我们项目的服务注册表和发现工具是Eureka。它包含在项目中。为了启动打开终端 /命令提示。

 cd eureka-server
./gradlew.[bat] bootRun

这应该启动Eureka,您应该可以访问http:// localhost:8761/,然后参见eureka管理面板。

建造

在没有测试的情况下从命令行构建所有项目:

视窗

 cd scripts
build-without-tests.bat

Linux

 cd scripts
./build-without-tests.sh

通过测试从命令中构建所有项目:

视窗

 cd scripts
build.bat

Linux

 cd scripts
./build.sh

运行特定的服务

使用特定服务(PolicyService,Productservice等)转到文件夹,然后使用Dotnet Run命令。

下载源码

通过命令行克隆项目:

git clone https://github.com/asc-lab/dotnetcore-microservices-poc.git