Http任务允许您发出HTTP请求,增强Flowable的集成功能。请注意,Http任务不是 BPMN 2.0规范的正式任务(因此没有专门的图标)。因此,在Flowable中,Http任务是作为一个专门的服务任务来实现的。
1、Http客户端配置
Flowable引擎通过可配置的Http客户端发出Http请求。以下属性可以在flowable.cfg.xml配置文件中设置:
<bean id="processEngineConfiguration"
class="org.flowable.engine.impl.cfg.StandaloneProcessEngineConfiguration">
<!-- http client configurations -->
<property name="httpClientConfig" ref="httpClientConfig"/>
</bean>
<bean id="httpClientConfig" class="org.flowable.engine.cfg.HttpClientConfig">
<property name="connectTimeout" value="5000"/>
<property name="socketTimeout" value="5000"/>
<property name="connectionRequestTimeout" value="5000"/>
<property name="requestRetryLimit" value="5"/>
</bean>
属性 | 需要 | 描述 |
---|---|---|
connectTimeout | 没有 | 连接超时(以毫秒为单位)。默认设置为5000。 |
socketTimeout | 没有 | 套接字超时(以毫秒为单位)。默认设置为5000。 |
connectionRequestTimeout | 没有 | 连接请求超时(以毫秒为单位)。默认设置为5000。 |
requestRetryLimit | 没有 | 请求重试限制(0表示不重试)。默认设置为3。 |
disableCertVerify | 没有 | 标记以禁用SSL证书验证。默认情况下设置为false。 |
2、定义Http任务
Http任务是作为一个专门的服务任务来实现的,通过设置服务任务的类型’http’来定义。
<serviceTask id="httpGet" flowable:type="http">
也可以通过提供自定义实现来覆盖默认的Http Task行为。自定义实现应该扩展org.flowable.http.HttpActivityBehavior并覆盖perform()方法。应该在任务定义中设置字段httpActivityBehaviorClass。这个字段的默认值是org.flowable.http.impl.HttpActivityBehaviorImpl。目前HttpActivityBehaviorImpl基于Apache Http Client。由于Apache Http客户端可以通过多种方式进行定制,因此所有可能的选项都不在HttpClient配置中使用。要创建自定义客户端。
<serviceTask id =“httpGet”flowable:type =“http”>
<extensionElements>
<flowable:field name =“httpActivityBehaviorClass”>
<流动性:字符串>
<![CDATA [org.example.flowable.HttpActivityBehaviorCustomImpl]]>
</可流动:字符串>
</可流动:字段>
</ extensionElements>
</ sericeTask>
3、Http任务配置
Http任务是通过字段注入来配置的。这些属性的所有值都可以包含EL表达式,这些表达式在流程执行期间在运行时被解析。以下属性可以设置:
属性 | 需要 | 描述 |
---|---|---|
requestMethod | 是 | 请求方法(GET,POST,PUT,DELETE)。 |
requestUrl | 是 | 请求URL(例子 - http://flowable.org)。 |
requestHeaders | 没有 | 行分隔Http请求标头。示例 -Content-Type:application / json 授权:基本aGFRlc3Q = |
requestBody | 没有 | 请求正文示例 - $ {sampleBody} |
请求超时 | 没有 | 请求超时(以毫秒为单位)(示例 - 5000)。默认值是0,表示没有超时。 |
disallowRedirects | 没有 | 标记为禁止Http重定向。默认是false。(例如 - 真)。 |
failStatusCodes | 没有 | 以逗号分隔Http响应状态码列表,以使请求失败,并将错误引发为FlowableException。示例:400,404,500,503示例:400,5XX |
handleStatusCodes | 没有 | 逗号分隔的任务将抛出BpmnError的状态码列表。BpmnError的错误代码是HTTP。例如,404状态代码设置为错误代码HTTP404。只有在disallowRedirects字段也被设置的情况下才会抛出3XX状态码。handleStatusCodes中的状态代码在failStatusCodes中设置时,将覆盖failStatusCodes中的状态代码。例如:400,404,500,503例如:3XX,4XX,5XX |
ignoreException | 没有 | 用于忽略异常的标志,捕获并将异常消息保存为 .errorMessage。 |
saveRequestVariables | 没有 | 标记保存请求变量。默认情况下,只有响应相关的变量被保存在执行中。 |
saveResponseParameters | 没有 | 标记保存所有响应变量,包括HTTP状态,标题等。默认情况下,只有响应主体被保存在执行中。 |
resultVariablePrefix | 没有 | 执行变量名称的前缀。如果未设置前缀,变量将以名称保存为。fieldName。例如,对于id 为task7的任务,requestUrl被保存为task7.requestUrl。 |
httpActivityBehaviorClass | 没有 | org.flowable.http.HttpActivityBehavior的自定义扩展的完整类名。 |
除了提供的字段之外,还将根据saveResponseParameters标志将以下内容设置为成功执行时的变量。
变量 | 可选的 | 描述 |
---|---|---|
responseProtocol | 是 | Http版本 |
responseReason | 是 | Http响应原因短语。 |
responseStatusCode | 是 | HTTP响应状态码(例子 - 200)。 |
responseHeaders响应 | 是 | 行分隔Http响应头。示例 -Content-Type:pplication / jsonContent-Length:777 |
responseBody | 是 | 响应正文作为字符串,如果有的话。 |
错误信息 | 是 | 忽略错误消息,如果有的话。 |
4、结果变量
记住所有上面的执行变量名都以resultVariablePrefix的计算值作为前缀。例如响应状态码可以在另一个活动中被访问,如task7.responseStatusCode。这里task7是服务任务的id。要覆盖此行为,请根据需要设置resultVariablePrefix。
5、用法示例
以下XML片段显示了使用Http任务的示例。
<serviceTask id="httpGet" flowable:type="http">
<extensionElements>
<flowable:field name="requestMethod" stringValue="GET" />
<flowable:field name="requestUrl" stringValue="http://flowable.org" />
<flowable:field name="requestHeaders">
<flowable:expression>
<![CDATA[
Accept: text/html
Cache-Control: no-cache
]]>
</flowable:expression>
</flowable:field>
<flowable:field name="requestTimeout">
<flowable:expression>
<![CDATA[
${requestTimeout}
]]>
</flowable:expression>
</flowable:field>
<flowable:field name="resultVariablePrefix">
<flowable:string>task7</flowable:string>
</flowable:field>
</extensionElements>
</serviceTask>
6、错误处理
默认情况下,Http Task在Connection,IO或任何未处理的异常发生时抛出FlowableException。但默认情况下,它不处理任何重定向/客户端/服务器错误http状态码。我们可以通过设置failStatusCodes和/或handleStatusCodes字段来配置任务来处理异常和http状态。由handleStatusCodes引发的BpmnError应该像正常的BPMN异常一样处理,具有相应的边界错误处理程序。下面是一些异常处理和http任务重试的例子。
在400和5XX异步http任务上失败,并使用failedJobRetryTimeCycle重试
<serviceTask id="failGet" name="Fail test" flowable:async="true" flowable:type="http">
<extensionElements>
<flowable:field name="requestMethod">
<flowable:string><![CDATA[GET]]></flowable:string>
</flowable:field>
<flowable:field name="requestUrl">
<flowable:string><![CDATA[http://localhost:9798/api/fail]]></flowable:string>
</flowable:field>
<flowable:field name="failStatusCodes">
<flowable:string><![CDATA[400, 5XX]]></flowable:string>
</flowable:field>
<flowable:failedJobRetryTimeCycle>R3/PT5S</flowable:failedJobRetryTimeCycle>
</extensionElements>
</serviceTask>
处理400作为BmpnError
<serviceTask id="handleGet" name="HTTP Task" flowable:type="http">
<extensionElements>
<flowable:field name="requestMethod">
<flowable:string><![CDATA[GET]]></flowable:string>
</flowable:field>
<flowable:field name="requestUrl">
<flowable:string><![CDATA[http://localhost:9798/api/fail]]></flowable:string>
</flowable:field>
<flowable:field name="handleStatusCodes">
<flowable:string><![CDATA[4XX]]></flowable:string>
</flowable:field>
</extensionElements>
</serviceTask>
<boundaryEvent id="catch400" attachedToRef="handleGet">
<errorEventDefinition errorRef="HTTP400"></errorEventDefinition>
</boundaryEvent>
忽略例外。
<serviceTask id="ignoreTask" name="Fail test" flowable:type="http">
<extensionElements>
<flowable:field name="requestMethod">
<flowable:string><![CDATA[GET]]></flowable:string>
</flowable:field>
<flowable:field name="requestUrl">
<flowable:string><![CDATA[http://nohost:9798/api]]></flowable:string>
</flowable:field>
<flowable:field name="ignoreException">
<flowable:string><![CDATA[true]]></flowable:string>
</flowable:field>
</extensionElements>
</serviceTask>
上面文章来自盘古BPM研究院:http://vue.pangubpm.com/
文章翻译提交:https://github.com/qiudaoke/flowable-userguide
了解更多文章可以关注微信公众号: