Spring 128

[Spring for Apache Kafka] Transactions

1. 트랜잭션 활성화 방법DefaultKafkaProducerFactory의 transactionIdPrefix 설정트랜잭션이 활성화됨트랜잭션 전용 Producer 캐시를 유지함각 프로듀서의 transactional.id는 transactionIdPrefix + 번호(n) 형식으로 생성됨spring boot는 spring.kafka.producer.transaction-id-prefix 만 설정하면 됨 2. KafkaTransactionManagerSpring의 PlatformTransactionManager를 구현한 클래스Spring 트랜잭션 지원 방식과 함께 사용이 가능함 (@Transactional, TransactionTemplate 등)KafkaTemplate의 모든 작업은 트랜잭션 범위 안에서..

[Spring for Apache Kafka] 3-3. Receiving Messages: Post-Processing

1. Forwarding Listener Results using @SendTo@KafkaListener에 @SendTo 애너테이션을 함께 사용하면, 리스너 메소드의 반환값을 지정된 토픽으로 자동 전달함 토픽 지정유형설명예시고정된 토픽애플리케이션 초기화 시 지정된 토픽에 메시지 전달@SendTo("someTopic")애플리케이션 초기화 시 결정되는 SpEL애플리케이션 초기화 시 평가되어 결정됨@SendTo("#{someExpression}")실행 시 결정되는 SpEL동적으로 토픽을 결정 (request, source, result 등 사용 가능)@SendTo("!{request.value()}")빈 토픽 이름!{source.headers['kafka_replyTopic']}로 간주@SendTo() 설정더..

[Spring for Apache Kafka] 3-2. Receiving Messages: @KafkaListener

1. @KafkaListener AnnotationBean 메서드를 Kafka 리스너로 지정할 때 사용Listener Container 안에서 실행되며, 내부적으로 MessagingMessageListenerAdapter로 감싸집니다메서드 파라미터에 맞게 Converter 등을 설정해줌대부분의 속성들은 SpEL(#{...}) 또는 **프로퍼티 플레이스홀더(${...})**를 이용해 동적으로 지정할 수 있음 Record Listeners@KafkaListener를 붙이면 적용됨Listener Container Factory 필요 (이름이 kafkaListenerContainerFactory인 빈을 찾음) 예제더보기public class Listener { @KafkaListener(id = "foo"..

[Spring for Apache Kafka] 4. Application Events

1. 이벤트Spring Kafka는 여러 소비자 관련 이벤트를 발행함카테고리이벤트명설명주요 속성소비자 생애주기ConsumerStartingEvent소비자 스레드가 생성될 때 발생(poll 시작 전)container, sourceConsumerStartedEvent소비자가 실제로 폴링을 시작하려고 할 때 발생container, sourceConsumerFailedToStartEvent소비자가 시작되지 못한 경우 발생(consumerStartTimeout 초과)container, sourceConsumerStoppingEvent소비자가 정지 직전에 발생container, partitionsConsumerStoppedEvent소비자가 정지된 후 발생container, source, reasonConsumerR..

[Spring for Apache Kafka] 3-1. Receiving Messages: Message Listener

이 문서는 해당 섹션의 일부분만 정리되었음. 1. Message ListenersKafka에서 메시지를 처리하려면 리스너를 제공해야 함인터페이스설명MessageListener개별 메시지 처리AcknowledgingMessageListener메시지 처리 후 수동으로 오프셋을 커밋ConsumerAwareMessageListener메시지 처리 시 Consumer 객체 접근BatchMessageListener배치 메시지 처리BatchAcknowledgingMessageListener배치 메시지 처리 후 수동 커밋 예제더보기더보기MessageListener@KafkaListener(topics = "topic1")public void onMessage(ConsumerRecord record) { System..

[Spring for Apache Kafka] 2. Sending Messages

1. DefaultKafkaProducerFactory기본적으로 모든 클라이언트에서 공유하는 단일 Kafka 프로듀서를 생성 설정) DefaultKafkaProducerFactory더보기@Configurationpublic class KafkaProducerConfig { @Bean public DefaultKafkaProducerFactory producerFactory() { Map configs = new HashMap(); configs.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092"); configs.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONF..

[Spring for Apache Kafka] 1. Basic

1. Connecting to KafkaFactory구성 요소역할ProducerFactory메시지 전송을 위한 팩토리 생성ConsumerFactory메시지 수신을 위한 팩토리 생성 FactoryListenerFactory의 Listener는 프로듀서/컨슈머가 만들어지거나 닫힐 때 호출하는 메서드를 정의한 인터페이스생성된 프로듀서/컨슈머의 bean id는 factory의 beanName + kafka client id 패턴으로 정의됩니다. 예제더보기public class MyProducerFactoryListener implements ProducerFactory.Listener { @Override public void producerAdded(String id, Producer produce..

[Spring WebSockets] 2-3. STOMP: 부가 기능

1. Order of Messages브로커에서 클라이언트로 보내는 메시지는 clientOutboundChannel을 통해 전달됩니다.이 채널은 내부적으로 ThreadPoolExecutor(멀티스레드 풀)로 운영되기 때문에, 메시지들이 여러 스레드에서 처리됩니다.그래서 클라이언트가 실제로 받는 메시지 순서가 서버에서 보낸 순서와 다를 수 있습니다. 설정) Outbound 순서 보장더보기@Configuration@EnableWebSocketMessageBrokerpublic class PublishOrderWebSocketConfiguration implements WebSocketMessageBrokerConfigurer { @Override public void configureMessageB..

Spring/Spring Stomp 2025.05.04

[Spring WebSockets] 2-1. STOMP: 주요 내용

1. STOMP란원래는 스크립트 언어(Ruby, Python, Perl 등)에서 엔터프라이즈 메시지 브로커와 통신할 수 있도록 만들어진 텍스트 기반 메시징 프로토콜.TCP, WebSocket 등 신뢰할 수 있는 양방향 스트리밍 프로토콜 위에서 동작 가능.텍스트 지향이지만, Payload(본문) 는 텍스트 또는 바이너리 모두 지원 가능. 2. 메시지 흐름clientInboundChannel로 서버로 들어옴brokerChannel에서 브로커가 메시지 처리clientOutboundChannel로 클라이언트에게 전송됨 구성 요소구성요소설명Message헤더 + 페이로드를 가진 기본 메시지 표현MessageHandler메시지를 처리하는 계약 인터페이스MessageChannel메시지를 송신할 수 있는 인터페이스 (생..

Spring/Spring Stomp 2025.05.03

[Spring WebSockets] WebSockets

1. WebSocketWebSocket 프로토콜 (RFC 6455)클라이언트와 서버 간에 하나의 TCP 연결 위에서 양방향(full-duplex) 통신 가능.HTTP를 기반으로 동작하지만, HTTP와는 다른 프로토콜이다.80, 443 포트 사용기존 방화벽 규칙 재사용 가능. 참고사항WebSocket 서버가 nginx 같은 프록시 서버 뒤에 있을 경우, 업그레이드 요청을 프록시가 제대로 전달하도록 설정 필요.클라우드 환경에서는 WebSocket 지원 여부를 클라우드 제공업체 문서에서 확인해야 함. 2. WebSocket API전체 흐름[Client] ↓ (HTTP Upgrade 요청: ws://)[HandshakeInterceptor] 단계설명HandshakeInterceptor (Handl..

Spring/Spring Stomp 2025.05.02