内容


通过 IBM Cloud 上的 Weather Data 和 Business Rules 服务自动制定运营业务决策,第 2 部分

完成您的 Weather Cancellation 服务样本

Comments

系列内容:

此内容是该系列 2 部分中的第 # 部分: 通过 IBM Cloud 上的 Weather Data 和 Business Rules 服务自动制定运营业务决策,第 2 部分

敬请期待该系列的后续内容。

此内容是该系列的一部分:通过 IBM Cloud 上的 Weather Data 和 Business Rules 服务自动制定运营业务决策,第 2 部分

敬请期待该系列的后续内容。

本文是包含两部分的系列的第 2 部分,将介绍如何结合使用 Weather Data 和 Business Rules IBM Cloud 服务来根据天气条件自动制定运营业务决策。这么做的前提条件是天气事件会影响业务运营。这促使业务人员通过预测天气事件并自动制定考虑了天气预报数据的运营决策,更加明智地开展业务。

第 1 部分中,您设置了 IBM Cloud 服务来创建业务规则项目、业务对象模型和主要的天气决策操作。

第 2 部分将详细介绍第 1 部分中创建的决策操作,展示如何创建使用天气数据的简单业务规则和包含这些规则的规则流,然后将决策操作部署到 IBM Cloud。您将定义一个 Node-RED 流来编排对 Weather Data 服务、Business Rules 服务的调用,并根据执行业务规则的结果来执行操作。最后,会将这个流公开为 HTTP Acme Bus Weather Cancellation 服务,它基于来自 Weather Data 服务的天气条件来通知已作出的决策的项目干系人取消公共汽车旅游。

构建您的应用程序需要做的准备工作

您应该熟悉以下技术和软件:

要构建 Acme Bus Weather Cancellation 服务样本,您需要设置以下帐户和软件:

第 1 步.编排决策操作,添加规则包和主规则流

按照第 1 部分中的说明设置规则项目之后,是时候通过添加规则包、创建规则流和编写业务规则来编排决策操作了。

您需要创建规则包,以便根据输入到决策操作的天气数据类型来组织规则。您将把每个规则包映射到规则流的一个分支中的某个规则任务,还将创建一个基于天气数据来编排业务规则的主规则流。主规则流将使用规则任务作为容器,容纳您制定并组织到规则包中的业务规则。

  1. 启动 Rule Designer 并打开您完成第 1 步中的步骤时使用的工作区。
  2. 单击 WeatherDataRuleApp Operation Map 的 Orchestrate 节点中的 Add rule package图 1
    图 1
  3. New Rule Package 对话框的 Package 中输入“com.ibm.developerWorks.weather.alert”,单击 Finish 创建规则包。
  4. 重复第 3 步,为每年、当前、每日和每小时预报创建规则包,得到的规则包如下图所示。 图 2
    图 2
  5. 单击 Rule Project Map 的 Orchestrate 节点中的 Add ruleflow
  6. 在出现的 New Ruleflow 对话框中的 Name 字段中输入“mainRuleflow”,并单击 Finish
  7. 主规则流将包含分支逻辑,用于选择路径并根据天气数据输入来执行规则。可以按下图所示来创建规则流,或者可以导入来自 GitHub 的 BluemixWeatherAndBusinessRules 中的配套源代码中提供的主规则流。要导入主规则流,请执行第 8 步,否则前进到第 9 步。 图 3
    图 3
  8. 导入主规则流:
    1. 在浏览器中,访问 https://github.com/nddelima/BluemixWeatherAndBusinessRules 并导航到 WeatherDataRuleProject/rules 文件夹。
    2. 单击 mainRuleflow.rfl,将文件内容复制并粘贴到文件系统上的目标位置中的一个同名文件中。
    3. 从 Rule 透视图中的 Rule Explorer 视图,展开 WeatherDataRuleProject,右键单击 rules 文件夹,并从弹出菜单中选择 Import...
    4. 在 Import 对话框中,选择 General >File System 并单击 Next
    5. 单击 Browse... 并导航到保存 mainRuleFlow.rfl 的目录。单击 mainRuleFlow.rfl 旁边的复选框(如下图所示)来选中它,并单击 Finish 导入该规则流。 图 4
      图 4
  9. 在 Rule Project Map 视图中,单击 Operation Map 的 Orchestrate 部分的 Bind ruleflow 链接,以便绑定和编排该工作流。
  10. 这将打开决策操作编辑器的 Overview 选项卡。在 Ruleflow 部分,选择 Use main ruleflow: 单选按钮,单击此单选按钮旁边的 choose a ruleflow 链接打开一个对话框,以选择要使用的主规则流。
  11. 在 Ruleflow 对话框窗口中,展开 rules 文件夹,选择 mainRuleflow,单击 OK 以确认该选择,并将规则流更改保存到决策操作中。

