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());
}
}
浙公网安备 33010602011771号