2016-04-28 2 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

Да, это совершенно легально и безопасно, глядя на сторону кролика или ампир.

Но безопасно ли для согласованности данных, которые обрабатывает ваше деловое приложение, это еще одна история. Если потребитель принимает сообщение M, извлекают некоторые данные из него в S для БД записи (например), и в то же время передает сообщение M потребительских B, что при получении потребности для записи данных DB, но эти данные в зависимости от S, то что будет? Ну, скорее всего, случайным образом, и это известно как раса условия - в данном случае, мчится брокера - он должен написать S к БД, прежде чем B получает сообщение M.
Лучший способ избежать гонки - это, во избежание гонки. Have A переслать сообщение только после он закончил «настройку игры» для других потребителей.

Смежные вопросы