【问题标题】:apache-camel throttle does not work as expectedapache-camel 油门无法按预期工作
【发布时间】:2014-10-25 20:33:31
【问题描述】:

Apache-Camel:2.12.2,activemq:5.7

我们注意到,在以下路由中,前 100 个交换的限制工作正常。之后,它不是每秒发送 100 次交换,而是每秒仅发送 1 次交换。现在如果我们设置 timePeriodMillis=100 它似乎工作正常。请注意,我们同时发送 500 个交换。

<bean id="myProject" class="org.apache.activemq.camel.component.ActiveMQComponent">
    <property name="connectionFactory" ref="myProjectPooledConnectionFactory" />
    <property name="preserveMessageQos" value="true" />
    <property name="transacted" value="false" />
    <property name="maxConcurrentConsumers" value="10" />
</bean>

<bean id="myProjectPooledConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory" destroy-method="stop" init-method="start">
    <property name="connectionFactory" ref="myProjectAmqConnectionFactory" />
    <property name="maxConnections" value="20" />
    <property name="idleTimeout" value="0" />
</bean>

<bean id="myProjectAmqConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory" >
    <property name="brokerURL" value="${myProject.broker.url}" />
    <property name="copyMessageOnSend" value="false" />
    <property name="useAsyncSend" value="true" />
</bean>


<!-- Local ActiveMQ Configuration -->
<bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent">
    <property name="connectionFactory" ref="pooledConnectionFactory"/>
    <property name="transacted" value="false"/>
    <property name="maxConcurrentConsumers" value="500"/>
</bean>

<bean id="pooledConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory" destroy-method="stop" init-method="start">
    <property name="connectionFactory" ref="amqConnectionFactory" />
    <property name="maxConnections" value="1" />
    <property name="idleTimeout" value="0" />
</bean>

<bean id="amqConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory" >
    <property name="brokerURL" value="${broker.url}" />
    <property name="copyMessageOnSend" value="false" />
    <property name="useAsyncSend" value="true" />
</bean>

<route id="myProject.outbound.traffic" errorHandlerRef="error.handler.myProject">
    <from uri="{{queue.myProject.mint.in}}{{queue.myProject.mint.in.args}}"/>
    <throttle timePeriodMillis="1000" >
            <constant>100</constant>
            <process ref="myProjectProcessor" />
            <inOnly uri="myProject:{{queue.myProject}}">
        <log logName="myProject.myProjectProcessor" loggingLevel="INFO" message="this is a test message" />
    </throttle>
</route>

【问题讨论】:

    标签: java spring apache-camel activemq throttling


    【解决方案1】:

    我的一位同事找到了答案。这是骆驼 2.12.2 中的一个错误,它似乎已在 2.12.3 中解决。它与将交换分配给插槽的方式有关。与其检查插槽是否处于活动状态,不如先检查插槽是否已通过。

    protected synchronized TimeSlot nextSlot() {
        if (slot == null) {
            slot = new TimeSlot();
        }
        if (slot.isFull() || !slot.isActive()) {
            slot = slot.next();
        }
        slot.assign();
        return slot;
    }
    

    here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-19
      • 1970-01-01
      • 2013-12-23
      相关资源
      最近更新 更多