NB: this post was updated 8th Jan 2018 to account for changed image names and invocation being “hot” by default.
If you haven’t read Flow 101 yet, I encourage you to start there and get grounded in what Flow is, what it’s for and how it works.
In this post I’ll go through how to build a more complex Flow with parallelism and asynchronous chaining. I’ll assume you have set up the services as described in the Flow 101.
The demo Flow
An app which:
- reads some text
- greps for a given keyword
- counts the matching lines
- prints the count
- prints the file header
In your shell, it might look something like:
Installing helper functions
One of the cool things about Fn is that because it’s based on Docker, functions can be written in any language — even Bash!
Clone this repo of simple Bash functions and deploy them all:
You can test all of these individually, for example:
Creating our Flow function
In a new directory called
HelloFunction.java look like this:
It’s worth reading this code carefully, remembering that anything returning a
FlowFuture object is an asynchronous call, which can be chained with
thenCompose and the other Flow API methods.
We’ll want some test data:
Deploy the function, and remember to configure the app with the location of the Flow Server (aka “completer”):
And… send in the Shakespeare:
Visualising the Flow
Check the UI on http://localhost:3002 and you should see something like this:
As you could see from the code above, the
grep are executed in parallel, the
linecount has to wait for the
grep, and the
main has to wait till everything else is finished.
For a more thorough treatment of the different operations you can use to create Flows, see the Fn Flow User Guide. If you’re at the top of the class, you can have a look at the Flow — Advanced Topics page. And a real example can be found in the Asynchronous Thumbnails project.
Finally, there is an explanation of testing Fn Java Functions and Flows
Originally published at mjg123.github.io.