完全排序
有时,确保每个主题消费者看到到达主题的消息具有完全相同的顺序可能很有用。通常,代理会保证同一生产者发送的所有消息的顺序。但是,由于代理使用多个线程和异步处理,来自不同生产者的消息可能会以不同的顺序到达不同的消费者。
例如,如果我们有生产者 P
和 Q
发送消息,使得大约在同一时间 P
发送 P1
, P2
, P3
,而 Q
发送 Q1
, Q2
。因此,两个不同的消费者可能会看到消息以以下顺序到达
consumer1: P1 P2 Q1 P3 Q2 consumer2: P1 Q1 Q2 P2 P3
在此示例中,每个生产者的消息都按自身相对顺序排列。但是,跨生产者的消息流可能会混合在一起。
完全排序 ActiveMQ Classic 中的目标确保每个消费者在该主题上看到相同的总顺序。这会带来性能成本,因为需要更大的同步。这很有用,尤其是在需要非常快的乐观事务时。使用完全排序,消息将按以下顺序到达
consumer1: P1 P2 Q1 P3 Q2 consumer2: P1 P2 Q1 P3 Q2
配置完全排序
在 每目标策略 上启用 <strictOrderDispatchPolicy/>
。以下是一个示例