Functional-based implementation does not need the definition of message channels because the framework links directly the binding to functions.
Producer Configuration
Consumer Configuration
Instead of using @StreamListener annotation, we define the message handlers using Consumer function implementation and register them as beans.
Please find the complete source code on the GitHub link.