#java #spring-boot #spring-integration #spring-jms
#java #spring-boot #spring-интеграция #spring-jms
Вопрос:
Я хочу отправить сообщение костюма как (полученное сообщение) клиенту очереди производителя, как только оно было получено клиентом очереди потребителя с использованием адаптера входящего канала jms. Нужна помощь, как достичь этого или любого альтернативного способа с использованием конфигурации xml.
XML-файл
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:int="http://www.springframework.org/schema/integration"
xmlns:jms="http://www.springframework.org/schema/integration/jms"
xmlns:int-file="http://www.springframework.org/schema/integration/file"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:int-xml="http://www.springframework.org/schema/integration/xml"
xmlns:int-jdbc="http://www.springframework.org/schema/integration/jdbc"
xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/integration/file http://www.springframework.org/schema/integration/file/spring-integration-file.xsd
http://www.springframework.org/schema/integration/xml http://www.springframework.org/schema/integration/xml/spring-integration-xml.xsd
http://www.springframework.org/schema/integration/jdbc http://www.springframework.org/schema/integration/jdbc/spring-integration-jdbc.xsd
http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd
http://www.springframework.org/schema/integration/jms http://www.springframework.org/schema/integration/jms/spring-integration-jms.xsd">
<context:component-scan base-package="com.fcb.incoming.wires" />
<context:property-placeholder
location="classpath:application-default.properties, classpath:application-${spring.profiles.active}.properties"
ignore-unresolvable="true" />
<int:poller default="true" fixed-delay="${fcb.queue.poller.fixeddelay}"/>
<int:channel id="incomingWireChannel">
<int:queue />
</int:channel>
<int:channel id="interWireChannel">
<int:queue />
</int:channel>
<int:channel id="verifyWireChannel">
<int:queue />
</int:channel>
<jms:inbound-channel-adapter
channel="incomingWireChannel" connection-factory="${fcb.queue.mq.connection.factory}"
destination-name="${fcb.incoming.wires.req.queue}" acknowledge="client">
<int:poller fixed-delay="${fcb.queue.poller.fixeddelay}" />
</jms:inbound-channel-adapter>
<int:router input-channel="incomingWireChannel" ref="msgValidator" method="validate" />
<bean id="msgValidator" class="com.fcb.incoming.wires.validate.MessageValidator">
</bean>
Ответ №1:
Используйте адаптер исходящего канала или входящий шлюз.
Управляемый сообщениями шлюз JMS inbound-gateway от Spring Integration делегирует в контейнер MessageListener, поддерживает динамическую настройку одновременных потребителей, а также может обрабатывать ответы.
Комментарии:
1. Неясно, что у вас есть в нисходящем потоке; у вас есть маршрутизатор, который ссылается на компонент проверки подлинности (что бы это ни было). Какой-либо компонент ниже по потоку от шлюза просто должен вернуть ответ, и платформа перенаправит его обратно на шлюз. Смотрите пример JMS .
2. я внес изменения в соответствии с вашим предложением <jms: идентификатор входящего шлюза = «jmsInGateway» request-destination-name =»${acb.inbound.error.queue}» request-channel=»inbounderrorChannel» connection-factory =»$ {acb.queue.mq.connection.factory}» подтверждение =»client» /> и он работает нормально, поскольку я получаю сообщение из очереди, но не знаю, как установить пользовательский сообщение и ответ отправителю