编程语言
首页 > 编程语言> > Java / Spring – 从内部消费者发送RabbitMQ消息

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

作者:互联网

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

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正在竞争经纪人 – 它需要在B接收消息M之前将S写入DB.
避免比赛的最佳方法是避免比赛.只有在为其他消费者完成“设置游戏”后才能转发消息.

标签:java,spring,rabbitmq,spring-rabbit
来源: https://codeday.me/bug/20190702/1354577.html