What's new in SwiftMQ Streams 11

SwiftMQ Streams emerges to a Microservice Platform

SwiftMQ Streams is now a Microservice Platform. Read more here.

Actually, it was already such a platform but these important features where missing:

Stream Dependencies let you define dependencies between Streams. This guarantees a consistent start/stop order and is the precondition to run hundreds of Streams that belong together.

Before SwiftMQ Streams 11 the Stream scripts had to be present in some directory at the particular SwiftMQ Router. This had create a nightmare when many Streams scripts had to be deployed at many Router nodes. There is now a Stream Repository (implemented as Stream) plus a repo client in JMS and AMQP flavour where DevOps can simply upload the Stream scripts in a Router's Stream Repository from remote.

The Deployment Strategy is the "best practice" to do just this: How to deploy Streams that belong together and have dependencies. There is a recommended directory structure which is used by SwiftMQ Dashboard as well. This will make deployments and upgrades easy to handle.

Admin Streams are now System Streams

The Admin Streams introduced with release 10.2.0 have been moved into SwiftMQ Dashboard. They can be found in Dashboard App "Router Monitoring / Management".

The Streams Swiftlet now contains a few System Streams which are general purpose and part of the Streams environment. Look here.

New Features of the Stream Interface

Read docs of the Stream Interface here.

onStart Callback

A Stream can set an onStart callback which is called just before the Stream is started. The intention of this callback is to let others know that the Stream is now available.

The onStart callback is a function without parameters:

        stream.onStart(function () {
                    stream.output(registryTopic).send(
                        stream.create()
                            .message()
                            .message()
                            .property("registryrequest").set(true)
                            .property("streamname").set(streamname)
                            .property("streamtype").set("multivalue")
                            .property("available").set(true)
                    );
                });