1、一个客户端,中间消息未回复
publish [stream_sequence] subject-data
[1] test.001 - version1.0
[2] test.002 - version1.0
[3] test.003 - version1.0
consumer中1、3回复,2不回复:
[stream_sequence consumer_sequence] subject-data
[1 1] test.001 - version1.0 ack ok
[2 2] test.002 - version1.0 don't ack
[3 3] test.003 - version1.0 ack ok
custom.NextMsg error: context deadline exceeded
custom.NextMsg error: context deadline exceeded
[2 4] test.002 version1.0 ack ok
另外,看接口应该可以通过增加consumer的option中MaxWaiting或者MaxAckPending为1实现严格顺序保证。但设置后只能一个数据一个数据的顺序处理会影响效率。
如果不设置,客户端接收到的顺序是不能按照steam_seq保证的。
2、多个客户端,负载分担
负载分担情况下,如果其中一个客户端有数据没有回复挂掉了,后面需要再派发给其他客户端,是没法保证顺序的。如果一个一个顺序处理就失去了负载分担的意义。