SpringCloud 功能支持

2023-11-25 09:15 更新

從Spring Cloud Stream v2.1開始,定義流處理程序源的另一種方法是使用對Spring Cloud函數(shù)的內(nèi)置支持,其中可以將它們表示為java.util.function.[Supplier/Function/Consumer]類型的beans。

若要指定要綁定到綁定公開的外部目標(biāo)的功能bean,必須提供spring.cloud.stream.function.definition屬性。

這是Processor應(yīng)用程序?qū)⑾⑻幚沓绦蚬_為java.util.function.Function的示例

@SpringBootApplication
@EnableBinding(Processor.class)
public class MyFunctionBootApp {

	public static void main(String[] args) {
		SpringApplication.run(MyFunctionBootApp.class, "--spring.cloud.stream.function.definition=toUpperCase");
	}

	@Bean
	public Function<String, String> toUpperCase() {
		return s -> s.toUpperCase();
	}
}

在上面的代碼中,我們僅定義了類型為java.util.function.Function的bean(稱為toUpperCase)并將其標(biāo)識為bean,用作消息處理程序,其“輸入”和“輸出”必須綁定到外部目標(biāo)由處理器綁定公開。

以下是支持源,處理器和接收器的簡單功能應(yīng)用程序的示例。

這是定義為java.util.function.Supplier的Source應(yīng)用程序的示例

@SpringBootApplication
@EnableBinding(Source.class)
public static class SourceFromSupplier {
	public static void main(String[] args) {
		SpringApplication.run(SourceFromSupplier.class, "--spring.cloud.stream.function.definition=date");
	}
	@Bean
	public Supplier<Date> date() {
		return () -> new Date(12345L);
	}
}

這是定義為java.util.function.Function的Processor應(yīng)用程序的示例

@SpringBootApplication
@EnableBinding(Processor.class)
public static class ProcessorFromFunction {
	public static void main(String[] args) {
		SpringApplication.run(ProcessorFromFunction.class, "--spring.cloud.stream.function.definition=toUpperCase");
	}
	@Bean
	public Function<String, String> toUpperCase() {
		return s -> s.toUpperCase();
	}
}

這是一個(gè)定義為java.util.function.Consumer的接收器應(yīng)用程序的示例

@EnableAutoConfiguration
@EnableBinding(Sink.class)
public static class SinkFromConsumer {
	public static void main(String[] args) {
		SpringApplication.run(SinkFromConsumer.class, "--spring.cloud.stream.function.definition=sink");
	}
	@Bean
	public Consumer<String> sink() {
		return System.out::println;
	}
}

功能組成

使用此編程模型,您還可以從功能組合中受益,在該功能組合中,您可以從一組簡單的函數(shù)中動態(tài)組成復(fù)雜的處理程序。作為示例,我們將以下函數(shù)bean添加到上面定義的應(yīng)用程序中

@Bean
public Function<String, String> wrapInQuotes() {
	return s -> "\"" + s + "\"";
}

并修改spring.cloud.stream.function.definition屬性以反映您打算從'toUpperCase'和'wrapInQuotes'編寫新函數(shù)的意圖。為此,可以使用Spring Cloud函數(shù)使用|(管道)符號。因此,完成我們的示例,我們的屬性現(xiàn)在將如下所示:

—spring.cloud.stream.function.definition=toUpperCase|wrapInQuotes
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號