* GH-276 Apply ComponentCustomizer in other modules Fixes https://github.com/spring-cloud/stream-applications/issues/276 Some changes are straightforward as just a `ComponentCustomizer<?>` injection and its optional usage for the target component customization. Other changes are more drastic since it is better to use `proxyBeanMethods = false`, so some direct bean method calls had to be reworked to the bean method argument injections * Fix some deprecations from Project Reactor * Remove `UpdatingMongoDbMessageSource` since `MongoDbMessageSource` supports now an `update` option in Spring Integration NOTE: The `ZeroMqSupplierConfiguration` has its own customizer already like `Consumer<ZMQ.Socket>`, so it can be revised to a more broader solution, but in the future version. Some modules just does not make sense to modify for more advance customization since all their configuration is covered with plain configuration properties. See `splitter-function` or `wavefront-consumer` * * Use `ObjectProvider<WebClientCustomizer>` for `HttpRequestFunctionConfiguration` instead of our own `ComponentCustomizer`. Although this has to be revised in favor of fully auto-configured `WebClient.Builder`. Even that `maximumBufferSize` is included into codecs configuration properties. * The `MongoDbMessageSource` has now an `update` option in Spring Integration therefore remove redundant already `UpdatingMongoDbMessageSource` and populate `this.properties.getUpdateExpression()` directly ot the `MongoDbMessageSource` bean * Modify supplier configurations to avoid manual starts for endpoints on reactive `Publisher` subscriptions. Spring Integration provides now a `toReactivePublisher(true)` operator to have all the endpoints stopped on start, but started automatically when subscription happens to the provided `Publisher` * Update Copyright to the current year for all the affected classes * Use `@Nullable` instead of `ObjectProvider` in the `AggregatorFunctionConfiguration` dependency injection for consistency * Fix `LogConsumerConfiguration` to not have a `log()` in the end - it is not terminal in Spring Integration anymore. Use recommended `nullChannel()` terminating operator for use-cases like this. * * Remove `beanName` from `ComponentCustomizer` contract Co-authored-by: Chris Bono <cbono@vmware.com>
# HTTP Request Function This module provides an HTTP request function that can be reused and composed in other applications. The `Function` uses the reactive `WebClient` from `Spring WebFlux` and is implemented as a `java.util.function.Function`. This function gives you a reactive stream of `ResponseEntity` given a stream of request messages as the function a signature of `Function<Flux<Message<?>,Flux<ResponseEntity>>`. Users have to subscribe to the returned `Flux` to receive the data. ## Beans for injection You can import the `HttpRequestFunction` configuration in a Spring Boot application and then inject the following bean. `httpRequestFunction` You may inject this as `HttpRequestFunction`. You can use `httpRequestFunction` as a qualifier when injecting. Once injected, you can use the `apply` method of the `Function` to invoke it and then subscribe to the returned `Flux`. ## Configuration Options All configuration properties are prefixed with `http.request`. For more information on the various options available, please see link:src/main/java/org/springframework/cloud/fn/http/request/HttpRequestFunctionProperties.java[HttpRequestFunctionProperties.java] ## Examples See this link:src/test/java/org/springframework/cloud/fn/http/request/HttpRequestFunctionApplicationTests.java[test suite] for examples of how this function is used. ## Other usage See this link:../../../applications/processor/http-request-processor/README.adoc[README] where this function is used to create a Spring Cloud Stream application to process HTTP requests.