问题标签 [temporal-workflow]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
cadence-workflow - 将 Cadence 连接到 Azure Cosmo Cassandra API(Cadence 工作流)
我正在使用 docker run -e CASSANDRA_SEEDS=10.xxx e ubercadence/server: 在外部运行 cassandra 运行 cadence。并且它运行成功。
Azure cosmos 说,在 Cassandra 上运行的任何系统都可以使用 Azure cosmos 使用提供的 cosmos cassandra APi,通过修改客户端连接创建代码,例如:GO 应用示例代码:
func GetSession(cosmosCassandraContactPoint, cosmosCassandraPort, cosmosCassandraUser, cosmosCassandraPassword string) *gocql.Session { clusterConfig := gocql.NewCluster(cosmosCassandraContactPoint) port, err := strconv.Atoi(cosmosCassandraPort)
从我的角度来看,我可以将外部 cassandra 的 cqlsh(其 cadence 用于持久化)连接到 azure cosmos,并可以在 azure cosmo db 中创建 KeySpace、表。但是,当我运行 Cadence 服务器时,所有新表仍然在本地 cassandra 本身(而不是 Axure cosmos)上创建,可能是,cadence 仅连接到 cassandra。
所以下面基本上有2个问题:
1.cadence是用GO编写的,能否修改源码建立与AzureCosmoDb的连接。或者
或者我们可以在分别运行 cassandra 和 cadence 时传递 cosmocassandra 的主机、端口、用户名、密码吗(docker run -e CASSANDRA_SEEDS=10.xxx e ubercadence/server:) cosmosCassandraContactPoint : xyz.cassandra.cosmos.azure.com cosmosCassandraPort : 10350 cosmosCassandra用户:xyz cosmosCassandra密码:xyz
cadence-workflow - 在运行 cadence 时指定 cassandra 的端口用户名、密码和主机信息
在外部使用cassandra运行cadence时,如何提供cassandra的具体端口、用户名、密码。
使用默认端口:9042 和 cassandra 的身份验证禁用,我们可以使用以下命令运行 cadence:docker run -e CASSANDRA_SEEDS=10.xxx e ubercadence/server
如何指定不同的端口、用户名、密码?
cadence-workflow - Uber Cadence 制作设置
我正在寻找一个微服务编排器并遇到了 Uber Cadence。我已经阅读了文档并在开发设置中使用了它。
我对生产场景有几个问题:
是否建议为工作流及其使用的不同活动设置一个专门的任务列表?或者,我们应该为所有人使用一个任务列表吗?这个决定是否会影响可扩展性或性能?
当我们添加一个新的工作机器时,在同一台机器上为不同的活动/工作流运行所有工作人员是一种常见的做法吗?例子:
或者我们应该在专用机器上运行每个活动/工作流工作者?
在单个工作机器中,我们可以为给定的活动创建多少工作人员?例如,如果我们有活动 HelloActivityImpl,我们是否应该在同一台工作机器上为它创建多个工作人员?
我还没有找到任何用于生产设置的文档。例如,如何在生产环境中安装和配置 Cadence 服务?如果有人能指导我找到正确的材料,那就太好了。
在一些视频教程中提到,为了实现高可用性,我们可以跨多个数据中心设置 Cadence 服务。如何为此配置 Cadence 服务?
cadence-workflow - 工作线程和工作流的节奏配置
工人和工作流之间的比率是多少以及如何管理线程以便工人和工作流数量之间不应该中断如果我启动更多数量的工作流,则会引发以下错误
没有足够的线程来执行工作流。如果此消息始终出现,则应减少 WorkerOptions.maxConcurrentWorklfowExecutionSize 或增加 WorkerOptions.maxWorkflowThreads。
处于阻塞状态的工作流在内存中保持活动状态??处于等待状态的工作流不断检查条件??更多处于等待状态的工作流将保持工作人员被占用??在下面的示例中,线程正在等待信号,工作流的数量被缩放到一百万/天,timetocloseWorkflow = 2 天。触发信号的平均时间是相应工作流程启动后的 1 天
--
logging - 有没有办法在节奏工作流程中使用“zerolog”记录器而不是“zap”记录器?
我知道 Cadence 使用它自己的内部非导出context
. 这使得很难从中获取值,因为workflow.Context
和之间没有转换context.Context
。但也许还有另一种我忽略的方式。
go - 在节奏工作流的循环内调用相同的活动
我在 cadence 工作流程中有一个问题,我们可以在 for 循环中使用不同的输入调用相同的活动吗?该代码将是确定性的吗?如果执行工作流的工作人员在执行期间停止并稍后重新启动,则 cadence 将能够在重新构建工作流时重播事件。
例如,我有以下代码。
在这里,第二个活动在 for 循环中被并行调用。我的第一个问题是,这段代码是确定性的吗?
假设在循环 5 次迭代后,当 i = 5 时,执行此工作流的工作人员终止,如果工作流程在另一个工作人员中启动,cadence 是否能够重播事件?
你能回答我的问题吗?
cadence-workflow - 引入版本控制后,Cadence 工作流不执行活动
我在 cadence 工作流中引入了 cadence 版本控制,之后工作流在版本控制引入点停止执行。我收到以下错误:
2020-10-29T07:23:49.587Z DEBUG internal/internal_event_handlers.go:465 ExecuteActivity {“Domain”:“domain_1”,“TaskList”:“tasklist_1”,“WorkerID”:“6@cdnc-5ddb9ccbb5-5dt5j@tasklist ”,“WorkflowType”:“do_work_workflow”,“WorkflowID”:“CREATE”,“RunID”:“cab97b65-9892-48c5-b842-3f8b462d8602”,“ActivityID”:“4”,“ActivityType”:“do_Task_D”} 2020-10-29T07:23:49.620Z DEBUG internal/internal_task_handlers.go:1077 缓存状态已过时,新任务有意外事件 {“Domain”:“domain_1”,“TaskList”:“tasklist_1”,“WorkerID”:“6 @cdnc-5ddb9ccbb5-5dt5j@tasklist1", "WorkflowID": "CREATE", "RunID": "cab97b65-9892-48c5-b842-3f8b462d8602”,“CachedPreviousStartedEventID”:30,“TaskFirstEventID”:22,“TaskStartedEventID”:30,“TaskPreviousStartedEventID”:21}
我的工作流程代码将如下所示:
在 ChangeID 处,返回的版本为 1,工作流尝试执行 TaskD,但它没有执行它,它陷入了无限循环,试图执行 TaskD。
我得到的错误信息是
缓存状态过时,新任务有意外事件
和
BadRequestError{消息:CadenceChangeVersion 不是有效的搜索属性}
你能帮我解决这个问题吗?
temporal-workflow - 如何获取命名空间内所有工作流的搜索属性
如何通过外部客户端获取命名空间或任务队列(不想提供工作流 id)内所有工作流的搜索属性?我正在使用 Java SDK。
下面是工作流和添加搜索属性的示例代码。在代码中,WorkflowExecution 用于获取搜索属性,但工作流 id 必须作为输入参数。我正在寻找一种解决方案来获取命名空间的所有工作流和搜索属性,而无需提供工作流 ID。
WorkflowServiceStubs 服务 = WorkflowServiceStubs.newInstance();
WorkflowExecution 执行 = WorkflowExecution.newBuilder().setWorkflowId(workflowID).build();
DescribeWorkflowExecutionRequest 请求 = DescribeWorkflowExecutionRequest.newBuilder() .setNamespace(client.getOptions().getNamespace()) .setExecution(execution) .build();
SearchAttributes searchAttributes = resp.getWorkflowExecutionInfo().getSearchAttributes();
cadence-workflow - 使用命令行运行工作流时,如何使工作流运行无限长时间?
我正在使用命令行运行 Cadence 工作流程。我不希望我的工作流程超时(即,我希望它运行无限长的时间)。我该怎么做?
cadence-workflow - 按客户跟踪正在进行的节奏工作流程
假设我们需要在用户完成购物车后生成订单。
这是我们生成订单的步骤:
- 生成挂起状态的订单(订单微服务)
- 授权用户信用(记账微服务)
- 将购物车的状态设置为关闭(购物车微服务)
- 批准订单(订单微服务)
为此,我们只需创建一个节奏工作流,为每个步骤调用一个活动。
问题1:如果用户再次打开购物车或刷新页面,客户端如何检测到该购物车的订单创建正在进行中?(注意:假设我们的工作流还没有被worker执行)
我对问题 1 的解决方案:创建订单并将其状态更改为pending
在运行工作流之前,因此对于下一个请求,客户知道订单处于待处理状态。但是如果订单创建成功,但启动工作流失败,会发生什么?它不是事务性的(订单创建和工作流程运行)
如果此解决方案也是您的解决方案并且您接受其风险,请告诉我。我是节奏的新手。
问题2:工作流程完成并准备好订单后如何通知客户?
请提供任何解决方案或文章或帮助?