I am pleased to see this milestone of 10,000 downloads in the short history of ServiceMq and its underlying communication library ServiceWire, a faster and simpler alternative to WCF .NET to .NET RPC. And the source code for all three can be found on GitHub here.
Over the past few weeks both libraries have been improved.
ServiceMq improvements include:
- Options for the persistence of messages asynchronously to improve overall throughput when message traffic is high
- ReceiveBulk and AcceptBulk methods were introduced
- Message caching was refactored to improve performance and limit memory use in scenarios where large numbers of messages are sent and must wait for a destination to become available or received and must wait to be consumed
- Faster asynchronous file deletion was added which eliminates the standard File.Delete’s permission demand on every message file delete
- Asynchronous append file logging was added to improve throughput
- The FastFile class was refactored to support IDisposable and now dedicates a single thread each to asynchronous delete, append and write operations
- Upgraded to ServiceWire 1.6.3
ServiceWire has had two minor but important bugs fixed:
- Code was refactored to properly dispose of resources when a connection failure occurs.
- Previously if the host was not hosting the same assembly version of the interface being used, the connection would hang. This scenario now properly throws an identifiable exception on the client and disposes of the underlying socket or named pipe stream.
Real World Use
In the last month or so, I have had the opportunity to use both of these libraries extensively at work. All of the recent improvements are a direct or indirect result of that real world use. Without disclosing work related details, I believe it is safe to say that these libraries are moving hundreds of messages per second and in some cases 30GB of data between two machines in around three minutes across perhaps 300 RPC method invocations. Some careful usage has been required given our particular use cases in order to reduce connection contention from many thousands of message writer threads across a pool of servers all talking to a single target server. I’ve no doubt that a little fine tuning on the usage side may be required, but overall I’m very happy with the results.
I hope you enjoy these libraries and please contact me if you find any problems with them or need additional functionality. Better yet, jump onto GitHub and submit a pull request of your own. I am happy to evaluate and accept well thought out requests that are in line with my vision for keeping these libraries lightweight and easy to use.
One other note
I recently published ServiceMock, a tiny experimental mocking library that has surprisingly been downloaded over 500 times. If you’re one of the crazy ones, I’d love to hear from you and what you think of it.