gpt4 book ai didi

java - 将 activiti 消息和信号绑定(bind)到 JMS 消息

转载 作者:行者123 更新时间:2023-11-30 09:28:39 25 4
gpt4 key购买 nike

我有两个关于 Activiti BPMN 的问题:

1) 如何以编程方式解析消息定义

2) 如何以编程方式捕获 intermediateThrowEvent 事件。

我正在开发一个将使用嵌入式 Activiti BPMN 引擎(当前版本为 5.11)的项目。该应用程序目前由发送和接收 JMS 消息驱动,我认为将它们公开为 Activiti 消息和信号是很自然的选择。该应用程序必须启用许多独立的 JVM,每个 JVM 都运行一个具有各种进程的 BPMN 引擎,以便在彼此之间发送和接收消息。

我对如何实现每个场景有一些想法,但我不确定如何解析来 self 的 BPMN 流程的消息以实现选项 2a,我不确定如何捕获 intermediateThrowEvent 以实现选项 1b :

a) 接收消息:

选项 1a - 订阅所有 JMS 消息到达的单个主题,并将 Activiti 消息或 Activiti 信号名称作为有效负载放入 JMS 消息中。当 JMS 消息到达时,我可以分别查询引擎以查看当前哪些执行正在订阅消息,以及需要启动哪些进程:

List<ProcessDefinition> pds= repositoryService.createProcessDefinitionQuery()
.messageEventSubscription("messageNameInsideJMSPayload")
.list();

for (ProcessDefinition pd: pds)
{
RunBPMProcess.runtimeService.startProcessInstanceByMessage(messageName,
di.getId().toString(), processVariables);
}

选项 2a - 订阅直接映射到 Activiti 消息名称或 Activity 信号名称的动态主题。这里棘手的部分是如何解析来自 BPMN 流程的消息或信号名称。我已设法使用自定义 BpmnParseListener 解析消息引用,但我只能从实现中获取消息引用,而不是消息名称。

pec = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
if (pec instanceof ProcessEngineConfigurationImpl)
{

List<BpmnParseListener> preParseListeners = new ArrayList <>();

preParseListeners.add(new BPMNMessageAndSignalParser(pontus));


((ProcessEngineConfigurationImpl) pec).setCustomPreBPMNParseListeners(preParseListeners );


}

b) 发送消息:

选项 1b) 我想理想地捕获 intermediateThrowEvent,这样我就可以将信号作为 JMS 消息发送,但我不确定该怎么做。

我是 Activiti 的新手,如果我遗漏了任何明显的内容,我深表歉意;另外,这里有一个示例工作流,只是为了帮助将问题放在上下文中:

<?xml version="1.0" encoding="UTF-8" ?>
<definitions id="definitions"
targetNamespace="http://activiti.org/bpmn20"
xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:activiti="http://activiti.org/bpmn">
<message id="pontusMessage" name="pontusMessage"/>
<signal id = "pontusSignal" name="pontusSignal"/>
<process id="test" name="PontusNetworks Test" isExecutable="true">

<startEvent id="start"/>

<sequenceFlow id="flow1" sourceRef="start" targetRef="messageReceiver" />

<intermediateCatchEvent id="messageReceiver">
<messageEventDefinition messageRef="pontusMessage" />
</intermediateCatchEvent>

<sequenceFlow id="flow2" sourceRef="messageReceiver" targetRef="signalSender">
</sequenceFlow>


<intermediateThrowEvent id="signalSender">
<signalEventDefinition signalRef="pontusSignal" />
</intermediateThrowEvent>
<sequenceFlow id="flow3" sourceRef="messageReceiver" targetRef="theEnd2"/>

<endEvent id="theEnd2" />

</process>

</definitions>

提前感谢您的任何想法。

最佳答案

How do I parse message definitions programmatically

我不确定这是什么意思,但显然 Activiti 在解析 BPMN 流程定义 XML 时确实有一个通知机制。它允许插入一个监听器,该监听器将在多个事件中得到通知。

wrote关于这个的有趣帖子。当然,通知中心是我们真正希望在未来版本中看到的。

关于java - 将 activiti 消息和信号绑定(bind)到 JMS 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13922887/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com