第 2 步.制定使用天气数据的业务规则

要基于 48 小时、每日天气预报数据来自动制定决策,需要创建操作规则。

如果每小时降雪量预报总计超过 8 英寸的阈值,您创建的操作规则将设置一个通知标志和一条通知消息。

  1. 要创建表示这一决策逻辑的操作规则,请执行以下操作:
    1. 在 Rule Project Map 视图中,单击 WeatherDataRuleApp Operation Map 的 Author 部分的 Add action rule 链接。
    2. New action rule 对话框中,在 Package 中输入“com.ibm.developerWorks.weather.hourly”。
    3. 在 Name 中输入“Calculate48hrSnowfallTotal”。
    4. 单击 Finish 创建空操作规则。图 5
      图 5
  2. 为该操作规则添加业务逻辑,以便使用每小时天气预报来计算 48 小时内的总降雪量。
    1. 在 Rule Explorer 视图中,展开第 1 部分中创建的规则项目。展开 rules 文件夹并打开 WeatherDataRulesVariables 变量集。在变量集编辑器中,单击 Add
    2. 对于新变量条目,在 Name 中输入“HourlySnowfallTotal”,在 Type 中选择 java.lang.Integer,在 Verbalization 中输入“The 48 hour snowfall total”,并在 Initial Value 中输入“0”。
    3. 保存变量集编辑器。
    4. 将以下业务操作语言代码片段粘贴到 Intellirule 视图的内容编辑器中,并将更改保存到操作规则中。
      then    
      for each Hourly Weather in the forecasts of 'The Hourly Forecast' :
      set 'The 48 hour snowfall total' to 'The 48 hour snowfall total' + the snow qpf of this Hourly Weather ;
  3. 创建另一个操作规则来保存一个条件逻辑,如果 48 小时的总降雪量超过 8 英寸的阈值,则会设置一条通知消息和一个标志:
    1. 在 Rule Project Map 视图中,单击 WeatherDataRuleApp Operation Map 的 Author 部分的 Add action rule 链接。
    2. 选择 WeatherDataRulesProject/rules 作为源文件夹。
    3. New action rule 对话框中,在 Package 中输入“com.ibm.developerWorks.weather.hourly”。
    4. 在 Name 中输入“NotifyIf48hrSnowfallExceedsThreshold”。
    5. 单击 Finish 创建空操作规则。
  4. 将新操作规则的业务逻辑添加到 Intellirule 视图的内容编辑器中。
    if 'The 48 hour snowfall total' is more than 8
    then 
    set Notify to true;
    set 'Notification Message' to "The snowfall total for the next 48 hours is expected to be " + 'The 48 hour snowfall total' + " inches.Services will be canceled.";
    else 
    set Notify to false;
    set 'Notification Message' to "Services are operational.";
  5. 在规则流编辑器中打开 mainRuleFlow 图,并选择 Hourly Forecast 规则任务。您将按下图中出现的顺序添加刚创建的两条新规则。
    1. 在 Properties 视图的 Rule Selection 选项卡中,单击 Edit
    2. 在 Select Rules 对话框中,导航到 com.ibm.developerWorks.weather.hourly,双击 Calculate48hrSnowfallTotal 以便首先添加它。
    3. 然后双击 NotifyIf48hrSnowfallExceedsThreshold 来添加它。
    4. 切换到 Rule Task 选项卡,确保 Rule Execution 的 Ordering 属性被设置为“Literal”。
    5. 单击 OK图 6
      图 6

备注:因为第一条规则 Calculate48hrSnowfallTotal 将会计算总降雪量,所以它需要在第二条规则 NotifyIf48hrSnowfallExceedsThreshold 之前执行。出于这个原因,必需先添加规则 Calculate48hrSnowfallTotal 来创建此文字顺序。除此之外,还有其他设置顺序的方式。

