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

Java / Spring - send a RabbitMQ message from inside consumer

从当前队列的消费者向另一个队列发送消息是否合法且安全?

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

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

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

消费者发送消息安全合法吗?

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

但是您的业务应用程序正在处理的数据的一致性是否安全,那就是另一回事了。如果消费者A收到消息M,从中提取一些数据到S用于DB写入(例如)同时将消息M转发给消费者B,消费者收到后需要将数据写入DB,但是这个数据是依赖S,那么会发生什么?好吧,机会是随机的,这被称为竞争条件——在这种情况下,A 正在与代理竞争——它需要将 S 写入 DB在 B 收到消息 M 之前。
避免比赛的最好方法就是避免比赛。让 A 仅在 为其他消费者完成 "setting up the play" 后转发消息