Я использую верблюда Apache для маршрутизации между конечными точками HTTP ActiveMQ и верблюда.Маршрут определен таким образом, что данные из веб-службы camel-cxf передаются в ActiveMQ и отправляются в tomcat, который является конечной точкой HTTP, а затем, после нажатия http uri, верблюд получает ответ от сервера tomcat.
Можем ли мы подтвердить очередь от верблюда только после успешной маршрутизации, я имею в виду подтверждение AMQ после процесса LOG_log_4 ?Если это возможно, то я могу сделать этот маршрут без потери данных в очереди, даже если http-ссылка не работает.
Я нашел эту ссылку JMS ACKNOWLEDGE_MODE .Если мне нужно использовать режим подтверждения CLIENT_ACKNOWLEDGE, нужно ли мне писать службу поддержки пользователей на сайте веб-приложения tomcat для подтверждения успешного получения сообщения.
Я использую Acknowledgemodename в качестве AUTO_ACKNOWLEDGE.
Подробная диаграмма маршрутаследующим образом: -
Spring-DSL application-context.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:camel="http://camel.apache.org/schema/spring" xmlns:cxf="http://camel.apache.org/schema/cxf" xmlns:jaxrs="http://cxf.apache.org/jaxrs" xmlns:osgi="http://www.springframework.org/schema/osgi" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd http://camel.apache.org/schema/cxf http://camel.apache.org/schema/cxf/camel-cxf.xsd"> <cxf:rsServer address="http://localhost:9000/employeeservice" id="restService" serviceClass="com.javainuse.beans.EmployeeServiceResource"/> <bean class="com.javainuse.beans.CamelProcessor" id="processor"/> <bean class="com.javainuse.beans.CamelAMQResponseProcessor" id="camelAMQResponseProcessor"/> <camelContext id="camelId" xmlns="http://camel.apache.org/schema/spring"> <camel:route id="_route1"> <camel:from id="_fromrest_1" uri="cxfrs://bean://restService"/> <camel:process id="_processrest_1" ref="processor"/> <camel:to id="_to1" uri="amq:queue:queue1x"/> <camel:log id="_log1" message="hit ws route 1"/> </camel:route> <camel:route id="_route2"> <camel:from id="_from2" uri="amq:queue:queue1x?concurrentConsumers=2"/> <camel:log id="_log2" message="hit amq route 2"/> <camel:log id="_log3" message="Message returned from the queue is ${body}"/> <camel:setBody id="_setBody2"> <simple>${body}</simple> </camel:setBody> <setHeader headerName="CamelHttpMethod" id="_setHeader1"> <constant>PUT</constant> </setHeader> <setHeader headerName="Cookie" id="_setHeader2"> <constant>JSESSIONID=Z2rLMNdkmpz72nG2FTj5SuLHn_rbZxHzs7wbw3LG</constant> </setHeader> <setHeader headerName="Authorization" id="_setHeader3"> <constant>eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJQQVNTV09SRC9hcHBhZG1pbiIsImF1dGgiOiJERUYtcm9sZS1hcHBhZG1pbiIsImV4cCI6MTUzNTQzNjg3Mn0.AqfYVoAFsh6XDiIGGVO8lRpGyb1HcdP2HN1rUWtfDbYNJ6rdsnLnT5nrqmtPSR7YfUui7pWKxEF96NcLKppQAg</constant> </setHeader> <camel:to id="_to2" uri="http:localhost:8080/api/outboundmsg/"/> <camel:log id="_log4" message="Message returned from iConnect is ${body} with header ${in.headers.CamelHttpResponseCode}"/> </camel:route> </camelContext> </beans>
Приложение конфигурации ActiveMQContext-mq.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:camel="http://camel.apache.org/schema/spring" xmlns:cxf="http://camel.apache.org/schema/cxf" xmlns:osgi="http://www.springframework.org/schema/osgi" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/osgi http://www.springframework.org/schema/osgi/spring-osgi.xsd http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd http://camel.apache.org/schema/cxf http://camel.apache.org/schema/cxf/camel-cxf-2.8.3.xsd"> <bean class="org.apache.activemq.camel.component.ActiveMQComponent" id="amq"> <property name="connectionFactory" ref="singleCF"/> <property name="useSingleConnection" value="true"/> <property name="usePooledConnection" value="false"/> <property name="preserveMessageQos" value="true"/> <property name="acknowledgementModeName" value="AUTO_ACKNOWLEDGE"></property> </bean> <bean class="org.springframework.jms.connection.SingleConnectionFactory" id="singleCF"> <property name="targetConnectionFactory" ref="AMQCF"/> </bean> <bean class="org.apache.activemq.ActiveMQConnectionFactory" id="AMQCF"> <property name="userName" value="admin"/> <property name="password" value="admin"/> <property name="brokerURL" value="tcp://localhost:61616"/> </bean> <bean id="pooledConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory" init-method="start" destroy-method="stop"> <property name="maxConnections" value="8" /> <property name="connectionFactory" ref="AMQCF" /> </bean> <bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> <property name="connectionFactory" ref="pooledConnectionFactory" /> </bean> </beans>
Заранее спасибо.
Брокер получает подтверждение, как только оно потребляется потребителем.т.е. в вашем случае
Ваше требование неясно, однако, если вам нужно реализовать ответ на запрос через очереди, вы можете установить параметр responseTo в очередь и отправить повторные ответы, полученные от tomcat, в эту очередь replyTo.Или, дайте мне знать точное требование.