本节中添加的规则演示了如何使用天气预报数据来制定和自动制定复杂决策。

第 3 步.创建一种部署配置来部署决策操作

本节将介绍如何打包业务规则项目和决策操作,以便将它们部署到 IBM Cloud 上的 Business Rules 服务。

  1. 选择 Rule Project Map 视图,并单击 Decision Service Map 的 Deploy and Integrate 部分的 Create deployment configuration 链接。
  2. New Deployment Configuration 对话框中:
    1. 单击 Browse,导航到 WeatherDataRuleProject/deployment,并单击 OK
    2. 在 Name 中输入“WeatherDataRulesDeploymentConfig”。
    3. 单击 Finish。这将在部署配置编辑器中打开新的部署配置: 图 7
      图 7
  3. 现在将决策操作添加到部署配置中:
    1. 切换到 Decision Operations 选项卡。
    2. 单击 Add (+) 按钮。
    3. Select a Decision Operation 对话框中,选择 Select existing decision operations:单选按钮。
    4. 展开 WeatherDataRuleProject 文件夹并选择 WeatherDataRuleApp 复选框。
    5. 单击 Finish
    6. 保存部署配置编辑器。 图 8
      图 8
  4. 现在将设置一种目标业务规则服务器配置。第 1 部分中创建的 IBM Cloud Business Rules 服务包含您需要的目标规则执行服务器的信息。
    1. 打开 IBM Cloud 控制台,从 IBM Cloud 仪表板中打开在第 1 部分中创建的 Business Rules 应用程序。
    2. 单击左侧导航栏中的 Connections 条目,并单击 Business Rules 服务。
    3. 单击 Connection Settings 选项卡并记下 URL、Username 和 Password 值。您需要使用此信息来设置目标业务规则服务器。 图 9
      图 9
  5. 切换回 Rules Designer 并打开部署配置编辑器,以便添加您在 IBM Cloud 上找到的连接设置信息。
    1. 切换到 Target Servers 选项卡。
    2. 单击 Add (+) 按钮,并在出现的 Target Servers 对话框中选择 Create a Rule Execution Server configuration 单选按钮。
    3. 单击 Next
    4. Add Rule Execution Server Connection 对话框中:
      1. 在 Name 中输入“IBM Cloud RES”。
      2. 输入上一步中记下的 URL、Username 和 Password 值。
      3. 单击 Test Connection。如果 Rules Designer 能连接到 IBM Cloud Business Rules 服务,您将会看到一条“Connection succeeded”消息。
      4. 在成功建立测试连接后,单击 Finish 创建目标服务器。 图 10
        图 10
    5. 最后,保存部署配置。 图 11
      图 11

第 4 步.将决策操作部署到 IBM Cloud Business Rules 服务

在本节中,会将决策操作部署到 IBM Cloud 上的 Business Rules 服务。

  1. 在 Decision Service Map 视图中,单击 Deploy and Integrate 部分的 Deploy RuleApp 链接。
  2. 保留 Deployment Summary 对话框中的默认值不变,单击 Next图 12
    图 12
  3. 保留 RuleApp Deployment 对话框的 Credentials 页面上的默认值不变,单击 Next
  4. 保留 RuleApp Deployment 对话框的 Version Summary 页面上的默认值不变,单击 Finish 将决策服务部署到 IBM Cloud。
  5. 成功部署决策服务后,您会看到一个类似下图的 HTML 报告。单击该报告查看它的内容,确保您的规则应用程序已成功部署。 图 13
    图 13
  6. 切换回 IBM Cloud 控制台,在 Business Rules 服务管理页面上选择 Decision Services 选项卡。单击 Refresh,您会看到您的规则应用程序已列出。 图 14
    图 14
  7. 单击此视图中的 WeatherDateRuleApp 1.0 规则应用程序,以打开 RuleApp 端点细节视图。稍后您会在您创建的一个 Node-RED 流中使用该 URL,以便调用决策服务来执行您的业务逻辑。 图 15
    图 15

第 5 步.创建一个 Node-RED 流来将 Weather Data 服务连接到 Business Rules 服务

