使用Java Spring Boot和导体建立强大的订阅系统
#java #springboot #orchestration #subscription

在管理订阅时,手动处理续订过程的组织对组织来说是令人生畏的。 如果您忘记了您的续约?它肯定会影响您的组织,从而导致服务中断和经济处罚。

您可能已经听说过几个实例,组织忘记了其域名的续订,导致停电使它们造成数百万美元。

自动订阅续订过程是克服此类情况的唯一方法。可以利用像Orkes指挥这样的编排引擎来自动化您的订阅工作流程。 Orkes导体是建立Netflix导体的应用程序构建平台。

在此博客中,让我们看一下如何构建示例订阅申请,以使用导体和Java Spring Boot 2进行每月订阅。

每月订阅工作流程:解释

假设您的每月订阅工作流的业务逻辑如下:

  1. 触发一个包括试用期的订阅工作流。试验期包括发送欢迎邮件和等待期,直到审判结束为止。
  2. 一旦审判结束,它就会启动应重复每个计费期的计费过程。
  3. 在指定的计费期限的末尾,工作流程结束并通知用户。
  4. 用户应该能够在试用期或计费期间的任何时候取消订阅。
  5. 一种在试验开始,计费开始时以及订阅完成/取消时通知用户的一种方法。

让我们可视化工作流程:

Workflow handling monthly subscriptions

View in Playground

运行工作流程时需要提供以下输入参数。

  • userId
  • userEmail
  • Billingamount
  • billingperiod

让我们看看工作流程如何进展:

  • 工作流程从fork-join任务开始,该任务使您可以并行运行指定的任务列表。

在此示例中,我们有两个叉子。第一个叉子处理订阅流,包括试验和实际订阅过程。如果用户取消,则第二个叉子等待信号。叉子可以完成并结束工作流程。

  • 在第一个叉子中,当用户订阅时,试验期开始。一封电子邮件发送给用户有关试验的开始。这是使用worker task (SIMPLE task)实现的,您可以在其中配置电子邮件主题和电子邮件内容。电子邮件ID和用户名将从工作流输入中调用。
{
           "name": "send-subscription-demo-email",
           "taskReferenceName": "send_welcome_email",
           "inputParameters": {
             "emailSubject": "Welcome to the subscription!",
             "emailContent": "Some email content welcoming user to subscription",
             "userEmail": "${workflow.input.userEmail}",
             "userId": "${workflow.input.userId}"
           },
           "type": "SIMPLE",
},
  • 随后是wait任务,可以根据您的试用期进行配置为等待。在此示例中,我们将其配置为等待直到10秒。
  • 等待时间结束后,订阅开始,并使用上面定义的相同任务定义发送有关此的电子邮件。
  • 然后订阅开始并循环直到使用do-while任务完成。

现在,如果用户取消订阅该怎么办?

如果用户取消,则第二个叉子等待信号。要通过信号,我们在此示例中利用了Webhook。 webhook配置了以下参数:

Webhook for invoking subscription workflow

  • 在字段下工作流以接收Webhook事件,我们选择了每月订阅工作流程。
  • 导体对大多数提供商都提供了离心的支持。由于我们使用curl命令将信号发送到Webhook,因此我们选择了源平台作为 custom
  • webhook配置为期望一个名为 subscriptionFlow 的标头,其值 subscription-flow-header-header-unique-nique-value
  • 最初保存Webhook时,URL将是未经验证的,当第一个事件来自配置标头值的Webhook时,将验证URL。

在此示例中,我们已经在操场上创建了一个webhook

wait_for_webhook 工作流定义中的任务中,输入匹配定义为:

"inputParameters": {
             "matches": {
               "$['event']['userId']": "${workflow.input.userId}"
             }
},

因此,使用卷曲的样本Webhook调用如下:

curl -H "Content-Type:application/json" -H "Accept:application/json"      -H 'subscriptionflow: subscription-flow-header-unique-value'         -X POST 'https://play.orkes.io/webhook/ba70ba33-1a19-449e-98c2-d4581fcd9aad'      -d '{"event": {"userId" : "user-id-1"}}'

它包括标题键和值(与Webhook中配置的相同),Webhook URL和输入参数',它们应该与您提供的工作流输入相同。

您可以使用我们在操场上创建的Webhook来运行此示例。如果您使用另一个自定义Webhook,请确保在调用时替换Webhook URL。在您的春季启动项目中,在application.properties下,您需要更新Webhook URL。

运行Spring Boot应用程序

用于定义此应用程序的代码可在github上找到:https://github.com/conductor-sdk/orkes-java-springboot2-subscription-example

本地运行此应用程序:

  1. 克隆系统上本地的Spring Boot项目。
  2. 用访问密钥替换application.properties文件。查看本指南有关generate access keys from Playground的指南。
orkes.access.key=your_key_id
orkes.access.secret=your_key_secret
orkes.conductor.server.url=https://play.orkes.io/api.

您还需要提供permissions for the application to access the workflow and tasks

注意:如果您在本地运行导体,请用导体服务器URL替换orkes.conductor.server.url。

使用以下命令从根项目文件夹中运行Spring Boot应用程序:

mvn spring-boot:run

此应用程序具有在SubscriptionApiController.java中暴露的控制器,并具有以下API方法:

  1. /starterubscription :调用时,它将触发处理订阅的工作流程。
  2. /cancelsubscription :调用后,它将webhook api称为导体,以表明订阅已经结束。

在操场上运行订阅工作流程

现在您了解了订阅工作流程。由于您已经配置并运行了Spring Boot应用程序,因此现在运行工作流程!

  1. 从操场上,单击左菜单中的Run Workflow
  2. 选择工作流 monthly_subscription_workflow_with_trial ,提供输入参数,然后运行工作流程。
{
 "userId": "",
"userEmail": "",
"billingPeriods": "",
 "billingAmount": ""
 }

如果用户未取消:

,那么成功的执行方式是这样的。

Successful execution for subscription workflow

如果用户取消订阅(通过Webhook收到信号),则执行方式如下:

Successful execution for subscription workflow when user cancels

加起来

我们构建了一个可视化的流,该流量可以有效地管理订阅,甚至包括处理试用期! ð¥

尝试从头开始构建应用程序,reach out to us for any queries

同时,通过Orkes Playground探索其他指挥功能,这是一个免费的专用开发人员沙箱,供您实时尝试导体。

如果您喜欢与指挥构建应用程序,请不要忘记给我们的Netflix Conductor仓库中的明星。