Для простого варианта использования у меня есть два пакета в Карафе:
- Bundle-Shared-библиотека
- Bundle-My-реализации -> зависит от (1) Bundle-Shared-Library, упомянутой в чертеже через атрибут
depends-on
компонента
Шаги, которым я следую:
- Комплект нагрузки (1)
- Комплект нагрузки (2)
- Отключение карафа
Очевидно, что (2) зависит от (1). При завершении работы Karaf Bundle (1) удаляется первым, что приводит к потере сообщений в полете, поскольку он не может найти свою зависимость и не может обрабатывать дальше.
Я попытался установить начальный уровень (1) как выше, так и ниже, чем у комплекта (2). Это не помогло.
Также я попытался установить org.apache.aries.blueprint.preemptiveShutdown=false
в etc/config.properties
. Это тоже не помогло.
Я что-то здесь упускаю?
- РЕДАКТИРОВАТЬ 1 -
Посмотрев немного здесь и там, я обнаружил, что мы можем установить пользовательское значение для тайм-аута в DefaultShutdownStrategy. Итак, в качестве обходного пути я сделал следующее:
<bean id="shutdownStrategy" class="org.apache.camel.impl.DefaultShutdownStrategy">
<property name="timeout" value="1" />
</bean>
Я понимаю, что это не чистый и оптимальный способ сделать . В настоящее время это как-то помогает мне терять много сообщений в полете.
Но любые предложения или отзывы были бы хорошими.
- РЕДАКТИРОВАТЬ 2 - Добавление файла чертежа комплекта 1
<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.3.0"
xmlns:camel="http://camel.apache.org/schema/blueprint"
xsi:schemaLocation="
http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
http://camel.apache.org/schema/blueprint http://camel.apache.org/schema/blueprint/camel-blueprint.xsd
http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.3.0 http://aries.apache.org/schemas/blueprint-cm/blueprint-cm-1.3.0.xsd
">
<!-- persistent-id for shared context -->
<cm:property-placeholder persistent-id="xxx.shared" update-strategy="none" >
<cm:default-properties>
...
</cm:default-properties>
</cm:property-placeholder>
<!--jms broker connection-->
<reference id="jmsProducerConnectionFactory" interface="javax.jms.ConnectionFactory" filter="(osgi.jndi.service.name=jms/xxx.producer)" availability="mandatory" />
<bean id="xxx-producer" class="org.apache.camel.component.jms.JmsComponent">
<property name="connectionFactory" ref="jmsProducerConnectionFactory"/>
</bean>
<!-- Source DB Reference -->
<reference id="XDataSource" interface="javax.sql.DataSource" filter="(osgi.jndi.service.name=xxx-datasource)" availability="mandatory"/>
<!-- Datawarehouse DB Reference -->
<reference id="dw" interface="javax.sql.DataSource" filter="(osgi.jndi.service.name=xdb-datasource)" availability="mandatory"/>
<bean id="prs" class="org.apache.camel.component.sql.SqlComponent">
<property name="dataSource" ref="XDataSource"/>
</bean>
<bean id="timestamp" class="org.library.shared.TimestampImplementation" destroy-method="synchronize" depends-on="dw">
<argument index="0" ref="dw" />
<argument index="2" value="Orders" />
</bean>
<bean id="shutdownStrategy" class="org.apache.camel.impl.DefaultShutdownStrategy">
<property name="timeout" value="1" />
</bean>
<camelContext id="camel-context" xmlns="http://camel.apache.org/schema/blueprint" depends-on="timestamp">
<packageScan>
<package>org.xyz.orders.routing</package>
</packageScan>
</camelContext>
</blueprint>
Другой пакет - это просто набор из нескольких классов (разделяемая библиотека), которые я включил в качестве зависимости maven. Для этого комплекта нет файла чертежа.
Из-за организационных проблем в некоторых местах я использовал фиктивные имена.