在这一步,您将创建一个 Node-RED 流(如下图所示),它将您的 Weather Data 服务的输出和 IBM Cloud 上与您的天气数据相关的决策服务连接在一起。要完成这一步,您将创建一个 Node-RED 流,以便通过 HTTP GET 请求接受某个位置的经纬度。此请求将位置信息发送到 Weather Data 服务来获取 48 小时天气预报数据。最后,48 小时天气预报 JSON 数据将被格式化,然后发送到您的决策服务,该服务会根据此数据执行操作并返回一个决策。

图 16
图 16
  1. 启动 IBM Cloud 仪表板,并单击 Weather and Business Rules App 的应用程序路径。
  2. 在 IBM Cloud 主页中,单击 Node-RED 上的 Go to your Node-RED flow editor 按钮。如果您在第 1 部分中对您的 Node-RED 编辑器进行了密码保护,您需要输入用户名和密码进行登录。
  3. 可以从 GitHub 导入 Node-RED 流并配置它,或者自行实现它来与下图中提供的信息进行匹配。要导入该流,请完成第 3a-h 步,并跳到第 6 步。部署 Node-RED 流并测试通知服务端点。如果您计划自行创建该流,可直接前进到第 4 步。
    1. GitHub 上的 Node-RED 流样本的内容复制到剪贴板。
    2. 在 Node-RED 流编辑器中,使用右侧的汉堡包形状菜单选择 Import > Clipboard 菜单选项: 图 17
    3. 将剪贴板的内容粘贴到 Import nodes 对话框的文本框区域,并单击 Import图 18
      图 18
    4. 在导入的流中,双击名为 business rules 的节点来配置 Business Rules 服务。
    5. Bluemix Service 下拉列表中选择您的 Business Rules 服务。
    6. 选择 Decision Services 下拉列表中的第一个条目,该条目始终使用您部署的决策服务的最新版本。
    7. 单击 Done
    8. 可选:将 Twitter 节点配置为以推文形式发表响应消息。双击 tweet 节点,您需要选择您的 Twitter 凭证或 Add new twitter-credentials,然后单击铅笔按钮来验证和授权您的 Node-RED 应用程序连接到 Twitter。输入完信息后,单击 Done
    9. 直接前进到第 6 步。部署 Node-RED 流并测试通知服务端点。
  4. 创建并配置一个 HTTP Request 节点:
    1. 在面板的 input 部分,将一个 http input 节点拖到画布上。
    2. 双击 HTTP Request 节点,为它配置下图中所示的值: 图 19
      图 19
    3. 单击 Done
  5. 从面板的 function 部分将 function 节点拖到画布上。
  6. 将上一个节点的输出连接到这个节点。该 function 节点将提取在调用第 1 步中配置的 HTTP URL 时发送的 HTTP 请求的经纬度查询字符串参数。HTTP GET 请求 URL 的格式为:https://appname.mybluemix.net/decisions/48hr?lat=10&lon=10。双击该节点,将以下代码片段添加到函数编辑器:
    node.log(msg.req.query.lat);
    node.log(msg.req.query.long);
    var lat = (msg.req.query.lat === undefined ? 0 : msg.req.query.lat);
    var long = (msg.req.query.long === undefined ? 0 : msg.req.query.long);
    msg.payload = lat + "," + long;
    return msg;

    msg.payload 包含逗号分隔的经纬度值,后续 Weather Data 服务将使用这些值。
  7. 从面板的 weather 部分将 Weather Insights 节点拖放到画布上。将上一个 function 节点的输出连接到这个节点。 此节点将使用绑定到 Node-RED 应用程序的身份验证凭证来调用 Weather Insights 服务。为 Weather Insights 节点配置下图中所示的值: 图 20
    图 20
  8. function 节点从面板的 function 部分拖动到画布上,将来自上一个 Weather Insights 节点的输出连接到此节点。这个 function 节点将格式化 Weather Data 服务的输出数据模型,并将其转换为 Business Rules 服务的决策操作的输入数据模型。Weather Insights API 将返回一个 JSON 对象,其中包含一个名为 class 的属性,该属性是决策服务 XOM 中的保留字,而且需要重新命名。function 节点内容中的以下代码片段将实现此目的:
    msg.payload = '{"HourlyForecast": { "forecasts"' + ':'+  JSON.stringify(msg.forecasts) + '}}';
    msg.payload = msg.payload.replace(/class/g, "class_");
    return msg;
  9. Business Rules 节点从面板拖动到画布上,并将该 function 节点的输出连接到 Business Rules 服务的输入。配置 Business Rules 服务,使其与下图类似:
    1. 双击该节点。
    2. Bluemix Service 下拉列表中选择您的 Business Rules 服务。
    3. 选择 Decision Services 下拉列表中的第一个条目,该条目始终使用您部署的决策服务的最新版本。
    4. 单击 Done图 21
      图 21
  10. function 节点从面板拖动到画布上,将来自上一个 Business Rules 节点的输出连接到此节点。如果在执行业务规则时设置了任何通知消息,这个 function 节点会提取该消息。它是从 Business Rules 服务响应中提取数据的一种方法。双击该节点,将以下代码片段添加到函数编辑器,然后单击 Done
    var obj = JSON.parse(msg.payload);
    msg.payload = obj.NotificationMsg;
    return msg;
  11. HTTP Response 节点从面板拖动到画布上,将上一个 function 节点的输出连接到这个 HTTP Response 节点。这会将从上一个 function 节点中提取的消息有效负载返回给调用方。
  12. 可选:可以添加一个 Twitter notification 节点来以推文形式发表响应消息。
    1. 将 twitter 节点从 Node-RED 面板的 social 部分拖动到画布上。
    2. 将上一个 function 节点的输出连接到这个 HTTP Response 节点。
    3. 双击 tweet 节点,您需要选择您的 Twitter 凭证或选择 Add new twitter-credentials,并单击铅笔按钮来验证和授权您的 Node-RED 应用程序连接到 Twitter。
    4. 单击 Done图 22
      图 22

