是否可以使用Camunda从Camunda流获得同步响应?
例如,我有两个服务任务,
1. Validate Address,
2. Get ProductList。
现在,我开始使用Camunda提供的REST (不使用驾驶舱启动该过程)。执行地址验证服务任务,成功地执行ProductList任务,并在调用客户端的响应中返回它的i.e. List of products响应,而不是使用process挖掘camunda。我搜索了它,但没有找到任何这样的例子,也没有找到它。
发布于 2017-02-27 11:49:07
我已经阅读了REST文档,没有其他方法可以从REST获得实际响应(即List of Product),因为rest调用的返回类型如下-
{
id: "95aef406-3a7a-11e5-85b6-dafa20524153",
definitionId: "invoice:1:15e97a1c-312d-11e5-aca3-a0e120524153",
businessKey: null,
caseInstanceId: null,
ended: true,
suspended: false
}它显示进程终止(ended: true),因为所有调用都是同步的,Camunda创建过程
现在,如果用户想从进程中读取参数,那么需要调用历史服务,因为进程是同步的和结束的。
GET /history/variable-instance,有关更多选项,请参见过程历史变量。
发布于 2017-02-15 17:58:11
我看不出用rest做这件事的方法,即使是在没有额外查询和过程变量的情况下,嵌入式流程引擎也是有点棘手的。
解决这一问题的一种方法是引入一个"context“对象,它要么由依赖注入框架管理,要么作为一个简单的ThreadLocal进行管理。此上下文将包含输入和输出参数,并可在启动流程时和从服务任务访问。
class Context {
private String address;
private List<String> products;
public Context(String address) { this.address = address; }
public String getAddress() { return address; }
public void setAddress(String address) { this.address = address; }
public List<String> getProducts() { return products; }
public void setProducts(List<String> products) { this.products = products; }
}
class CurrentContext {
private static final ThreadLocal<Context> value = new ThreadLocal<>();
public static void set(Context context) {
value.set(context);
}
public static Context get() {
return value.get();
}
public static void remove() {
value.remove();
}
}
class GetProductList implements JavaDelegate {
@Override
public void execute(final DelegateExecution execution) {
final Context context = CurrentContext.get();
context.setProducts(getProducts(context.getAddress()));
}
}在使用java启动进程之前,您将初始化上下文,然后从上下文中检索结果:
final Context context = new Context("address");
CurrentContext.set(context);
try {
runtimeService.startProcessInstanceById(...);
return context.getProducts();
} finally {
CurrentContext.remove();
}我们正在非常成功地使用此模式(使用由自定义spring作用域管理的上下文)。
发布于 2021-06-05 22:11:45
根据我的理解,进程应该始终被看作是可以被异步处理的东西。由于这个原因,我会检查备选方案,而不是试图从进程开始时直接获得结果。
一种常见的方法是,应用程序提供一个web端点(例如,HTTP端点),充当回调处理程序。Camunda进程可以在服务流程完成之前通知您的端点(在回调中使用数据的某些标识符和结果)。
https://stackoverflow.com/questions/42200074
复制相似问题