Functional Spring Cloud Stream

我们在编程过程中经常需要通过中间件来进行解耦和缓冲压力。

Spring cloud Stream是我们经常使用到的类库,而spring对这种消息型中间件进行了高度集成,

使得代码更加简便。下面介绍下基于kafka 的spring-cloud-stream-binder使用

Pom

    <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-stream</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-stream-binder-kafka</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.kafka</groupId>
            <artifactId>spring-kafka</artifactId>
        </dependency>    

properties

spring.cloud.stream.bindings.process-in-0.destination=source-topic
spring.cloud.stream.bindings.process-in-0.binder=kafka1
spring.cloud.stream.bindings.process-in-0.group=user1
spring.cloud.stream.bindings.process-in-0.consumer.startOffset=latest
spring.cloud.stream.binders.kafka1.type=kafka
spring.cloud.stream.binders.kafka1.environment.spring.cloud.stream.kafka.binder.brokers=localhost:9092
spring.cloud.stream.binders.kafka1.environment.spring.cloud.stream.kafka.binder.autoCreateTopics=false
spring.cloud.stream.binders.kafka1.environment.spring.kafka.consumer.value-deserializer=com.message.serializer.SourceMessageDeserialize

spring.cloud.stream.bindings.process-out-0.destination=target-topic
spring.cloud.stream.bindings.process-out-0.binder=kafka2
spring.cloud.stream.bindings.process-out-0.group=user2
spring.cloud.stream.binders.kafka2.type=kafka
spring.cloud.stream.binders.kafka2.environment.spring.cloud.stream.kafka.binder.brokers=localhost:9092
spring.cloud.stream.binders.kafka2.environment.spring.cloud.stream.kafka.binder.autoCreateTopics=false

SpringBootApplication.java

   


@SpringBootApplication
public class KafkaTestrApplication {

 public static void main(String[] args) {
        SpringApplication.run(KafkaTestrApplication.class, args);
    }


//producer
    @Bean
    public Supplier<Message<String>> process() {
        ...............
        return () ->  msgList.get(new Random().nextInt(msgList.size()));
    }
   
  //Consumer
 @Bean
    public Consumer<Message<SourceMessage> process() {
        return message->{
             System.out.println(message.getPayload());
            }
    
    }
//processor
@Bean
    public Function<Message<SourceMessage>, Message<String>> process() {
        return message->convertToTargetMessage(message.getPayload());
    }
}

  

posted on 2020-11-20 22:05  涤生-三省吾身  阅读(472)  评论(0编辑  收藏  举报

导航