20、camunda Connector连接器 发送POST接口

连接器使用

连接器可向其他服务发送Http Rest或SOAP请求,调用其他服务。
地址可使用${} 读取流程变量;
调用Http接口返回值可通过 camunda spin 解析JSON或XML数据。

项目添加依赖

<!--添加连接器插件后,连接器 就可以使用了-->
        <dependency>
            <groupId>org.camunda.bpm</groupId>
            <artifactId>camunda-engine-plugin-connect</artifactId>
            <version>7.15.0</version>
        </dependency>

        <!--Spin和Json  Rest Http中解析; parse http response variable with camunda-spin-->
        <dependency>
            <groupId>org.camunda.bpm</groupId>
            <artifactId>camunda-engine-plugin-spin</artifactId>
            <version>7.15.0</version>
        </dependency>
        <dependency>
            <groupId>org.camunda.spin</groupId>
            <artifactId>camunda-spin-dataformat-json-jackson</artifactId>
            <version>1.10.1</version>
        </dependency>
        <dependency>
            <groupId>org.camunda.spin</groupId>
            <artifactId>camunda-spin-core</artifactId>
            <version>1.10.1</version>
        </dependency>
        <dependency>
            <groupId>org.camunda.spin</groupId>
            <artifactId>camunda-spin-dataformat-all</artifactId>
            <version>1.10.1</version>
        </dependency>

连接器的使用案例

流程图 conn/conn3.bpmn

<bpmn:process id="Process_Conn3" name="连接器综合使用" isExecutable="true">
    <bpmn:startEvent id="StartEvent_1">
      <bpmn:outgoing>Flow_00brudk</bpmn:outgoing>
    </bpmn:startEvent>
    <bpmn:sequenceFlow id="Flow_00brudk" sourceRef="StartEvent_1" targetRef="Activity_0ctwdoc" />
    <bpmn:serviceTask id="Activity_0ctwdoc" name="Http连接器">
      <bpmn:extensionElements>
        <camunda:connector>
          <camunda:inputOutput>
            <camunda:inputParameter name="url">${myHost}conn/three?id=${id}</camunda:inputParameter>
            <camunda:inputParameter name="method">POST</camunda:inputParameter>
            <camunda:inputParameter name="headers">
              <camunda:map>
                <camunda:entry key="Content-Type">text/plain</camunda:entry>
                <camunda:entry key="Accept">application/json</camunda:entry>
              </camunda:map>
            </camunda:inputParameter>
            <camunda:outputParameter name="response">${response}</camunda:outputParameter>
            <camunda:outputParameter name="gtTen">
              <camunda:script scriptFormat="Javascript" resource="conn/ParseConn3.js" />
            </camunda:outputParameter>
          </camunda:inputOutput>
          <camunda:connectorId>http-connector</camunda:connectorId>
        </camunda:connector>
      </bpmn:extensionElements>
      <bpmn:incoming>Flow_00brudk</bpmn:incoming>
      <bpmn:outgoing>Flow_125sykj</bpmn:outgoing>
    </bpmn:serviceTask>
    <bpmn:exclusiveGateway id="Gateway_1do8rdj">
      <bpmn:incoming>Flow_125sykj</bpmn:incoming>
      <bpmn:outgoing>Flow_1iixae2</bpmn:outgoing>
      <bpmn:outgoing>Flow_0z8s3nm</bpmn:outgoing>
    </bpmn:exclusiveGateway>
    <bpmn:sequenceFlow id="Flow_125sykj" sourceRef="Activity_0ctwdoc" targetRef="Gateway_1do8rdj" />
    <bpmn:sequenceFlow id="Flow_1iixae2" name="大于10" sourceRef="Gateway_1do8rdj" targetRef="Activity_1mqxjiv">
      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${gtTen}</bpmn:conditionExpression>
    </bpmn:sequenceFlow>
    <bpmn:sequenceFlow id="Flow_0z8s3nm" name="小于10" sourceRef="Gateway_1do8rdj" targetRef="Activity_1350wct">
      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">${!gtTen}</bpmn:conditionExpression>
    </bpmn:sequenceFlow>
    <bpmn:userTask id="Activity_1350wct" name="小于等于10审核" camunda:assignee="30125">
      <bpmn:incoming>Flow_0z8s3nm</bpmn:incoming>
      <bpmn:outgoing>Flow_0evvkht</bpmn:outgoing>
    </bpmn:userTask>
    <bpmn:userTask id="Activity_1mqxjiv" name="大于10审核" camunda:assignee="30125">
      <bpmn:incoming>Flow_1iixae2</bpmn:incoming>
      <bpmn:outgoing>Flow_1np2tdl</bpmn:outgoing>
    </bpmn:userTask>
    <bpmn:endEvent id="Event_1erz8ga">
      <bpmn:incoming>Flow_1np2tdl</bpmn:incoming>
      <bpmn:incoming>Flow_0evvkht</bpmn:incoming>
    </bpmn:endEvent>
    <bpmn:sequenceFlow id="Flow_1np2tdl" sourceRef="Activity_1mqxjiv" targetRef="Event_1erz8ga" />
    <bpmn:sequenceFlow id="Flow_0evvkht" sourceRef="Activity_1350wct" targetRef="Event_1erz8ga" />
  </bpmn:process>

在这里插入图片描述在这里插入图片描述在这里插入图片描述

解析接口返回值 conn/ParseConn3.js

//解析Http返回结果JSON,获取返回的学生年龄到变量
var response = connector.getVariable("response");

// parse response variable with camunda-spin
var student = S(response);
var ageProp = student.prop("age")

//脚本最后1行会作为返回值用于流程变量
ageProp.value()>10

流程部署、启动流程

@Test
    public void deploy(){
        Deployment deploy = repositoryService.createDeployment()
                .name("综合连接器测试")
                .source("综合连接器测试")
                .addClasspathResource("conn/conn3.bpmn")
                .addClasspathResource("conn/ParseConn3.js")
                .deploy();
        log.info("流程部署完成:{}",deploy.getId());
        start();
    }

    @Test
    public void start(){
        String processKey="Process_Conn3";
        Map<String,Object> variables=new HashMap<>();
        variables.put("myHost","http://localhost:8010/");
        variables.put("id","12");
        //流程启动时,向连接器传递变量
        ProcessInstance processInstance = runtimeService.startProcessInstanceByKey(processKey,variables);
        log.info("流程开启:{}",processInstance.getId());
    }

Rest接口案例

@RestController
@RequestMapping("/conn")
@Slf4j
public class ConnectionController {
    //连接器综合使用
    @PostMapping("/three")
    public Student connTest3(String id){
        log.info("{连接器综合使用 ID :{}}",id);

        Student stu=new Student();
        stu.setAge(RandomUtil.randomInt(5,15));
        stu.setId(id);
        stu.setName("jake"+id);

        return stu;
    }
}
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值