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 Files\\PostgreSQL\\9.6\\bin\\psql.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命令。
