2016-04-28 100 views
4

從當前隊列的使用者向另一個隊列發送消息是合法和安全的嗎?Java/Spring - 從消費者內部發送RabbitMQ消息

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

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

我認爲在第二隊的這種情況下,消費者可能無法看到保存的訂單,因爲該交易後,才onMessage方法退出承諾。

發送來自消費者的信息是否安全合法?

+0

我沒有看到任何問題,它看起來像:生產者 - >消費者 - >應用程序 - >生產者 - >消費者 –

回答

2

是的,這是完全合法和安全的,從rabbitmq或amqp方面看。

但是,您的業務應用程序正在處理的數據的一致性是否安全,這是另一回事。如果消費者接收消息中號,從它到小號提取一些數據DB寫入(例如),並在同一時間轉發消息中號消費者即在接收到需要將數據寫入到DB,但是這個數據是,具體取決於S,那麼會發生什麼?好了,機會是隨機的,這就是所謂的競爭條件 - 在這種情況下,一個是賽車經紀人 - 它需要收到消息中號之前小號寫入DB。
避免比賽的最佳方法是避免比賽。有A轉發消息只有在它已完成「設置播放」爲其他消費者。