我使用的是 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);
}
}
还有什么选择?那么如何重构上面的代码呢?很多事情都在发生,速度变得越来越难以理解即将发生的事情和即将发生的事情?
答案 0 :(得分:2)
例如在消费者方面...
@Bean
Consumer<String> log() {
return str -> {
System.out.println(str);
};
}
绑定名称为 log-in-0
。
在生产者方面,它是一个 Supplier<String>
bean,绑定名称为 sendTransactionDetails-out-0
。