cadence-workflow - Cadence Workflow:将主机特定对象(如数据库连接、服务客户端等)传递给活动实现
问题描述
当 cadence worker 出现时,它会初始化某些资源,例如数据库连接和其他服务的客户端。使这些资源可以从活动实现中访问的正确模式是什么?
解决方案
去
您可以通过上下文将您的活动所需的任何内容传递给您的活动。
下面是它的工作原理:
1)在你开始你的工人之前,将你需要的任何东西设置为一个上下文(下面的代码发生在你设置你的工人的地方):
myThriftClient := ... // create my thrift client
myContext := context.WithValue(context.Background(), "my_thrift_client", myThriftClient)
2) 使用在第 1 步中创建的上下文作为您用于启动工作人员的工作人员选项的 BackgroundActivityContext:
workerOptions := cadence.WorkerOptions{
MetricsScope: myScope,
Logger: myLogger,
BackgroundActivityContext: myContext,
}
worker := cadence.NewWorker(service, domain, taskList, workerOptions)
3)在您的活动代码中,从上下文中检索您的节俭客户端:
func MyActivity(ctx context.Context) error {
myThriftClient := ctx.Value("my_thrift_client").(ThriftClient)
// now you can make thrift calls using myThriftClient
}
爪哇
Worker.registerActivityImplementations
接受一个活动对象实例。因此,任何依赖项都可以在此对象注册到 worker 之前与它相关联。
Worker.Factory factory = new Worker.Factory(DOMAIN);
Worker worker = factory.newWorker(TASK_LIST);
// Initialize activities instance with all its dependencies
MyActivities activities = new MyActivitiesImpl(dbPool, serviceAClient);
worker.registerActivitiesImplementations(activities);
// Start listening to the workflow and activity task lists.
factory.start();
推荐阅读
- laravel - Laravel 在生产环境中返回 http 而不是 https
- android - 如何在谷歌播放的生产轨道上删除保留的 apk?
- java - 如何设置仅显示一个居中标签标签的标签布局
- android - 待定结果
setResultCallback 延迟 - vue.js - 任何人都可以帮助实施 Nuxt.js 谷歌标签管理器吗?
- javascript - 我的数据插入但数据表不会重新加载(codeigniter)
- php - 在 Laravel 中显示单个项目
- vb.net - 如果转换成功,我可以得到条件吗?
- ruby-on-rails - 排查 Rails nginx+passenger 500 错误
- python - 如何在python中的json内部进行排列和组合