Java реализация Библиотеки RPC вызовов для общения между микросервисами.
- woody-api – базовая библиотека трассировки: управляет
TraceContext, генерируетtrace_id/span_id, переносит контекст между потоками (WFlow,WCallable/WRunnable/WExecutorService), содержит цепочку прокси и перехватчиков для событий, дедлайнов и маппинга ошибок. - woody-thrift – интеграция с Thrift over HTTP: билдеры
клиентов/сервисов (
THClientBuilder,THServiceBuilder) добавляют transport/message интерсепторы, логирование, поддержкуtraceparentи расширения метаданных. - libthrift – локальный модуль с патчами Apache Thrift (HTTP-клиент 5,
сервлеты и TLS), используется как зависимость для
woody-thrift.
- Сквозная трассировка вызовов через
TraceData, автоматическое измерение длительности и интеграция со SLF4J MDC и OpenTelemetry. - Расширенный MDC: автоматически публикует идентификаторы Woody/OTel, дедлайны,
RPC-метаданные и может отключаться через
-Dwoody.mdc.extended=false. - Потокобезопасная обработка фоновых задач с сохранением контекста
(
WFlow.create,createServiceFork). - Расширяемая система перехватчиков и
MetadataExtensionKitдля обогащения метаданных и настройки transport/message уровней. - HTTP Thrift клиенты и сервисы с пуллингом, логированием, маппингом ошибок и готовыми EventListener’ами.
- Обновлённый маппинг ошибок и транспорта (
THProviderErrorMapper), покрытый изолированными тестами и сценариями с сетевыми исключениями.
Версии woody-pom и всех его модулей должны совпадать, для этого перед
началом работы над новой версией библиотеки нужно увеличить версию
woody-pom и в корневой директории проекта выполнить команду:
mvn versions:update-child-modules -DgenerateBackupPoms=false
Параметр generateBackupPoms можно опустить, если нужны резервные копии
изменяемых файлов.
- Maven-монорепо (
pom.xml) с тремя артефактами: базовая библиотекаwoody-api, интеграцияwoody-thrift, а также пропатченныйlibthrift(форк Apache Thrift, переиспользующий HttpClient5 и подключающийся как модуль). - Основной стек: Java 11, SLF4J, Apache Commons Pool 2, OpenTelemetry (API/SDK/OTLP), Jakarta Servlet 5, Jetty и EasyMock в тестах.
TraceContext/TraceDataуправляют client/service span’ами вThreadLocal, автоматически создаютtrace_id/span_id, фиксируют длительность, синхронизируют SLF4J MDC и завершают OTEL-спаны.WFlowиflow.concurrentоборачиваютRunnable/Callable/ExecutorService, сохраняя контекст при выполнении в других потоках, поддерживают форки с новыми root- и service-span’ами.- Система перехватчиков (
proxy,interceptor,event):ProxyFactoryстроит динамические прокси вокруг клиентов и обработчиков, направляя вызовы черезMethodCallTracer.AbstractClientBuilder/AbstractServiceBuilderподключаютContextTracer, контроль дедлайнов, маппинг ошибок и event-трейсеры.- События (
ClientEvent,ServiceEvent) обрабатываются композиционными слушателями;TransportEventInterceptorиProviderEventInterceptorпубликуют события до и после вызовов.
- Расширяемость через
interceptor.extиMetadataExtensionKit: расширения получаютTraceDataи транспортный контекст для обогащения метаданных. - Ошибки классифицируются
WErrorType/WErrorDefinition;ErrorMapProcessorиErrorMappingInterceptorмэппят транспортные и бизнес-ошибки;DeadlineTracerобеспечивает контроль таймаутов.
- Thrift over HTTP поверх Woody.
- Клиенты (
THClientBuilder,THSpawnClientBuilder,THPooledClientBuilder) создаютTServiceClient, добавляют транспортные и message перехватчики (метаданные, traceparent, события), управляют ресурсами HttpClient5. - Сервисы (
THServiceBuilder) собираютTServletс обёртками надTProcessor, прокидываяTraceContext.forService, подключая транспортные перехватчики и error-mapping (THErrorMapProcessor); логирование (THSEventLogListener,THCEventLogListener) включено по умолчанию. - Транспорт и сообщения расширяются через bundles
(
MetadataExtensionBundleи др.), создаваяTHCExtensionContext/THSExtensionContextдля клиента и сервиса. - Поддержка W3C traceparent (
TraceParentUtils), заполнение дедлайнов/ошибок в метаданные, HTTP-логгеры. - Дополнительные пакеты:
error(конвертация исключений и HTTP-статусов),event(логирование),transport(конфигурация HTTP servlet’ов и клиентов).
- Клиенты (
- Локальный модуль с модифицированными классами Apache Thrift
(HTTP-транспорт, сервлеты, TLS и т.д.) под HttpClient5 и расширения Woody;
подключается к
woody-thriftкак зависимость той же версии.
woody-api/src/testпокрывает генераторы идентификаторов, трассировку и прокси.woody-thrift/src/test(Jetty quickstart + EasyMock) проверяет HTTP-интеграцию, обработку исключений и метаданные, включая интеграционные сценарииTraceLifecycleIntegrationTestдля проверки сквозной OpenTelemetry-трассировки, восстановления контекста, ошибок и работы с неполными заголовками.- Профиль
gen_thrift_classesвключаетthrift-maven-pluginдля генерации Thrift IDL. - Интеграционные тесты
MetadataMdcPropagationTestиTraceLifecycleIntegrationTestконтролируют перенос MDC-метаданных, OpenTelemetry-трассировку и восстановление контекста при ошибках.
- Контекст Woody Java — сводный обзор модулей, инструментов и ключевых понятий.
Реализация обеспечивает сквозную трассировку, управление временем жизни
span’ов и доступ к событиям через единую API-обвязку; woody-thrift поверх
неё инкапсулирует создание HTTP-клиентов и сервисов Thrift с traceparent,
логированием и расширяемыми метаданными, опираясь на локально
модифицированный libthrift.