Spring AMQP确保多个消息的顺序
如果使用相同的发布频道 - >交换 - >队列 - >接收频道,则RabbitMQ保证消息顺序。 Spring AMQP允许我保证除发布频道以外的所有内容。 这导致消息失序。 以下是问题案例:
1.)我有一个单线程在单个交易所上发布消息2.)我有一系列其他线程在不同的交易所发布消息,有时为不同的交易所创建新的消费者
使用缓存的连接工厂它有一个通道缓存。 每次发布时,它都会进入缓存以获取频道。 由于其他线程正在发布和使用,因此不能保证相同的频道将被我的主线程用于连续发布。 即使我拥有一个缓存,情况也是如此。 有没有人解决这个问题?
理想情况下,我希望为发布者交换组合提供专用渠道,或者至少为专业发布渠道。 我没有看到提供的方法。 在RabbitMQ有保证订单机制的情况下,如果无法保证发布订单,那么Spring AMQP似乎就是一个重大缺陷。
您必须为每个发布者使用专用连接(因此:连接工厂)。
或者,您可以使用RabbitTemplate.execute()
并使用回调中提供的渠道发布消息。