TL:DR: Exchange and queue names used to have ‘.’ replaced with ‘_’. From version 0.18 this is no longer the case.
Yesterday I announced version 0.18 of EasyNetQ. The big change was the addition of polymorphic publish and subscribe.
I forgot to mention that there’s a slight change to the conventions that EasyNetQ uses, that might affect you when you upgrade.
EasyNetQ’s publish-subscribe pattern is implemented in AMQP as follows:
- A topic exchange named after the published type is created.
- A queue named by concatenating the published type and the subscriber id is created.
- The exchange is bound to the queue with the wildcard, ‘#’, binding key.
So if you have this code:
bus.Subscribe<MyMessage>("test", MessageHandler); bus.Publish<MyMessage>(message);
Note, in my case MyMessage is in an assembly ‘EasyNetQ.Tests’ with the same namespace.
You will see this in the RabbitMQ management UI:img title="default_binding" style="border-left-width: 0px; border-right-width: 0px; border-bottom-width: 0px; display: inline; border-top-width: 0px" border="0" alt="default_binding" src="$default_binding5.png" width="715" height="487" />
Previously The exchange and queue names would have had the ‘.’ replaced with ‘_’: ‘EasyNetQ_Tests_MyMessage:EasyNetQ_tests’.
If you upgrade some services to version 0.18, but leave others at earlier version numbers, they won’t be able to communicate.