AmqpProvider - Транспортное соединение удаленно закрыто
Я использую ServiceMix вместе с библиотеками Apache Camel и Qpid для подключения к удаленному узлу для получения очередей JMS.
Моя конфигурация Bean:
<bean id="amqp" class="org.apache.camel.component.amqp.AMQPComponent">
<property name="connectionFactory">
<bean class="org.apache.qpid.jms.JmsConnectionFactory">
<property name="remoteURI" value="amqp://esesslxjks.se:9443" />
</bean>
</property>
</bean>
<camelContext xmlns="http://camel.apache.org/schema/blueprint">
<!-- Master Data Queue -->
<route>
<from uri="amqp:queue:///CS_output" />
<log message="Copying o the output directory"/>
<to uri="amqp:queue:///CS_input" />
</route>
Используя этот компонент, я запускаю свое приложение и вижу положительный ответ:
| DEBUG | mix-7.0.0/deploy | JmsProducer | 43 - org.apache.camel.camel-core - 2.16.4 | Starting producer: Producer[amqp://queue:///CSDP_input]
| DEBUG | mix-7.0.0/deploy | JmsConsumer | 43 - org.apache.camel.camel-core - 2.16.4 | Starting consumer: Consumer[amqp://queue:///CSDP_output]
| DEBUG | mix-7.0.0/deploy | BlueprintCamelContext | 43 - org.apache.camel.camel-core - 2.16.4 | Route: route1 >>> EventDrivenConsumerRoute[Endpoint[amqp://queue:///CS_output] -> Pipeline[[Channel[Log(route1)[Copying o the output directory]], Channel[sendTo(Endpoint[amqp://queue:///CS_input])]]]]
| DEBUG | mix-7.0.0/deploy | faultJmsMessageListenerContainer | 154 - org.apache.servicemix.bundles.spring-jms - 3.2.17.RELEASE_1 | Established shared JMS Connection
Но тогда я получаю следующую ОШИБКУ:
| DEBUG | esesslxjks.se:9443] | AmqpProvider | 226 - qpid-jms-client.jar - 0.0.0 | Transport connection remotely closed
| DEBUG | esesslxjks.se:9443] | JmsConnection | 226 - qpid-jms-client.jar - 0.0.0 | Async exception with no exception listener: java.io.IOException: Connection remotely closed.
java.io.IOException: Connection remotely closed.
at org.apache.qpid.jms.provider.amqp.AmqpProvider$18.run(AmqpProvider.java:727)[226:qpid-jms-client.jar:0.0.0]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)[:1.8.0_121]
at java.util.concurrent.FutureTask.run(FutureTask.java:266)[:1.8.0_121]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)[:1.8.0_121]
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)[:1.8.0_121]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)[:1.8.0_121]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)[:1.8.0_121]
at java.lang.Thread.run(Thread.java:745)[:1.8.0_121]
В настоящее время я не знаю, почему это произойдет? Какие еще возможные отладки я могу сделать? Любые указатели очень рекомендуются.
1 ответ
В вашем свойстве remoteURI используйте протокол amqps вместо amqp.
ServiceBus будет отклонять его, потому что он использует неподдерживаемый протокол.
<bean id="amqp" class="org.apache.camel.component.amqp.AMQPComponent">
<property name="connectionFactory">
<bean class="org.apache.qpid.jms.JmsConnectionFactory">
<property name="remoteURI" value="amqps://esesslxjks.se:9443" />
</bean>
</property>
</bean>
У меня нет твоего сценария использования твоего весеннего верблюда, как в твоем примере. Но я столкнулся с тем же самым точным следом стека, который вы имели во время одного из моих модульных тестов. Я обнаружил, что после того, как я явно попытаюсь закрыть свой экземпляр брокера, мой клиент qpid jms также попытается закрыть соединение. Таким образом, выбрасывая это исключение. Я знаю, что мой вариант использования совсем не похож на ваш, но я надеюсь, что это немного поможет. Удачи.