Обеспечить заказанное отключение связок в карафе - PullRequest
0 голосов
/ 04 сентября 2018

Для простого варианта использования у меня есть два пакета в Карафе:

  1. Bundle-Shared-библиотека
  2. Bundle-My-реализации -> зависит от (1) Bundle-Shared-Library, упомянутой в чертеже через атрибут depends-on компонента

Шаги, которым я следую:

  1. Комплект нагрузки (1)
  2. Комплект нагрузки (2)
  3. Отключение карафа

Очевидно, что (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. Для этого комплекта нет файла чертежа.

Из-за организационных проблем в некоторых местах я использовал фиктивные имена.

...