Внедрить TraceId в весенний спут из сообщения Кафки - PullRequest
0 голосов
/ 26 октября 2018

Я работаю над множеством микросервисных архитектур, где точка входа от Кафки.например, предположим, что у нас есть три microservice micro1, micro2 и micro3, запрос в micro1 поступает из очереди сообщений kafka и далее связывается с micro2 и micro3 через клиент Rest.

Сообщение, полученное micro1, содержит requestId,который я должен поставить вместо TraceId в весеннем выпуске и который должен распространяться на все микросервисы.

Я пробовал это в MDC, но в этом случае traceId не распространяется на другие микросервисы.

Есть ли какой-нибудь другой способ реализовать собственный TraceId в автоматическом режиме вместо сгенерированного Auto?

спасибо !!

1 Ответ

0 голосов
/ 07 ноября 2018

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

Если вам действительно нужно изменить способ генерации идентификатора, вам нужно изменить этот компонент

https://github.com/spring-cloud/spring-cloud-sleuth/blob/v2.0.2.RELEASE/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/autoconfig/TraceAutoConfiguration.java#L113-L133

@Bean
    @ConditionalOnMissingBean
    Propagation.Factory sleuthPropagation(SleuthProperties sleuthProperties) {
        if (sleuthProperties.getBaggageKeys().isEmpty() && sleuthProperties.getPropagationKeys().isEmpty()) {
            return B3Propagation.FACTORY;
        }
        ExtraFieldPropagation.FactoryBuilder factoryBuilder = ExtraFieldPropagation
                .newFactoryBuilder(B3Propagation.FACTORY);
        if (!sleuthProperties.getBaggageKeys().isEmpty()) {
            factoryBuilder = factoryBuilder
                    // for HTTP
                    .addPrefixedFields("baggage-", sleuthProperties.getBaggageKeys())
                    // for messaging
                    .addPrefixedFields("baggage_", sleuthProperties.getBaggageKeys());
        }
        if (!sleuthProperties.getPropagationKeys().isEmpty()) {
            for (String key : sleuthProperties.getPropagationKeys()) {
                factoryBuilder = factoryBuilder.addField(key);
            }
        }
        return factoryBuilder.build();
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...