首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >apache-camel节流阀不像预期的那样工作。

apache-camel节流阀不像预期的那样工作。
EN

Stack Overflow用户
提问于 2014-09-01 15:12:22
回答 1查看 531关注 0票数 1

Apache-Camel: 2.12.2,activemq: 5.7

我们注意到,在下面的路线中,节流对于前100个交易所来说是很好的。在此之后,它不是每秒发送100个交换,而是只发送一个交换每秒。现在,如果我们设置timePeriodMillis=100,它似乎运行良好。请注意,我们同时发送了500张交易所。

代码语言:javascript
复制
<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>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-01 15:22:22

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

代码语言:javascript
复制
protected synchronized TimeSlot nextSlot() {
    if (slot == null) {
        slot = new TimeSlot();
    }
    if (slot.isFull() || !slot.isActive()) {
        slot = slot.next();
    }
    slot.assign();
    return slot;
}

请参阅这里

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25608785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档