Рабочий процесс Cadence: передача определенных объектов хоста, таких как соединения с базой данных, клиенты службы и т. Д., К реализации действия - PullRequest
0 голосов
/ 30 сентября 2019

Когда появляется работник каденции, он инициализирует определенные ресурсы, такие как соединения с базой данных и клиент, для других сервисов. Как правильно сделать эти ресурсы доступными из реализаций действий?

Ответы [ 2 ]

0 голосов
/ 02 октября 2019

В Java мы используем поставщиков для передачи клиентов и сервисов с отслеживанием состояния, таких как gcs, база данных ... поэтому при каждом выполнении действия на основе того, как мы реализовали метод get поставщика, запрошенный клиент / сервис предоставляется действиюбез необходимости предварительно создавать их экземпляры при создании экземпляра ActivityImpl.

0 голосов
/ 30 сентября 2019

Go

Вы можете передать все, что нужно вашей деятельности, через контекст вашей деятельности.

Вот как это работает:

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) В коде своей деятельности извлеките свой клиент Thrift изконтекст:

func MyActivity(ctx context.Context) error { 
  myThriftClient := ctx.Value("my_thrift_client").(ThriftClient)
  // now you can make thrift calls using myThriftClient
}

Java

Worker.registerActivityImplementations принимает экземпляр объекта действия. Таким образом, любые зависимости могут быть связаны с этим объектом до того, как он будет зарегистрирован рабочим.

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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...