Hi,
I started working on implementing a client library for RabbitMQ based on STOMP 1.2 protocol, I'm sharing the initial buggy version [1] with the community for feedback, suggestions and review.
For the initial version I've implemented only authentication and publishing using receipts. I'll blog about this work with some history and background soon [2].
To test this library I wrote a load testing tool in golang which would run concurrent HTTP requests to an Openresty server. A handler runs Lua code for that request and uses the resty-rabbitmq library to sanitize, serialize and publish data to RabbitMQ's STOMP adapter.
With a noncurrent load test of total 1M requests, using the library a producer (in /example/) was able to publish all the messages to the broker without any errors. But in case of
concurrent connections, I frequently got timeout errors or writing to
closed socket errors.
How may I make publishing fault tolerant and avoid deduplicating messages in concurrent environment by correctly implementing states and reuse sockets using cosocket api pool? I set keepalive timeout on the cosocket tcp sock to 0 (no timeout as per wiki) and I saw exponential increase in socket consumed via the RabbitMQ management web interface, for a load of 100k requests, I saw fluctuations between 200-1200 consumed sockets with a lot of socket errors.
Ideas, flames? Thanks.
[1]
https://github.com/wingify/lua-resty-rabbitmq[2]
http://engineering.wingify.com/
Regards,
Rohit Yadav