# 능력 성분의 아홉째 자리 33: boolean brokerTransaction, # Kafka 가 넘기는 열두 값 (아홉째가 참) new MessagingCapabilities( true, true, true, true, true, true, true, false, true, false, false, true); ^^^^ brokerTransaction # 그 상수 선언이 프로파일을 참조하는가: 0 # 이 플래그를 읽는 main 코드: 0 # 바로 옆 열째 플래그를 읽는 main 코드: DefaultMessagePublisher.java:250: && !transport.capabilities(profile.name()).capabilities().deduplicatedPublish()) { # 그 열째가 거짓인 이유 *
Declaring it true means {@code PublishDeduplication} is accepted and silently does nothing —
* the caller believes the broker is deduplicating and skips the idempotency it would otherwise
* build. False makes that request a startup failure instead, which is the whole reason the flag
* exists.
# 트랜잭션 검증기가 요구하는 다섯
30: if (transactionalIdPrefix == null || transactionalIdPrefix.isBlank()) {
34: if (!brokerProfile.enableIdempotence()) {
38: if (!"all".equals(brokerProfile.acks())) {
42: if (brokerProfile.enableAutoCommit()) {
46: if (profile.externalSideEffectGuarantee() == ExternalSideEffectGuarantee.INBOX_TRANSACTIONAL) {
if (profile.externalSideEffectGuarantee() == ExternalSideEffectGuarantee.INBOX_TRANSACTIONAL) {
throw new IllegalArgumentException(
"a Kafka transaction does not cover a database side effect; use the Inbox alone: "
+ profile.name().value());
}
}
}
# 기동 검증으로 감싸이는 검증기와 직접 불리는 검증기
KafkaMessagingAutoConfiguration.java:54: public StartupProfileValidation> profiles, Consumer