When using Redis streams with multiple consumers, I get an i/o timeout on consumers that don't read a message. This seems to occur when another consumer did read a message but due to low traffic this consumer reached the BLOCK timeout. If none of the consumers at all read a message I get a redis.Nil error.
Expected Behavior
When no item is read from the stream the consumer should always get a redis.Nil error.
In addition to the error type not being redis.Nil, it takes about 10s extra for the command to complete. I also imagine that the connection is no longer reused.
Possible Solution
Steps to Reproduce
In this script I have 5 stream consumers each doing a 30s blocking read. There is one goroutine adding a single item with a random 0-60s delay:
When using Redis streams with multiple consumers, I get an i/o timeout on consumers that don't read a message. This seems to occur when another consumer did read a message but due to low traffic this consumer reached the BLOCK timeout. If none of the consumers at all read a message I get a
redis.Nil
error.Expected Behavior
When no item is read from the stream the consumer should always get a
redis.Nil
error.Current Behavior
In the script below I receive i/o timeout errors:
In addition to the error type not being
redis.Nil
, it takes about 10s extra for the command to complete. I also imagine that the connection is no longer reused.Possible Solution
Steps to Reproduce
In this script I have 5 stream consumers each doing a 30s blocking read. There is one goroutine adding a single item with a random 0-60s delay:
Example Output:
Context (Environment)
Detailed Description
Possible Implementation