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

标签 java spring rabbitmq spring-rabbit

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

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

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

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

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

最佳答案

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

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

关于Java/Spring - 从消费者内部发送 RabbitMQ 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36917746/

相关文章:

node.js - AMQPLIB - NodeJS - 在 RabbitMQ 中断言惰性队列

java - 为 rabbitmq 配置 HAProxy

java - 设计Java API

java - 多次启动一个方法

java - 使用 -gc true 在 Java 12 与 Java 8 上的流 API 的神秘微基准测试结果

java - 无法使用 Gmail SMTP 在 Spring Boot 中发送电子邮件

java - Spring 3.2 启动 tomcat 服务器时出错 7 - BeanFactory 未初始化或已关闭

java - 如果父 bean 定义为原型(prototype),子 bean 是否自动成为原型(prototype)

python - RabbitMQ python 库检查状态

java - 当我尝试连接 mysql 数据库时,主机名显示不同?