Правильный способ вызова метода «забей и забудь» в сервисе Service-Fabric - PullRequest
0 голосов
/ 12 июня 2018

У меня есть метод на ServiceA, который мне нужно вызвать из ServiceB.Выполнение метода занимает более 5 минут, и меня не волнует его возвращаемое значение.(Вывод из метода обрабатывается другим способом)

Я настроил свой метод в IServiceA следующим образом:

[OneWay]
Task LongRunningMethod(int param1);

Однако это не похоже на запуск, потому что я получаюSystem.TimeoutException: This can happen if message is dropped when service is busy or its long running operation and taking more time than configured Operation Timeout.

Один из вариантов - увеличить время ожидания, но, похоже, должен быть лучший способ.Есть ли?

1 Ответ

0 голосов
/ 12 июня 2018

Для запускать и забывать или длительные операции лучшее решение - использовать шину сообщений в качестве промежуточного программного обеспечения, которое будет обрабатывать эту зависимость между обоими процессами.

Чтобы сделать то, что вы хотите без промежуточного программного обеспечения, вашему абоненту придется беспокоиться о многих вещах, таких как: тайм-ауты (как в вашем случае), гарантия доставки (подтверждение), доступность услуг, исключения и т. Д.

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

Существует много вариантов, например:

  • служебная шина Azure
  • очередь хранилища Azure
  • MSMQ
  • Концентратор событий
  • и т. Д.

Я бы не советовал использовать обходные пути SF Communication, Task.Run (), Threads, как предлагают многие места, потому что они просто принесут вам дополнительную работу и не будут работать так гладко, как подход промежуточного уровня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...