如果使用相同的发布频道 - >交换 - >队列 - >接收频道,RabbitMQ可以保证消息顺序。看来Spring AMQP允许我保证除发布频道之外的所有部分。这导致消息出现故障。以下是问题案例:
1。)我有一个线程在一次交换中按顺序发布消息 2.)我有一组其他线程在不同的交易所发布消息,有时为不同的交易所创建新的消费者
使用缓存的连接工厂,它有一个通道缓存。每次发布时,它都会进入缓存以获取频道。由于其他线程正在发布和使用,因此无法保证相同的通道将用于我的主线程的连续发布。即使我有一个缓存也是如此。有没有人解决这个问题?
理想情况下,我想要一个专门用于发布商 - 交换组合的渠道,或者至少是一个专门的发布渠道。我也没有看到提供方式。当RabbitMQ有一个保证订单的机制时,如果没有办法保证发布顺序,这似乎是Spring AMQP的一个重大缺陷。
答案 0 :(得分:0)
您必须为每个发布者使用专用连接(因此:连接工厂)。
或者,您可以使用RabbitTemplate.execute()
并使用回调中提供的频道发布al消息。