Java / Spring - 从内部消费者发送RabbitMQ消息

时间:2016-04-28 14:31:40

标签: java spring rabbitmq spring-rabbit

从当前队列的使用者发送消息到另一个队列是否合法且安全吗?

public void onMessage(){
    //save to db
    Order o=myservice.create(order);

    Object o=rabbitTemplate.convertSendAndReceive(queue2,orderId);   
}

我认为在这种情况下,第二个队列的使用者可能看不到保存的顺序,因为只有在onMessage方法退出后才会提交事务。

从消费者那里发送消息是否安全合法?

1 个答案:

答案 0 :(得分:2)

是的,从rabbitmq或amqp方面来看,它是完全合法和安全的。

但是,您的业务应用程序正在处理的数据的一致性是否安全,这是另一个故事。如果消费者 A 收到消息 M ,则从中提取一些数据到 S 以进行数据库写入(例如)并同时转发消息< em> M 到消费者 B ,一旦收到需要将数据写入数据库,但此数据依赖 S ,则会发生什么?好吧,机会是随机的,这被称为竞争条件 - 在这种情况下, A 正在竞争经纪人 - 它需要在 B <之前将 S 写入数据库/ em>收到消息 M 。 ˙避免比赛的最佳方法是避免比赛。 A 只有在完成后才能转发消息&#34;设置播放&#34;对于其他消费者。