Задать вопрос
DennisKingsman
@DennisKingsman
Студент

Как реализовать ReplyToQueue?

Здравствуйте, у меня есть приложение 1 и в нем метод
@PostMapping
    public ResponseEntity<String> createOrder(@RequestBody OrderRequest order) throws JMSException {
        log.info("### 1 ### Order Service sending order message '{}' to the queue", order.getMessage());

        MQQueue orderRequestQueue = new MQQueue("DEV.QUEUE.1");
        jmsTemplate.convertAndSend(orderRequestQueue, order.getMessage(), textMessage -> {
            textMessage.setJMSCorrelationID(order.getIdentifier());
            return textMessage;
        });
        return new ResponseEntity(order, HttpStatus.ACCEPTED);
    }

который отправляет в очередь запрос
и есть приложение 2, которое, если я правильно понял, слушает эту очередь и отправляет в нее ответ
@JmsListener(destination = "DEV.QUEUE.1")
    public void receive(Message message) throws JMSException {
        TextMessage textMessage = (TextMessage) message;
        final String textMessageBody = textMessage.getText();
        log.info("### 2 ### Payment Service received message: {} with correlationId: {}",
                textMessageBody,
                textMessage.getJMSCorrelationID());
        // some random logic to complete the order (80% of times it returns true)
        Random random = new Random(); //message to convertAndSend
        String orderCompleted = (random.nextInt(101) >= 20) ? "payment_ok" : "payment_failed";
        // send response
        log.info("### 3 ### Payment Service sending response");
        MQQueue mqQueue = new MQQueue("DEV.QUEUE.1");
        jmsTemplate.convertAndSend(mqQueue, orderCompleted, responseMessage -> {
            responseMessage.setJMSCorrelationID(textMessage.getJMSCorrelationID());
            return responseMessage;
        });
    }

Если я правильно понял, то тут реализован принцип CorrelationId to CorrelationId.
Как изменить receive метод под принцип replyToQueue,гуглить пробовал, но не очень удачно?
  • Вопрос задан
  • 120 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
xez
@xez
TL Junior Roo
Вот тут же все написано:
MQQueue mqQueue = new MQQueue("DEV.QUEUE.1");
        jmsTemplate.convertAndSend(mqQueue, orderCompleted, responseMessage -> {
            responseMessage.setJMSCorrelationID(textMessage.getJMSCorrelationID());
            return responseMessage;
        });

Есть объявление очереди. Объявите ее так как вам надо.
Если вам не нужен CorrelationID - не устанавливайте его.

replyTo - так же можно получить из исходного сообщения:
Destination destination = textMessage.getJMSReplyTo();
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы