В Springboot microservices api, как вызвать другой сервер с помощью очереди AMQP, получить ответ из другой очереди службы, отправить ответ - PullRequest
0 голосов
/ 08 февраля 2019

Мы пишем платформу микроуслуг.У нас есть сервер A, написанный в весенней загрузке, который представляет API для внешнего мира.

У нас есть другой микросервис весенней загрузки B, который необходимо вызвать из A.

Пример:

У нас есть конечная точка / createOrder в службе A.

Когда мы вызываем это, вызывается контроллер A, необходимо отправить сообщение на сервер B с использованием интеграции AMQP JMS,B получает очередь, обрабатывает контроллер, отправляет сообщение обратно на сервер A, чтобы можно было отправить ответ на запрос API / / create order.

----> / createorder -> A Server --> A отправляет очередь сообщений на сервер B ---> B сервер обрабатывает ее ---> Отправляет сообщение A ---> A отвечает на запрос.

В этом процессе как удерживатьзапросить в Сервер A и дождаться ответа от Сервер B .

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Чтобы дождаться ответа, вы можете попробовать использовать асинхронного кролика.Вот учебник от baeldung: https://www.baeldung.com/spring-amqp-reactive

0 голосов
/ 08 февраля 2019

Похоже, вам нужно ознакомиться с Шаблонами корпоративной интеграции и его реализацией с Spring Integration .Существует шаблон, подобный gateway , и эта структура имеет его реализацию для исходящих запросов / ответов JMS: https://docs.spring.io/spring-integration/docs/current/reference/html/jms.html#jms-outbound-gateway.

С другой стороны, Spring AMQP не поддерживает AMQPПротокол 1.0, который, скорее всего, может обрабатываться обычным JMS API.

JmsTemplate от Spring JMS также предоставляет нам такой API, как:

/**
 * Send a message and receive the reply from the specified destination. The
 * {@link MessageCreator} callback creates the message given a Session. A temporary
 * queue is created as part of this operation and is set in the {@code JMSReplyTO}
 * header of the message.
 * @param destinationName the name of the destination to send this message to
 * (to be resolved to an actual destination by a DestinationResolver)
 * @param messageCreator callback to create a message
 * @return the reply, possibly {@code null} if the message could not be received,
 * for example due to a timeout
 * @throws JmsException checked JMSException converted to unchecked
 * @since 4.1
 */
@Nullable
Message sendAndReceive(String destinationName, MessageCreator messageCreator) throws JmsException;

Итак, вы можете рассмотреть возможность использования этого, если Spring Integration слишком сложно привести кваш проект прямо сейчас.

Если вы путаете AMQP 0.9 с JMS, то вы действительно можете остаться с проектом Spring AMQP и его RabbitTemplate.sendAndReceive().

...