Giter Club home page Giter Club logo

consumer's Introduction

๐Ÿ“ŒKafka Consumer Server

Kafka Broker์˜ 'coffee' ํ† ํ”ฝ์˜ ๋ฉ”์‹œ์ง€๋ฅผ ๊ตฌ๋…ํ•˜์—ฌ ์ฒ˜๋ฆฌํ•˜๋Š” Consumer ์„œ๋ฒ„ ์ž…๋‹ˆ๋‹ค.

ํ•ด๋‹น ๋ฉ”์‹œ์ง€(๋‹คํšŒ์šฉ๊ธฐ์˜ ์œ„์น˜ ๋ฐ ์ƒํƒœ ์ •๋ณด)๋ฅผ WebSocket ํ†ต์‹ ์„ ํ†ตํ•ด Client๋กœ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

์„ค์น˜ ๋ฐ ์‹คํ–‰ ๋ฐฉ๋ฒ•

์•„๋ž˜์˜ ํ™˜๊ฒฝ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

service version
SpringBoot v3.1.x
Java v17
kafka_2.13 v3.6.0
spring-boot-starter-websocket v3.1.0

Kafka Consumer ๊ตฌ์„ฑ

Kafka Properties

@ConfigurationProperties("kafka")
@Data
public class KafkaProperties {
    public static final String CONSUMER_GROUP = "coffee-group";
    public static final String TOPIC = "coffee";

    @Value("${spring.kafka.bootstrap-servers}")
    private String bootstrapServers;
}
  • CONSUMER_GROUP : Kafka Consumer์˜ ๊ทธ๋ฃน ์•„์ด๋””๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ƒ์ˆ˜
  • TOPIC : Kafka Broker์—์„œ ๊ตฌ๋…ํ•˜๋Š” ํ† ํ”ฝ
  • bootstrapServers : Kafka Broker์˜ ๋ถ€ํŠธ์ŠคํŠธ๋žฉ ์„œ๋ฒ„ ์ฃผ์†Œ

ConsumerConfiguration

@Configuration
@EnableKafka
@RequiredArgsConstructor
public class ConsumerConfiguration {
    private final KafkaProperties kafkaProperties;

    @Bean
    KafkaListenerContainerFactory<ConcurrentMessageListenerContainer<String, String>> kafkaListenerContainerFactory() {
        ConcurrentKafkaListenerContainerFactory<String, String> factory = new ConcurrentKafkaListenerContainerFactory<>();
        factory.setConsumerFactory(consumerFactory());
        factory.setConcurrency(3);
        factory.getContainerProperties().setPollTimeout(3000);
        return factory;
    }

    @Bean
    public ConsumerFactory<String, String> consumerFactory() {
        return new DefaultKafkaConsumerFactory<>(consumerConfigs());
    }
    @Bean
    public Map<String, Object> consumerConfigs() {
        Map<String, Object> props = new HashMap<>();
        props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, kafkaProperties.getBootstrapServers());
        props.put(ConsumerConfig.GROUP_ID_CONFIG, KafkaProperties.CONSUMER_GROUP);
        props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
        props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
        return props;
    }
}
  • kafkaListenerContainerFactory() : Kafka Listener Container ์ƒ์„ฑ
    • Kafka Consumer๋Š” ConcurrentMessageListenerContainer๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋™์‹œ์— ์—ฌ๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •
  • consumerFactory() : Kafka Consumer ์ƒ์„ฑ
  • consumerConfigs() : Kafka Consumer์˜ ๊ตฌ์„ฑ ์†์„ฑ ์„ค์ •

WebSocket ๊ตฌ์„ฑ

WebSocketConfiguration

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfiguration implements WebSocketMessageBrokerConfigurer {
    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/container-status")
                .setAllowedOrigins("https://coffee-tree-front.web.app/", "http://localhost:3000")
                .withSockJS();
    }

    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {
        registry.enableSimpleBroker("/topic");
        registry.setApplicationDestinationPrefixes("/app");
    }
}
  • registerStompEndpoints() : WebSocket ์—”๋“œํฌ์ธํŠธ๋ฅผ ๋“ฑ๋ก
    • addEndpoint("/container-status"): "/container-status" ๊ฒฝ๋กœ๋ฅผ WebSocket ์—”๋“œํฌ์ธํŠธ๋กœ ๋“ฑ๋ก
    • setAllowedOrigins: WebSocket ์—ฐ๊ฒฐ์„ ํ—ˆ์šฉํ•  ์›๋ณธ(Origin)์„ ์„ค์ •
    • withSockJS : SockJS๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ์„ค์ •
      • SockJS๋Š” WebSocket์ด ์ง€์›๋˜์ง€ ์•Š๋Š” ํ™˜๊ฒฝ์—์„œ ๋Œ€์ฒด ์ˆ˜๋‹จ์„ ์ œ๊ณตํ•˜๋Š” JavaScript ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.
  • configureMessageBroker() : ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์—ญํ• 
    • enableSimpleBroker("/topic"): "/topic"์„ ๊ตฌ๋…ํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•˜๋Š” ๊ฐ„๋‹จํ•œ ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค๋ฅผ ํ™œ์„ฑํ™”
    • setApplicationDestinationPrefixes("/app"): ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ผ ๋•Œ ์‚ฌ์šฉํ•  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ”„๋ฆฌํ”ฝ์Šค๋ฅผ ์„ค์ •
      • ํด๋ผ์ด์–ธํŠธ๋Š” "/app"์„ ์ ‘๋‘์‚ฌ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”์‹œ์ง€๋ฅผ ์„œ๋ฒ„๋กœ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
      • ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ์„ค์ •์ž…๋‹ˆ๋‹ค.

consumer's People

Contributors

chae401 avatar jeong-rae avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.