BPMN(Business Process Modeling Notation,業務流程建模符號)是一種用于描述業務流程的標準化建模語言。它通過圖形符號及規則,幫助企業建模、分析和優化各種業務流程。BPMN有兩個主要版本:BPMN 1.0和BPMN 2.0。BPMN 1.0規范由標準組織BPMI(后并入到OMG)于2004年5月發布;BPMN 2.0標準由OMG于2011年推出。
2.0相對于1.0規范了流程引擎的語義和格式,利用標準的圖元描述真實的業務發生過程,保證相同的流程在不同的流程引擎中得到一致的執行結果。
圖片
治理流程1
治理流程2
流程編排
工作流技術選型
圖片
圖片
CREATE TABLE `se_deployment_instance` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'PK' , `gmt_create` datetime(6) NOT NULL COMMENT 'create time' , `gmt_modified` datetime(6) NOT NULL COMMENT 'modification time' , `process_definition_id` varchar(255) NOT NULL COMMENT 'process definition id' , `process_definition_version` varchar(255) DEFAULT NULL COMMENT 'process definition version' , `process_definition_type` varchar(255) DEFAULT NULL COMMENT 'process definition type' , `process_definition_code` varchar(255) DEFAULT NULL COMMENT 'process definition code' , `process_definition_name` varchar(255) DEFAULT NULL COMMENT 'process definition name' , `process_definition_desc` varchar(255) DEFAULT NULL COMMENT 'process definition desc' , `process_definition_content` mediumtext NOT NULL COMMENT 'process definition content' , `deployment_user_id` varchar(128) NOT NULL COMMENT 'deployment user id' , `deployment_status` varchar(64) NOT NULL COMMENT 'deployment status' , `logic_status` varchar(64) NOT NULL COMMENT 'logic status' , PRIMARY KEY (`id`)) COMMENT='流程定義表' ;CREATE TABLE `se_process_instance` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'PK' , `gmt_create` datetime(6) NOT NULL COMMENT 'create time' , `gmt_modified` datetime(6) NOT NULL COMMENT 'modification time' , `process_definition_id_and_version` varchar(128) NOT NULL COMMENT 'process definition id and version' , `process_definition_type` varchar(255) DEFAULT NULL COMMENT 'process definition type' , `status` varchar(64) NOT NULL COMMENT ' 1.running 2.completed 3.aborted', `parent_process_instance_id` bigint(20) unsigned DEFAULT NULL COMMENT 'parent process instance id' , `parent_execution_instance_id` bigint(20) unsigned DEFAULT NULL COMMENT 'parent execution instance id' , `start_user_id` varchar(128) DEFAULT NULL COMMENT 'start user id' , `biz_unique_id` varchar(255) DEFAULT NULL COMMENT 'biz unique id' , `reason` varchar(255) DEFAULT NULL COMMENT 'reason' , `comment` varchar(255) DEFAULT NULL COMMENT 'comment' , `title` varchar(255) DEFAULT NULL COMMENT 'title' , `tag` varchar(255) DEFAULT NULL COMMENT 'tag' , PRIMARY KEY (`id`)) COMMENT='流程實例表' ;CREATE TABLE `se_activity_instance` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'PK' , `gmt_create` datetime(6) NOT NULL COMMENT 'create time' , `gmt_modified` datetime(6) NOT NULL COMMENT 'modification time' , `process_instance_id` bigint(20) unsigned DEFAULT NULL COMMENT 'process instance id' , `process_definition_id_and_version` varchar(255) NOT NULL COMMENT 'process definition id and version' , `process_definition_activity_id` varchar(64) NOT NULL COMMENT 'process definition activity id' , PRIMARY KEY (`id`)) COMMENT='活動節點實例表' ;CREATE TABLE `se_task_instance` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'PK' , `gmt_create` datetime(6) NOT NULL COMMENT 'create time' , `gmt_modified` datetime(6) NOT NULL COMMENT 'modification time' , `process_instance_id` bigint(20) unsigned NOT NULL COMMENT 'process instance id' , `process_definition_id_and_version` varchar(128) DEFAULT NULL COMMENT 'process definition id and version' , `process_definition_type` varchar(255) DEFAULT NULL COMMENT 'process definition type' , `activity_instance_id` bigint(20) unsigned NOT NULL COMMENT 'activity instance id' , `process_definition_activity_id` varchar(255) NOT NULL COMMENT 'process definition activity id' , `execution_instance_id` bigint(20) unsigned NOT NULL COMMENT 'execution instance id' , `claim_user_id` varchar(255) DEFAULT NULL COMMENT 'claim user id' , `title` varchar(255) DEFAULT NULL COMMENT 'title' , `priority` int(11) DEFAULT 500 COMMENT 'priority' , `tag` varchar(255) DEFAULT NULL COMMENT 'tag' , `claim_time` datetime(6) DEFAULT NULL COMMENT 'claim time' , `complete_time` datetime(6) DEFAULT NULL COMMENT 'complete time' , `status` varchar(255) NOT NULL COMMENT 'status' , `comment` varchar(255) DEFAULT NULL COMMENT 'comment' , `extension` varchar(255) DEFAULT NULL COMMENT 'extension' , PRIMARY KEY (`id`)) COMMENT='人工任務節點實例表' ;CREATE TABLE `se_task_assignee_instance` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'PK' , `gmt_create` datetime(6) NOT NULL COMMENT 'create time' , `gmt_modified` datetime(6) NOT NULL COMMENT 'modification time' , `process_instance_id` bigint(20) unsigned NOT NULL COMMENT 'process instance id' , `task_instance_id` bigint(20) unsigned NOT NULL COMMENT 'task instance id' , `assignee_id` varchar(255) NOT NULL COMMENT 'assignee id' , `assignee_type` varchar(128) NOT NULL COMMENT 'assignee type' , PRIMARY KEY (`id`)) COMMENT='人工任務節點代理人實例表' ;CREATE TABLE `se_execution_instance` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'PK' , `gmt_create` datetime(6) NOT NULL COMMENT 'create time' , `gmt_modified` datetime(6) NOT NULL COMMENT 'modification time' , `process_instance_id` bigint(20) unsigned NOT NULL COMMENT 'process instance id' , `process_definition_id_and_version` varchar(255) NOT NULL COMMENT 'process definition id and version' , `process_definition_activity_id` varchar(255) NOT NULL COMMENT 'process definition activity id' , `activity_instance_id` bigint(20) unsigned NOT NULL COMMENT 'activity instance id' , `active` tinyint(4) NOT NULL COMMENT '1:active 0:inactive', PRIMARY KEY (`id`)) COMMENT='執行節點實例表-最細粒度的實例' ;CREATE TABLE `se_variable_instance` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'PK' , `gmt_create` datetime(6) NOT NULL COMMENT 'create time' , `gmt_modified` datetime(6) NOT NULL COMMENT 'modification time' , `process_instance_id` bigint(20) unsigned NOT NULL COMMENT 'process instance id' , `execution_instance_id` bigint(20) unsigned DEFAULT NULL COMMENT 'execution instance id' , `field_key` varchar(128) NOT NULL COMMENT 'field key' , `field_type` varchar(128) NOT NULL COMMENT 'field type' , `field_double_value` decimal(65,30) DEFAULT NULL COMMENT 'field double value' , `field_long_value` bigint(20) DEFAULT NULL COMMENT 'field long value' , `field_string_value` varchar(4000) DEFAULT NULL COMMENT 'field string value' , PRIMARY KEY (`id`)) COMMENT='執行節點變量量表' ;
第一步,要選擇正確的SmartEngine版本,將其添加到pom依賴中。
<dependency>
<groupld>com.alibaba.smart.framework</groupld>
<artifactld>smart-engine-extension-storage-custom</artifactld>
<version>3.0.0</version>
</dependency>
第二步,完成SmartEngine初始化。在初始化時,一般要加載流程定義到應用中。集群情況下,要注意流程定義的一致性(如果純靜態記載則無此類問題)。在初始化時,可以根據需要定義Bean的加載優先級。
import com.alibaba.smart.framework.engine.SmartEngine;import com.alibaba.smart.framework.engine.configuration.InstanceAccessor;import com.alibaba.smart.framework.engine.configuration.ProcessEngineConfiguration;import com.alibaba.smart.framework.engine.configuration.impl.DefaultProcessEngineConfiguration;import com.alibaba.smart.framework.engine.configuration.impl.DefaultSmartEngine;import com.alibaba.smart.framework.engine.exception.EngineException;import com.alibaba.smart.framework.engine.service.command.RepositoryCommandService;import com.alibaba.smart.framework.engine.util.IOUtil;import org.springframework.beans.BeansException;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;import org.springframework.context.ApplicationContext;import org.springframework.context.ApplicationContextAware;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.core.annotation.Order;import org.springframework.core.io.Resource;import org.springframework.core.io.support.PathMatchingResourcePatternResolver;import java.io.InputStream;import static org.springframework.core.Ordered.LOWEST_PRECEDENCE;@Order(LOWEST_PRECEDENCE)@Configuration@ConditionalOnClass(SmartEngine.class)public class SmartEngineAutoConfiguration implements ApplicationContextAware { private ApplicationContext applicationContext; @Bean @ConditionalOnMissingBean public SmartEngine constructSmartEngine() { ProcessEngineConfiguration processEngineConfiguration = new DefaultProcessEngineConfiguration(); // 實現InstanceAccessor接口 processEngineConfiguration.setInstanceAccessor(new CustomInstanceAccessService()); SmartEngine smartEngine = new DefaultSmartEngine(); smartEngine.init(processEngineConfiguration); // 加載流程定義 deployProcessDefinition(smartEngine); return smartEngine; } @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = applicationContext; } private class CustomInstanceAccessService implements InstanceAccessor { @Override public Object access(String name) { return applicationContext.getBean(name); } } private void deployProcessDefinition(SmartEngine smartEngine) { RepositoryCommandService repositoryCommandService = smartEngine .getRepositoryCommandService(); PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); try { Resource[] resources = resolver.getResources("classpath*:/smart-engine/*.xml"); for (Resource resource : resources) { InputStream inputStream = resource.getInputStream(); repositoryCommandService.deploy(inputStream); IOUtil.closeQuietly(inputStream); } } catch (Exception e) { throw new EngineException(e); } }}
附言:排他網關的條件表達式是跟著線條綁定的,要自己確保條件的是和否加在一起的總概率是100%,如果不是100%,小概率執行節點會卡在排他網關走不下去。例如:線條“否”的條件表達式為:條件1為假且條件2為假,線條“是”的條件表達式為條件1為真且條件2為真,則其他條件會卡死在排他網關流程走不下去。
test1.bpmn
<?xml versinotallow="1.0" encoding="UTF-8"?><bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:modeler="http://camunda.org/schema/modeler/1.0" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Web Modeler" exporterVersion="b1a091a" modeler:executionPlatform="Camunda Cloud" modeler:executionPlatformVersion="8.5.0" camunda:diagramRelationId="2a2c997b-ff2f-49b0-9ba8-3c4860d223e7"> <bpmn:process id="Process_1qijgvk" name="test1" isExecutable="true"> <bpmn:startEvent id="StartEvent_1"> <bpmn:outgoing>Flow_0soou9n</bpmn:outgoing> </bpmn:startEvent> <bpmn:sequenceFlow id="Flow_0soou9n" sourceRef="StartEvent_1" targetRef="Activity_02gdgyk" /> <bpmn:endEvent id="Event_1i2y4ym"> <bpmn:incoming>Flow_07mf0sc</bpmn:incoming> <bpmn:incoming>Flow_1nd3369</bpmn:incoming> <bpmn:incoming>Flow_160ji3a</bpmn:incoming> </bpmn:endEvent> <bpmn:exclusiveGateway id="Gateway_1kykneu" name="檢查是否5天內完成治理"> <bpmn:extensionElements /> <bpmn:incoming>Flow_0exjsc9</bpmn:incoming> <bpmn:outgoing>Flow_0hj860q</bpmn:outgoing> <bpmn:outgoing>Flow_1oqjt08</bpmn:outgoing> </bpmn:exclusiveGateway> <bpmn:sequenceFlow id="Flow_0hj860q" name="否" sourceRef="Gateway_1kykneu" targetRef="Activity_1ms8vu6" /> <bpmn:serviceTask id="Activity_02gdgyk" name="站內通知商戶去治理"> <bpmn:extensionElements /> <bpmn:incoming>Flow_0soou9n</bpmn:incoming> <bpmn:outgoing>Flow_0exjsc9</bpmn:outgoing> </bpmn:serviceTask> <bpmn:sequenceFlow id="Flow_0exjsc9" sourceRef="Activity_02gdgyk" targetRef="Gateway_1kykneu" /> <bpmn:serviceTask id="Activity_1ms8vu6" name="發送sms通知商戶"> <bpmn:incoming>Flow_0hj860q</bpmn:incoming> <bpmn:outgoing>Flow_0bemgki</bpmn:outgoing> </bpmn:serviceTask> <bpmn:sequenceFlow id="Flow_0bemgki" sourceRef="Activity_1ms8vu6" targetRef="Gateway_1dyp6hh" /> <bpmn:sequenceFlow id="Flow_1oqjt08" name="是" sourceRef="Gateway_1kykneu" targetRef="Activity_1c9i1el" /> <bpmn:exclusiveGateway id="Gateway_1dyp6hh" name="是否10天內完成治理"> <bpmn:incoming>Flow_0bemgki</bpmn:incoming> <bpmn:outgoing>Flow_07xq405</bpmn:outgoing> <bpmn:outgoing>Flow_1w4qeti</bpmn:outgoing> </bpmn:exclusiveGateway> <bpmn:sequenceFlow id="Flow_07xq405" name="是" sourceRef="Gateway_1dyp6hh" targetRef="Activity_0m5dsna" /> <bpmn:serviceTask id="Activity_1c9i1el" name="發放獎勵給到商戶"> <bpmn:incoming>Flow_1oqjt08</bpmn:incoming> <bpmn:outgoing>Flow_1t7ectj</bpmn:outgoing> </bpmn:serviceTask> <bpmn:sequenceFlow id="Flow_1t7ectj" sourceRef="Activity_1c9i1el" targetRef="Activity_1p6mkdy" /> <bpmn:task id="Activity_0m5dsna" name="任務完成"> <bpmn:incoming>Flow_07xq405</bpmn:incoming> <bpmn:outgoing>Flow_07mf0sc</bpmn:outgoing> </bpmn:task> <bpmn:sequenceFlow id="Flow_07mf0sc" sourceRef="Activity_0m5dsna" targetRef="Event_1i2y4ym" /> <bpmn:sequenceFlow id="Flow_1w4qeti" name="否" sourceRef="Gateway_1dyp6hh" targetRef="Activity_1gud1rw" /> <bpmn:task id="Activity_1p6mkdy" name="任務完成"> <bpmn:incoming>Flow_1t7ectj</bpmn:incoming> <bpmn:outgoing>Flow_1nd3369</bpmn:outgoing> </bpmn:task> <bpmn:sequenceFlow id="Flow_1nd3369" sourceRef="Activity_1p6mkdy" targetRef="Event_1i2y4ym" /> <bpmn:serviceTask id="Activity_1gud1rw" name="通知運營下線商戶店鋪"> <bpmn:incoming>Flow_1w4qeti</bpmn:incoming> <bpmn:outgoing>Flow_0vr5zs3</bpmn:outgoing> </bpmn:serviceTask> <bpmn:sequenceFlow id="Flow_0vr5zs3" sourceRef="Activity_1gud1rw" targetRef="Activity_1pfbnmo" /> <bpmn:task id="Activity_1pfbnmo" name="任務結束"> <bpmn:incoming>Flow_0vr5zs3</bpmn:incoming> <bpmn:outgoing>Flow_160ji3a</bpmn:outgoing> </bpmn:task> <bpmn:sequenceFlow id="Flow_160ji3a" sourceRef="Activity_1pfbnmo" targetRef="Event_1i2y4ym" /> </bpmn:process> <bpmndi:BPMNDiagram id="BPMNDiagram_1"> <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Process_1qijgvk"> <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1"> <dc:Bounds x="152" y="232" width="36" height="36" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id="Gateway_1kykneu_di" bpmnElement="Gateway_1kykneu" isMarkerVisible="true"> <dc:Bounds x="465" y="225" width="50" height="50" /> <bpmndi:BPMNLabel> <dc:Bounds x="448" y="188" width="84" height="27" /> </bpmndi:BPMNLabel> </bpmndi:BPMNShape> <bpmndi:BPMNShape id="Activity_02gdgyk_di" bpmnElement="Activity_02gdgyk"> <dc:Bounds x="270" y="210" width="100" height="80" /> <bpmndi:BPMNLabel /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id="Activity_1ms8vu6_di" bpmnElement="Activity_1ms8vu6"> <dc:Bounds x="630" y="210" width="100" height="80" /> <bpmndi:BPMNLabel /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id="Event_1i2y4ym_di" bpmnElement="Event_1i2y4ym"> <dc:Bounds x="1182" y="232" width="36" height="36" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id="Gateway_1dyp6hh_di" bpmnElement="Gateway_1dyp6hh" isMarkerVisible="true"> <dc:Bounds x="825" y="225" width="50" height="50" /> <bpmndi:BPMNLabel> <dc:Bounds x="810" y="285" width="79" height="27" /> </bpmndi:BPMNLabel> </bpmndi:BPMNShape> <bpmndi:BPMNShape id="Activity_1c9i1el_di" bpmnElement="Activity_1c9i1el"> <dc:Bounds x="630" y="320" width="100" height="80" /> <bpmndi:BPMNLabel /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id="Activity_0m5dsna_di" bpmnElement="Activity_0m5dsna"> <dc:Bounds x="950" y="210" width="100" height="80" /> <bpmndi:BPMNLabel /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id="BPMNShape_0ab1d2g" bpmnElement="Activity_1p6mkdy"> <dc:Bounds x="840" y="320" width="100" height="80" /> <bpmndi:BPMNLabel /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id="Activity_1gud1rw_di" bpmnElement="Activity_1gud1rw"> <dc:Bounds x="800" y="80" width="100" height="80" /> <bpmndi:BPMNLabel /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id="BPMNShape_02s3tua" bpmnElement="Activity_1pfbnmo"> <dc:Bounds x="950" y="80" width="100" height="80" /> <bpmndi:BPMNLabel /> </bpmndi:BPMNShape> <bpmndi:BPMNEdge id="Flow_0soou9n_di" bpmnElement="Flow_0soou9n"> <di:waypoint x="188" y="250" /> <di:waypoint x="270" y="250" /> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="Flow_0exjsc9_di" bpmnElement="Flow_0exjsc9"> <di:waypoint x="370" y="250" /> <di:waypoint x="465" y="250" /> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="Flow_0hj860q_di" bpmnElement="Flow_0hj860q"> <di:waypoint x="515" y="250" /> <di:waypoint x="630" y="250" /> <bpmndi:BPMNLabel> <dc:Bounds x="567" y="232" width="11" height="14" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="Flow_1oqjt08_di" bpmnElement="Flow_1oqjt08"> <di:waypoint x="490" y="275" /> <di:waypoint x="490" y="360" /> <di:waypoint x="630" y="360" /> <bpmndi:BPMNLabel> <dc:Bounds x="544" y="373" width="11" height="14" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="Flow_0bemgki_di" bpmnElement="Flow_0bemgki"> <di:waypoint x="730" y="250" /> <di:waypoint x="825" y="250" /> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="Flow_1t7ectj_di" bpmnElement="Flow_1t7ectj"> <di:waypoint x="730" y="360" /> <di:waypoint x="840" y="360" /> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="Flow_07mf0sc_di" bpmnElement="Flow_07mf0sc"> <di:waypoint x="1050" y="250" /> <di:waypoint x="1182" y="250" /> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="Flow_07xq405_di" bpmnElement="Flow_07xq405"> <di:waypoint x="875" y="250" /> <di:waypoint x="950" y="250" /> <bpmndi:BPMNLabel> <dc:Bounds x="899" y="232" width="11" height="14" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="Flow_1w4qeti_di" bpmnElement="Flow_1w4qeti"> <di:waypoint x="850" y="225" /> <di:waypoint x="850" y="160" /> <bpmndi:BPMNLabel> <dc:Bounds x="853" y="186" width="11" height="14" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="Flow_1nd3369_di" bpmnElement="Flow_1nd3369"> <di:waypoint x="940" y="360" /> <di:waypoint x="1120" y="360" /> <di:waypoint x="1120" y="250" /> <di:waypoint x="1182" y="250" /> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="Flow_0vr5zs3_di" bpmnElement="Flow_0vr5zs3"> <di:waypoint x="900" y="120" /> <di:waypoint x="950" y="120" /> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="Flow_160ji3a_di" bpmnElement="Flow_160ji3a"> <di:waypoint x="1050" y="120" /> <di:waypoint x="1120" y="120" /> <di:waypoint x="1120" y="250" /> <di:waypoint x="1182" y="250" /> </bpmndi:BPMNEdge> </bpmndi:BPMNPlane> </bpmndi:BPMNDiagram></bpmn:definitions>
SmartEngine引擎源碼地址:https://github.com/alibaba/SmartEngine/tree/master
SmartEngine UserGuide: https://github.com/alibaba/SmartEngine/wiki/SmartEngine-UserGuide--Chinese-Version-%28%E4%B8%AD%E6%96%87%E7%89%88%29
Camunda開源流程設計器(支持在線和本地node.js部署兩種方式):https://camunda.com/download/modeler/
Camunda設計器學習文檔:https://docs.camunda.io/docs/components/modeler/bpmn/bpmn-primer/
如果業務流程的復雜度一般,且經常會調整,并發量并不高的情況下,建議使用;如果業務復雜度過高,或并發量TPS超過單臺100/s,不建議使用。
本文鏈接:http://www.tebozhan.com/showinfo-26-101710-0.html探索BPMN—工作流技術的理論與實踐
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com