【问题标题】:Resume Activiti task from Camel ActiveMQ route从 Camel ActiveMQ 路由恢复 Activiti 任务
【发布时间】:2017-10-04 18:58:15
【问题描述】:

我正在尝试从 Activiti Camel 任务向 ActiveMQ 队列发送消息,该队列应在 Camel 接收到该消息时恢复活动。据我了解,当从队列接收到消息时,缺少能够使其被 Camel 识别以便路由到正确的活动任务的属性。

因此引发Business key is Null 异常并且路由失败。

from("activiti:SampleProcess:myCamelTask")
 .to("activemq:queue:myQueue");

正如预期的那样,如果我在接收路由中硬编码PROCESS_ID_PROPERTYPROCESS_KEY_PROPERTY,则消息将正确路由(当 ID 匹配时)。

from("activemq:queue:myQueue")
  .setBody(constant("test body"))
  .setProperty(PROCESS_ID_PROPERTY, constant("50"))
// .setProperty(PROCESS_KEY_PROPERTY, constant("CUSTOM-KEY"))
.to("activiti:SampleProcess:receiveAsyncPing");

如何在接收路由中获取任一属性,以便进行相应设置?

或者有没有更推荐的方法来解决这个问题?

【问题讨论】:

    标签: apache-camel activemq activiti


    【解决方案1】:

    一个好问题。 我处理这个问题的方法是使用 setProperty() 命令在路由中注入 PROCESS_KEY:

    见下文,我将流程键(业务键)设置为“bar”:

    from(startProcessEndpoint)
      .log(LoggingLevel.INFO, logMsg3)
      .setProperty("PROCESS_KEY_PROPERTY",foo)
      .setBody(constant("bar"))
    .to("activiti:testCamelTask:receive")
    

    现在,如果您不想使用常量,那么您可以访问路由中的交换对象,并且可以使用如下所示的表达式:

        Expression foo = new Expression() {
            @Override
            public <T> T evaluate(Exchange exchange, Class<T> aClass) {
                return (T) "foo";
            }
        };
    

    希望这会有所帮助, 格雷格

    【讨论】:

    • 格雷格,谢谢你的回答!但是,此时您如何匹配将原始消息发送到 ActiveMQ 的路由?另外,我有点困惑,业务键设置为 foo 还是 bar?
    猜你喜欢
    • 2021-12-09
    • 1970-01-01
    • 2014-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-24
    • 1970-01-01
    • 2015-07-01
    相关资源
    最近更新 更多