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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rabbitmq.com/pipermail/rabbitmq-discuss/attachments/20130530/563ed5db/attachment.htm>