3.1.0 (2020-06-03)

A little more than a year after releasing Xbus 3.0.0 and 3 release candidates over the last months, Xbus 3.1.0 is finally available.

We cooked a few features that we hope will make your usage of Xbus even more pleasant than before, and at the same time we are preparing the next steps like the creation of a Web GUI.

What’s new ?

Request-Reply

A very common pattern in EIPs is Request-Reply.

In Xbus 3.0, we used to implement this pattern by defining two pipelines: one for the request, and one for the reply. It worked not too bad for simple cases, but had several shortcomings.

To begin with, any requestor would need to be both an emitter (for sending the request) and a consumer (for receiving the reply). On the other side, the server part would also need to be a consumer (to receive the request) and an emitter (to send the reply).

Another issue was that tracking a complete request-reply path in the bus meant finding 2 different processes, which could be hard to correlate.

And when routing comes in, things get even more complicated as we have to find in the reply some information to route it to the right requestor.

All these problems are elegantly solved by the new ‘request-reply’ feature of Xbus:

  • only 1 pipeline to define
  • only 1 process is created
  • the requestor is only an emitter, and can read the reply whenever it needs, without forcing the process to remain ‘running’
  • the server is only a single worker, with no need to inject correlation data in the reply
  • no hard routing of the reply, it always gets back to the original requestor

We will shortly publish a post that will help you to get started with the “request-reply” feature.

Better “xbusctl ps”

The ‘ps’ command now have new flags to filter by process creation date: --created-from and --created-to. These new flags take complete dates or durations relative to now (like, ‘1d’).

To make things more consistent, we renamed the flags --status-change-since and status-unchanged-since to --status-changed-from and --status-changed-to, and they now also accept complete dates and not only relative durations.

Naturally the process creation date is now displayed in the ‘ps’ view.

Preparations for a Web GUI

We added a few features that allow the embedding of a web application in the http gateway. This application will be able to connect to the bus and use the complete xbus api, especially the control api that drives the xbusctl utility.

We already have a POC application of a Xbus GUI, and you should hear about it soon.

The HTTP gateway now has:

  • flags --http-host and --http-port
  • a websocket gateway to the nats server on /__raw__ that is enabled with the new flag --http.websocket
  • a flag --http.ui: if set, the content of the given path will be served on /ui
  • support for user/password authentication and session token

Some changes were also made on Xbusd:

  • support for user/password authentication and session token
  • fixes on the json encoding of the xbus protocol

Complete compatibility

We made sure the 3.0 and 3.1 protocols are compatible, which means you can mix and match the client and server versions.

Of course, using a new feature like filtering and display of the process creation date means upgrading both xbusctl and xbusd. But if you have, let’s say, a consumer that is not convenient to upgrade now, you can totally leave it as it is, there should be no consequence.

If however you run into problems that seem related to a version mismatched, please report it and we will have a close look at it.

And more

Among other things, the toolchain was updated to go-1.13, and we now build binaries for windows and macos thanks to the silver bullet tool that https://github.com/mitchellh/gox is.

It is also worth knowing that xbus documentation is now hosted in its own repository, https://orus.io/xbus/xbus-docs, and will soon include all the xbus ecosystem documentation including the API and xbus-stdlib.

You can find a complete list of the changes in the HISTORY page.

Documentation

Documentation is online:

Docker images

Get the docker images:

version “personal”:

  • orus/xbusd:3.1.0
  • orus/xbusctl:3.1.0
  • orus/xbus-client:3.1.0
  • orus/xbus-http:3.1.0
  • orus/xbus-fullenv:3.1.0

version “enterprise”:

  • docker.orus.io/xbus-enterprise/xbusd:3.1.0-enterprise
  • docker.orus.io/xbus-enterprise/xbusctl:3.1.0-enterprise
  • docker.orus.io/xbus-enterprise/xbus-client:3.1.0-enterprise
  • docker.orus.io/xbus-enterprise/xbus-http:3.1.0-enterprise
  • docker.orus.io/xbus-enterprise/xbus-fullenv:3.1.0-enterprise

version “LTS”:

docker.orus.io/xbus-lts/xbusd:3.1.0-lts docker.orus.io/xbus-lts/xbusctl:3.1.0-lts docker.orus.io/xbus-lts/xbus-client:3.1.0-lts docker.orus.io/xbus-lts/xbus-http:3.1.0-lts docker.orus.io/xbus-lts/xbus-fullenv:3.1.0-lts