不推荐使用 EnableBinding 类型,不推荐使用 StreamListener 类型 - Spring Cloud Stream

时间:2021-01-16 17:56:09

标签: spring spring-cloud-stream

我使用的是 Spring Boot 2.4.2 版,并使用 @InboundChannelAdapter 进行 Spring Cloud Stream 和 Spring Integration。

import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.cloud.stream.messaging.Source;
import org.springframework.integration.annotation.InboundChannelAdapter;

@EnableBinding(value = Source.class)
public class TransactionPublisher {
    
    @InboundChannelAdapter(channel = Source.OUTPUT)
    public String sendTransactionDetails() {
        return "{name:\"T1\", amount: \"1000\", transactionFor : \"Purchase\"}";
    }
}

RabbitmqReceiverApplication.java

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.cloud.stream.annotation.StreamListener;
import org.springframework.cloud.stream.messaging.Sink;

@EnableBinding(value = Sink.class)
@SpringBootApplication
public class RabbitmqReceiverApplication {

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

    @StreamListener(Sink.INPUT)
    public void log(String message) {
        System.out.println(message);
    }
}

还有什么选择?那么如何重构上面的代码呢?很多事情都在发生,速度变得越来越难以理解即将发生的事情和即将发生的事情?

1 个答案:

答案 0 :(得分:2)

the documentation

例如在消费者方面...

@Bean
Consumer<String> log() {
    return str -> {
        System.out.println(str);
    };
}

绑定名称为 log-in-0

在生产者方面,它是一个 Supplier<String> bean,绑定名称为 sendTransactionDetails-out-0