= Thumbnail Stream Sample == Run with docker-compose If you have docker installed and running, this is the easiest way to run this sample. === Build the link:image-thumbnail-sink[] Build the docker image to register with the local Docker daemon. ``` cd image-thumbnail-sink ./mvnw clean package jib:dockerBuild ``` === Create input and output directories `images` and `thumbnails`. These names are referenced in link:docker-compose-apps.yml[] ``` cd image-thumbnail-stream-sample mkdir images thumbnails ``` === Start the containers ``` docker-compose -f docker-compose-kafka.yml -f docker-compose-apps.yml up ``` Proceed to xref:Create_Some_Data[Create Some Data] == Run standalone We will use this sink in a streaming application that reads a text file containing image URLs and create a thumbnail file for each image: `file-source | http-request-processor | image-thumbnail-sink` === Download the pre-packaged Source and Processor applications: ``` wget https://repo.spring.io/snapshot/org/springframework/cloud/stream/app/file-source-kafka/3.0.0-SNAPSHOT/file-source-kafka-3.0.0-SNAPSHOT.jar wget https://repo.spring.io/snapshot/org/springframework/cloud/stream/app/http-request-processor-kafka/3.0.0-SNAPSHOT/http-request-processor-kafka-3.0.0-SNAPSHOT.jar ``` === Start a Kafka message broker If you have Docker installed, you can start Kafka with ``` docker-compose up -f docker-compose-kafka.yml ``` Or install and run Kafka on your local machine. If you are using a remote Kafka cluster, set the property `--spring.cloud.stream.kafka.brokers=kafka_host1,...` to a comma-delimited list of host addresses on each of the following apps. === Create input and output directories Named `images` and `thumbnails` in this example. === Start the sink Build the link:image-thumbnail-sink[], if you haven't already done it. Then open a terminal window in `image-thumbnail-sink` and run: ``` java -jar target/image-thumbnail-sink-0.0.1-SNAPSHOT.jar --file.consumer.directory=$(PWD)/thumbnails --spring.cloud.stream.bindings.input.destination=thumbnail --server.port=0 ``` === Start the source and processor In separate terminal sessions run the processor and the source: ``` java -jar http-request-processor-kafka-3.0.0-SNAPSHOT.jar --http.request.url-expression=payload --http.request.expected-response-type=byte[] --http.request.maximum-buffer-size=2097152 --spring.cloud.stream.bindings.input.destination=image --spring.cloud.stream.bindings.output.destination=thumbnail --spring.kafka.producer.properties.max.request.size=2097152 --server.port=0 ``` ``` java -jar file-source-kafka-3.0.0-SNAPSHOT.jar --file.consumer.mode=lines --file.supplier.directory=$(PWD)/images --spring.cloud.stream.bindings.output.destination=image --server.port=0 ``` [[Create_Some_Data]] === Create some data Using your favorite text editor, create a file in the `images` directory containing some URLs: ``` https://i.imgur.com/FQtKSuv.jpeg https://i.imgur.com/4Cndaul.jpeg https://i.imgur.com/FCPLS42.jpeg https://i.imgur.com/DhzHsz8.jpg https://i.imgur.com/G7t1ZZl.jpg ``` You should see the thumbnail files in the `thumbnails` directory. image:../img/thumbnail-files.png[]