Kogito中间捕获事件关联求助:跨流程事件匹配失败
问题现象
当cra_edit流程尝试消费raccolta_dati流程抛出的raccolta_dati事件时,日志报错:
No matches found for trigger raccolta_dati in process cra_edit. Skipping consumed message CloudEventWrapDataEvent [cloudEvent=CloudEvent{id='c91d80dc-aaa9-43b4-83ae-dc6ce55f5424', source=/process/raccolta_dati, type='raccolta_dati', time=2024-01-30T17:56:57.096033500+01:00, data=JsonCloudEventData{node="string"}, extensions={kogitoproctype=BPMN, kogitoprocinstanceid=d48b1e4e-bc15-4ee7-8456-7b5a3adcc577, kogitoprocist=Active, kogitoprocversion=1.0, kogitoprocid=raccolta_dati}}]
当前Kafka统一主题配置:
mp.messaging.incoming.kogito_incoming_stream.connector=${KOGITO.KAFKA.CONNECTOR} mp.messaging.incoming.kogito_incoming_stream.topic=${KAFKA.KOGITO.INCOMING-STREAM.TOPIC} mp.messaging.incoming.kogito_incoming_stream.value.deserializer=org.apache.kafka.common.serialization.StringDeserializer mp.messaging.incoming.kogito_incoming_stream.auto.offset.reset=earliest mp.messaging.incoming.kogito_incoming_stream.group.id=node-events-consumer mp.messaging.outgoing.kogito_outgoing_stream.connector=${KOGITO.KAFKA.CONNECTOR} mp.messaging.outgoing.kogito_outgoing_stream.topic=${KAFKA.KOGITO.OUTGOING-STREAM.TOPIC} mp.messaging.outgoing.kogito_outgoing_stream.value.serializer=org.apache.kafka.common.serialization.StringSerializer
核心原因
Kogito需要明确的事件触发映射规则,来关联抛出的事件与目标流程的触发器,否则无法识别事件对应的流程触发点。
解决方案
在application.properties(或application.yaml)中添加事件关联配置,具体如下:
1. 基础事件映射配置
添加以下配置项,将raccolta_dati事件映射到cra_edit流程的对应触发器:
# 映射raccolta_dati事件到cra_edit流程的同名触发器 kogito.events.trigger.raccolta_dati.process=cra_edit kogito.events.trigger.raccolta_dati.trigger=raccolta_dati
kogito.events.trigger.[事件类型].process:指定接收事件的目标流程IDkogito.events.trigger.[事件类型].trigger:指定流程中定义的触发器名称(需与BPMN文件中接收事件的名称完全一致)
2. 验证BPMN流程定义
确认cra_edit流程的BPMN文件中,接收事件的触发器名称、事件类型与配置值、抛出事件的type字段完全匹配,大小写、拼写均不能出错。
3. 多事件场景扩展(可选)
若有多个事件需要映射,按相同格式追加配置即可:
# 示例:映射其他事件到对应流程 kogito.events.trigger.[其他事件类型].process=[目标流程ID] kogito.events.trigger.[其他事件类型].trigger=[流程触发器名称]
4. 检查CloudEvent格式
确保抛出的CloudEvent的type字段值与配置中的事件类型(raccolta_dati)完全一致,Kogito依赖该字段匹配触发器。
内容的提问来源于stack exchange,提问作者Giuseppe

