当前位置: 首页 > 知识库问答 >
问题:

从jms消息侦听器重新启动可流动流程

卓正业
2023-03-14

我有一个可流动的工作流,我需要在某个阶段暂停,然后根据JMS消息从JMS监听器重新启动相同的工作流。

@Slf4j
@Component
public class ValidationDelegate extends AbstractBaseUtil {

    protected Expression restEndPoint;

    @Autowired
    private ProcessInstancePkgIdMapRepository repo;

    @Override
    public void executeInternal(DelegateExecution delegateExecution) {

        RuntimeService runtimeService = CommandContextUtil.getProcessEngineConfiguration().getRuntimeService();
        runtimeService.suspendProcessInstanceById(delegateExecution.getProcessInstanceId());

        ProcessInstancePkgMap pkgMap= new ProcessInstancePkgMap ();
        pkgMap.setPkgId(1235L);
        pkgMap.setProcessInstanceId(delegateExecution.getProcessInstanceId());

        ProcessInstancePkgMap map = repo.save(pkgMap);

        log.info("saved map {}", map);
    }
}
@Component
public class JMSListener {

    @Autowired
    private RuntimeService runtimeService;

    @Autowired
    private ProcessInstancePkgIdMapRepository repo;

    @JmsListener(destination = "test.topic", containerFactory = "jmsListenerContainerFactory")
    public void receiveMessage(TextMessage message) throws Exception {

        ObjectMapper objectMapper = new ObjectMapper();
        ValidationMessage validationMessage = objectMapper.readValue(message.getText(), ValidationMessage.class);

        ProcessInstancePkgIdMap idMap =
                repo.findByPkgId(validationMessage.getPkgId());

        runtimeService.activateProcessInstanceById(idMap.getProcessInstanceId());

    }
} 

共有1个答案

江睿
2023-03-14

不能从流程实例中的服务任务挂起该流程实例。

您要寻找的是这里详细解释的可触发服务任务。简而言之,可触发服务任务是一种触发某些外部工作的模式,这将导致服务任务处于等待状态,然后在接收到JMS主题时可以触发流程实例。然后,委托需要实现TriggerableActivityBehavior

 类似资料:
  • 我正在使用Spring靴和活动MQ设置一个持久的JMS主题使用者。我能够使用Spring靴@JmsListener注释来使一切正常工作(作为耐用消费者成功运行)。但是,因为我想动态创建侦听器,所以我尝试使用 JmsListener 配置接口来创建它们。 使用主题“消费者”下面的代码可以成功地创建和使用消息。但是,问题是它创造的消费者并不持久。我在工厂中将clientId、setSubscripti

  • 我有一个Spring应用程序在独立的JBoss EAP 6.2中运行(带有嵌入式HornetQ提供程序)。 消息被成功地放在队列中(我可以在jboss eap-6.2\独立\data\MessagingJournal\hornetq-data-1.hq中看到它们,因为队列是持久的),但不会被侦听器拾取(侦听器中的断点不会被命中)。我怀疑配置中缺少或错误的东西,但看不出是什么。JBoss启动时没有任

  • 我正在尝试实现一个OpenDaylight捆绑包,它在流发生变化时接收通知。因此,我实现了DataTreeChangeListener 我错过了什么?完整的代码可在Github上获得 提前感谢!最大值

  • 我正在使用activiti 6为我们的一个项目设计业务流程。这个过程非常简单,它由“用户任务”或“服务任务”的数量以及基于角色的分配组成。然而,我们的客户希望管理员用户能够在任何时间点重新运行之前的任何“用户任务”或“服务任务”。 例如,以下是我的流程: 开始- 客户端希望在流程执行期间的任何时间点,管理员用户都应该能够将工作流执行从:例如状态“User-Task8”更改为Service-Task

  • 问题内容: 我们有一个Java侦听器,它从JBossMQ的队列中读取文本消息。如果必须重新启动JBoss,则侦听器将不会重新连接并重新开始阅读消息。我们只是每2分钟在侦听器的日志文件中收到一条消息,指出该消息无法连接。我们在代码或JBossMQ中没有设置什么吗?我是JMS的新手,因此将非常感谢您的帮助。谢谢。 问题答案: 您应该在客户端代码中实现javax.jms.ExceptionListene

  • 我正在试验Spring Webflux和Spring集成,以从JMS队列创建反应流(Flux)。 我试图从JMS队列(使用Spring集成的IBM MQ)创建一个反应流(Spring Webflux),以便客户端异步获取JMS消息。我相信我已经把一切都正确地连接起来了,因为这些信息正被被动的听众所消耗。然而,我的反应流量流无法显示这些消息。任何帮助都将不胜感激。 这是我用来使我的JMS侦听器响应的