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()); } }