Handle `prefetchCount` > max Short value
The AMQP spec says that prefetchCount is a short (16-bit) value. Despite this, the java amqp-client accents an int parameter. The int then has its MSB stripped off, and the remainder is reinterpreted as a short.
For example, if you supply a prefetch of 1_000_000, that gets interpreted as a prefetchCount of 16960
0b11110100001001000000 // 1_000_000
-----0b100001001000000 // 16_960
I have two proposals:
- ~~fs2-rabbit can change its own
prefetchCountparameter ofBasicQosto be aShortinstead of anInt. Then invalid values simply can't be passed. Comments can direct the user about what to do~~ It's actually interpreted as an unsigned short, so we don't have an out of the box type for it. - (binary compatible) fs2-rabbit can log an error when there's an attempt to
basicConsumewithprefetchCount > (2^16-1). We can also optionally "round" the requested count down to exactly (2^16-1)
I've opened an issue upstream as well: https://github.com/rabbitmq/rabbitmq-java-client/issues/640
Following up, it seems the technical limit is a logical "unsigned short" (see https://github.com/rabbitmq/rabbitmq-java-client/issues/640#issuecomment-606891124 ). So @Daenyth is correct with 2^16, or 65535
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.