Yearly Archive 2018-11-28


MongolianBarbecue is out as 1.0.0

It’s a nifty little tool with a silly label, but since it implements queues on top of MongoDB, the name was inevitable! 🤠

So, if all you have in the world is MongoDB, and you want to do some messaging, you can do this:

var config = new Config("mongodb://MONGOBONGO01/some-db", "messages");

to create a configuration, and then you

var producer = config.CreateProducer();
var message = new Message(Encoding.UTF8.GetBytes("hei"));

await producer.SendAsync("destination-queue", message);

to send a UTF8-encoded text to a queue named destination-queue, and then you

var consumer = config.CreateConsumer("destination-queue");

var message = await consumer.GetNextAsync();

// ... handle message here

to receive the message and handle it.

You can read more about it on the GitHub page, and you can get the binaries from your favorite package repository.

Read More


Tababular 3 is out

Nothing happened, really, since announcing the beta, so this is just a little public service announcement to tell you that Tababular is out now as version 3! 🙂

“What’s tababambabular?”, you might ask?

It’s just a little nifty library that can format data as tables, which is a nice thing to do sometimes.

E.g. in automated tests, instead of outputting one manually formatted crappy-looking test output after another, why not just collect the data and print it as a table? Here’s an example from the Fleet Manager’s driver, where emitted saga snapshot states are presented in a nice, readable summary form:

| Revisions | SagaId                               |
| 0         | 42d9beb5-d94c-4f62-9c60-65beb40c9b5e |
| 1         |                                      |
| 2         |                                      |
| 3         |                                      |
| 0         | 1c4c3db0-9ac2-4541-9752-ed01719aa217 |
| 1         |                                      |
| 2         |                                      |
| 3         |                                      |
| 4         |                                      |
| 5         |                                      |
| 6         |                                      |
| 7         |                                      |

Or how about CLI applications? Check out how Fleet Manager’s administration CLI presents the list of accounts in our DEV environment:

Happy formatting! 📜


Rebus 5 is out

Lots of small changes, only a few of them breaking(*), nothing earth-shattering 🙂

The biggest change is probably that the test helpers (FakeBus, SagaFixture, etc.) were moved to a separate repository and its own NuGet package: Rebus.TestHelpers.

Another slightly bigger change is that Rebus now targets .NET 4.5, .NET 4.6, and .NET Standard 2.0. If anyone is missing the .NET Standard 1.3. support, please ✉️➡️[email protected] and let us know why 👻

Some of the smaller changes include a few performance improvements 💨, an extension point to customize how topic names are created out of .NET types, the ability to “fail fast” (i.e. skip retries) in various situations 💥, and a way to delay message processing when starting up the bus.

As usual, WIRE-COMPATIBILITY is 100% with all versions of Rebus from 2 and up, so you don’t need to go all-in to start upgrading your endpoints! 😇

See the full 5.0.0 changelog entry for more details on what was changed.

(*) In theory, all changes can be breaking… in this case, the version was bumped to 5 primarily because the IRoutingApi interface was extended with the Defer method signature, and because all of the testing helpers were moved.


Support for Microsoft Extensions Logging

If you’re running your Rebus stuff on .NET Core, and you’re using “Microsoft Extensions Logging” (that’s just not a bite-sized title for a logging library), you’re in luck: Rebus now has Rebus.Microsoft.Extensions.Logging, so you can

var loggerFactory = new LoggerFactory()

	.Logging(l => l.MicrosoftExtensionsLogging(loggerFactory))
	.Transport(t => t.Use(...))

and have Rebus log its stuff there, too.

The package is currently in alpha, but since there’s not much to it, we expect it to be pretty stable.

Happy logging! 🤠


Rebus’ Azure Service Bus transport now supports .NET Core

For almost a year, this GitHub issue has been open – but I’m happy to announce that I’ve closed it just now, which I’ve done of course because Rebus’ Azure Service Bus transport has now finally been ported properly to Microsoft’s new Azure Service Bus driver.

When the new driver came out, lots of people were puzzled, because it lacked the management operations from the original driver. This meant that queue creation, topic creation, and even mundane stuff like subscribing to topics, could not be done with it.

It took a long time and some pretty dedicated community work for the driver to come out with management operations in it, which happened about two months ago (as a prerelease, stable version was out one month ago).

Today, all of our Fleet Manager environments have been running with Rebus’ new Azure Service Bus transport a week or more, so we’re ready to let Rebus.AzureServiceBus 6.0.0 out into the wild 🦁🌳which in turn means that Rebus can use Azure Service Bus on the .NET Core 2.0/.NET 4.6.1 and later runtimes.


Another neat little library: MongolianBarbecue

The process of building larger software projects holds many small opportunities for separating out small utilities and helper libraries, and one such opportunity has again arisen 🙂

This time it’s a message queue implementation based on MongoDB: MongolianBarbecue (sounds a little bit like something with “mongo” and “queue”…. 🤓)

It’s of course not meant to be able to replace real message brokers and queueing systems, but if you’re in a tight spot, and all you have is MongoDB, then it might just save the day! 🤠

Using it is easy – you can configure it like this:

var config = new Config(
    connectionString: "mongodb://MONGOBONGO01/Readme", 
    collectionName: "messages"

and then you send a message to a queue named my-queue like this:

var producer = config.CreateProducer();

var payload = Encoding.UTF8.GetBytes("Hej med dig, min ven!");
var message = new Message(payload);

await producer.SendAsync("my-queue", message);

When it’s time to receive a message, you create a consumer for a specific queue like this:

var consumer = config.CreateConsumer("my-queue");

and then you get the next message like this:

var messageOrNull = await consumer.GetNextAsync();

// do stuff with the message if it's not null

MongolianBarbecue uses lease-based locking of messages, so it’s safe to use in any kind of distributed scenario you can come up with (e.g. like competing consumers). Moreover, it is pretty easy to use it to implement distributed locking, which can be used to implement exclusive access to a distributed resource.

Neat! 😎


Tababular update

This is just a tiny update about the nifty little library that is Tababular, because I enjoy using it so much, and I think more people should be using it too 🙂

The latest prerelease (3.0.0-b02) adds .NET Standard 2.0 as a target, and it has had a make-over making it appear more spacey, and therefore easier to decode visually:

| FirstColumn | SecondColumn | ThirdColumn |
| r1          | hej          | hej igen    |
| r2          | hej          | hej igen    |

Last but not least, it has had its reflection routines implemented using the brilliant FastMember library, thus making it easier on your CPU 😊


Fleet Manager 2 is out

So… we’ve been pretty busy here at Rebus FM, building the 2nd incarnation of our Fleet Manager product (which is actually the 5th or the 7th rewrite of the frontend, depending on how you count it… but who cares?!).

We celebrated Labour Day by working even harder, which means that it’s available now! We just call it Version 2, but if you have been using the old Fleet Manager, you can probably see that it looks a little different:

It has seen numerous improvements – too many to mention, really – so I suggest you go check out some screenshots on the updated Fleet Manager page, or just go to if you’re already a customer.