Как вызвать многократную услугу?
Когда я использую Армерию, у меня есть 3 сервиса:
Служба A вызывает службу B и службу C.
Должен ли я вызвать блокирующую заглушку B и C в blockingTaskExecutor A или каким-либо другим способом?
1 ответ
Допустим, вы спрашиваете о gRPC. В асинхронных фреймворках, таких как Armeria, рекомендуется использовать неблокирующую заглушку для выполнения вызова, чтобы не было блокирующих вызовов и, следовательно, все вызовы других служб (службы B и C в вашем случае) выполнялись в случае события. петля ниткой. Это дает потенциально более высокую производительность благодаря меньшему количеству переключений контекста и большей надежности, когда другие службы недостаточно отзывчивы.
Для этого можно использовать заглушку по умолчанию, сгенерированную gRPC-Java, но конечный результат может быть более сложным, чем необходимо, поэтому я бы рекомендовал использовать сторонние генераторы заглушек, такие как reactive-grpc, который обеспечивает интеграцию с RxJava и Проект Реактор.
Если вы используете Kotlin, вы можете попробовать grpc-kotlin, но имейте в виду, что он находится на ранней стадии.