技术文章
为节点扩展使用企业消息传递(第2部分)
现在我们有了在第1部分中做过的发送器应用程序示例,让我们继续。你可以看第一部分在这里
在本部分中,让我们创建客户更新应用程序和调用此更新应用程序的编排服务。
在创建协调器之前,我们先创建一个应用程序,它可以更新一些关于客户的数据。
客户更新服务
想象这样一个场景,当S/4HANA中的业务合作伙伴更新时,您还想在SAP云平台(一个简单的并排扩展)上更新关于业务合作伙伴的一些信息。
我再次使用Node创建了这个应用程序。但是这次让我们尝试在Visual Studio Code上做这个。
步骤1:生成Package.json
以管理员模式打开命令提示符,进入项目根文件夹。执行下面的命令。
NPM init -yes
这将生成一个初始包。Json文件在根文件夹。
步骤2:让我们安装所需的依赖项
在同一文件夹中,运行以下命令。
NPM I -g @sap/cds-dk
这将安装SAP CDS包,我们将帮助我们创建DB模块和服务模块,并将其部署为云代工上的MTA。
执行命令cd V为了确保它已经正确安装,你应该得到一个类似于下面截图的结果。
特别注意:在撰写本文时,CDS只能在Node V12或更低版本上工作。因此,请确保您安装的节点是版本12、10或8。
步骤3:初始化项目
执行命令cd init customerInfo
这个命令创建一个项目customerInfo,类似于您为Sender Service创建的CAP项目。
步骤4:定义数据模型
在Visual Studio Code中打开项目。
右键单击db文件夹并创建一个文件data-model.cds和下面的代码。
名称空间my.customerInfo;实体customerBasic {key ID: Integer;fname:字符串;lname:字符串;vat:整数;}实体profilesValue{键ID: UUID;关键概要文件:与概要文件的关联;关键客户:与customerBasic的关联;值:字符串;}实体配置文件{密钥ID:整数; name : String; }
这定义了最终将部署在SAP云平台HANA服务上的实体和属性。
步骤5:让我们添加一些模拟数据
现在CDS自动扫描名为CSVDB文件夹下。如果它发现与实体名称相同的文件,它会自动将数据上传到绑定的数据库和相应的表。
因此,创建一个名为my.customerInfo.customerBasic.csv并按如下方式输入数据。
ID;fname;lname;vat 100;Chaith;Mirle;987766 101;香蕉;Slim;76543 200;苹果;乔布斯;1232334 210;葡萄;酸;123455 215;酒店;加州;54433
创建另一个文件my.customerInfo.profiles.csv并按如下方式输入数据。
ID;名称10;店铺楼层尺寸11;品牌活跃度16;地点17
步骤6:创建一个公开数据的服务
让我们创建一个服务来公开这些数据。
创建一个文件customer-service.cds在SRV文件夹下。将下面的代码粘贴到文件中。
用我的。from '../db/data-model';service CatalogService{实体客户@只读作为my.customerBasic上的投影;实体Profiles @readonly作为my.profiles的投影;实体ProfilesValue作为my.profilesValue的投影;}
步骤7:让我们为本地测试添加SQLite3
打开命令提示符并运行命令sqlite3 -D
这将安装sqlite3,并将其作为Devdependency添加到package.json中
步骤8:本地测试
要在本地测试CDS应用程序。运行命令cd表在项目根文件夹中。
您应该能够看到Node将数据上传到sqlite,并且应该生成服务。
默认情况下,您将看到我们的应用程序正在监听localhost:4004。
特别注意: CDS Watch与Nodemon,它监视项目文件夹中的任何更改,并自动重新启动服务器。当你开始项目本身时,你可以运行CDS Watch。
如果你打开浏览器,转到http://localhost:4004您应该能够看到可用的资源。新万博苹果版
点击Customers,应该会显示我们在CSV文件中输入的数据。
现在让我们使用Postman测试POST方法。
启动邮差应用程序或Chrome插件。
测试POST请求,如下所示。
您还可以执行ProfileValue的GET操作,以确保已经创建了数据。
步骤9:部署到SAP云平台
这个步骤需要CF CLI待安装。我希望你已经做过了。
在部署之前,让我们在包中添加一个依赖项。Json如下所示。
“cd”:{"需要":{“分贝”:{“类型”:“sql”}}}
因为我们在部署时将使用HANA而不是SQLite,所以我们需要将该依赖项添加到项目中。
执行命令NPM添加@sap/hana-client -save
最后,我们现在可以部署应用程序了。
使用命令登录cfcf登录
使用命令创建hana服务实例
Cf create-service han心房hdi-sharedcustomerinfo-db
现在,运行以下命令
CDS构建-生产
Cf push -f gen/db
Cf push -f gen/srv -random-route
第一个命令构建应用程序。这将为db和srv生成一个单独的模块
第二个命令创建一个绑定到上面创建的hana服务的应用程序。
第三个命令创建一个应用程序,该应用程序公开了类似于我们前面测试的服务。
特别注意:登录到CF帐户,确保这些应用程序已正确绑定并启动。否则,有时必须手动绑定实例并重新启动服务。
现在让我们创建Orechestrator应用程序,当它从发送方应用程序接收到消息时,它将调用上面的POST API。
的协调器
如果您再次检查我们的体系结构,您会注意到我们需要的关键服务之一是Orchestrator。Orchestrator服务负责将消息代理的调用定向到各自的应用程序。
让我们开始创建这个服务。与sender Service类似,我使用NodeJS来演示,因为在Node中创建服务非常简单。
第一步:登录SAP云平台试用账号
登录到您的SAP云平台试用帐户并单击SAP业务应用工作室.
如果你在一天之后才启动,你会发现你的开发空间会被停止。再次启动服务,然后单击空格。
步骤2:创建一个CAP应用程序
在欢迎选项卡中,单击从模板创建项目
选择限制的项目点击开始.然后输入一个项目名作为capreceiver。
这将创建一个包含不同CAP模块(如db, srv)的空项目
步骤3:编辑项目
就像发送方应用程序准备项目依赖项一样。点击文件package.json
CAP已经生成了一些强制标签。请添加以下依赖项。
"cds": {"requires": {"messaging": {"kind": "enterprise-messaging"}}}
以及应用程序依赖性
“@sap / xb-msg-amqp-v100”:“最新”、“axios”:“^”0.21.0,
这个应用程序将需要称为“axios”的附加依赖项,我们将使用它来调用上面创建的客户更新应用程序的REST api。
Axios是一个HTTP客户端,它为我们提供api,以一种简单和标准的方式调用REST服务。
您将找到包的完整代码示例。下面的json。
{"name": "capreciever", "version": "1.0.0", "description": "一个简单的CAP项目","repository": "<在此添加您的存储库>","license": "UNLICENSED", "private": true, "dependencies": {"@sap/cds": "^3", "@sap/xb-msg-amqp-v100": "latest", "axios": "^0.21.0", "express": "^4"}, "cds": {"requires": {"messaging": {"kind": "enterprise-messaging"}}}, "devDependencies": {"sqlite3": "^5"}, "scripts": {"start": "npx cds run"}}
创建服务
因为我们只是创建一个会调用api的服务,我们不需要任何持久性,因此db模块在这个应用程序中是不需要的。
在文件夹下创建一个新文件深水救生艇被称为receiver-service.cds
将下面的代码添加到其中。
service ReceiverService {entity DummyEntity {key dummyID: Integer;};}
该文件创建名为ReceiverService
在文件夹下创建一个新文件深水救生艇被称为receiver-service.js
Const CDS = require(' @sap/ CDS ') Const axios = require('axios');模块。Exports = cds.service.impl ((srv) => {srv. impl)on('customer/created', async (msg) => {const messagePayload = JSON.stringify(msg.data) let res = await axios。post('<客户更新主机名>/catalog/ProfilesValue', {profiles_ID: 16, customer_ID: 101,值:"Munich"}) .then((response) => {console.log(response);}, (error) => {console.log(error);});;}})
当队列中接收到消息时,此特定代码将在事件上被调用/客户/创建.
请注意:来替换axios中的主机名。后函数调用。
接收到消息后,将使用Axios.post客户配置文件更新应用程序的API。
基于队列,您可以对不同的应用程序进行多个调用,并以这种方式编排整个集成场景。
添加MTA文件
让我们加入MTA.yaml归档并构建它。
您可以按照与发件人服务相同的步骤创建MTA文件。
现在右击MTA。YAML文件并选择构建MTA.
属性将生成mta_archives文件夹.mtar用于部署在云代工上的文件。
部署到云铸造
展开文件夹mta_archives右键点击capreiver-srv.mtar文件,并选择部署MTA存档。
验证云代工空间以确保实例正在运行。
确保企业消息传递实例绑定到应用程序。
整个场景的最终测试
好了,现在我们已经准备好了所有应用程序及其实例,让我们测试整个场景
确保应用程序的所有实例都在运行。
打开capsender-srv并运行sender URL。
现在打开Postman并在ProfilesValue资源上执行GET操作。您应该能够找到customer_id: 101,配置文件值为“Munich”。
这听起来很简单!!但在后台,当你调用send ()函数将消息发送到代理(您可以检查消息传递仪表板)并且正在侦听队列的Orchestrator收到了消息。
一旦它收到,它就调用我们的POST请求客户更新应用程序最终更新了Profile值。
如您所见,我们开发的所有应用程序都可以相互通信异步并且根本不需要太多的接口映射。
现在,想象一下,如果我们可以编排企业中的所有事件,并将应用程序以这种方式相互通信。我们不仅减少了臃肿应用程序的占用空间,而且使我们的开发团队更加敏捷。
在我看来,这就是企业消息传递的力量!
此外,您还可以将S/4HANA配置为您的发送应用程序,以编排在核心ERP中发生的业务事件。
我也会尽快写一篇关于这方面的博客。
我建议您在介绍中包含到本博客第1部分的链接,以便于进行关联。
完成了。第一部分后来由版主发布,所以没有链接
优秀的博客Chaithanya!
迫不及待地想看到它与S/4连接(最好在prem上)一起工作
不错的博客Chaithanya!!