您还可以在 Node-RED 流的各个点添加调试节点,以观察来自流中每个节点的输出。

第 6 步.部署 Node-RED 流并测试通知服务端点

在这一步,您将部署并运行您的 Node-RED 流。

  1. 单击 Node-RED 编辑器右上角的 Deploy 下拉按钮并选择 Full,以部署完整的 Node-RED 流。如果 Node-RED 流成功部署,您会在 Node-RED 编辑器中看到一条“Successfully Deployed”弹出消息,而且 Deployed 按钮将变为禁用。 图 23
    图 23
  2. 现在运行您的样本通知服务端点。此服务端点是一个 HTTP GET Request URL,格式为 https://appname.domain.mybluemix.net/decisions/48hr?lat=10&lon=10,其中 latlon 表示您想监视的服务区域的纬度和经度。将该 URL 粘贴到浏览器中。

根据该位置的天气,您会看到一条显示为“The snowfall total for the next 48 hours is expected to be nn inches.Services will be canceled.”或“Services are operational.”的响应。执行 Node-RED 流期间出现的所有错误都会显示在 Node-RED 编辑器的调试视图中。验证步骤到此结束。

您构建了一个 Node-RED 流服务,演示了如何结合使用天气数据和业务规则来执行一个操作,以响应运营决策。

可以将 Node-RED 流中的起始 HTTP Request 节点和最终的 HTTP Response 节点替换为其他起始和终止节点。例如,起始节点可以是一个计时器节点,它从一个数据库中读取一组配置好的位置坐标和通知偏好,然后对每个位置调用天气和业务规则服务。终止节点可以是任何通知,比如电子邮件、推送通知、推文,甚至是发送给 IoT 设备的信号。

结束语

您已成功完成从第 1 部分开始的决策操作构建过程。在第 2 部分,您还制定了使用天气数据作为输入的业务规则,创建并编排了一个规则流,还创建了一个决策操作并将它部署到 IBM Cloud。您定义了一个 Node-RED 流来编排对 Weather Data 和 Business Rules 服务的调用,从一个 HTTP Request 节点开始,到一个 HTTP Response 响应和可选的 Twitter 通知节点终止。您的流(即 HTTP Acme Bus Weather Cancellation 服务)根据来自 Weather Data 服务的天气条件来通知已作出的决策的项目干系人取消公共汽车旅游。

致谢

感谢 Uzma Siddiqui 详细的评审并提供周到的建议来让本文更加完美。


相关主题


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Cloud computing, Middleware
ArticleID=1057261
ArticleTitle=通过 IBM Cloud 上的 Weather Data 和 Business Rules 服务自动制定运营业务决策,第 2 部分: 完成您的 Weather Cancellation 服务样本
publish-date=01242018