Spring集成通道消息计数

时间:2013-02-25 03:28:03

标签: spring integration

我有2个问题。他们在这里:

  1. 有没有办法确定等待的邮件数量 在弹簧集成通道处理的数量 客户随着时间的推移不断增加?

  2. 在应用程序上下文中,我希望能够定义x实例 bean y,x和y,都以编程方式从通道p消耗 根据负荷增加或减少消费者。

  3. 在Spring 2gx中有一个示例,但它使用rabbitmq来确定负载。

1 个答案:

答案 0 :(得分:0)

  • 对于1),Spring Integration通道就像任何其他bean一样。假设您正在使用标准的可轮询频道,您可以按名称自动加载它,然后获取等待的消息数量:

http://docs.spring.io/spring-integration/api/org/springframework/integration/channel/QueueChannel.html#getQueueSize()

如果需要,您也可以通过JMX对此进行反思。

  • For 2)...要做到这一点,你需要在对象池之上使用AOP代理,然后将代理连接到(我假设的是)Service Activator。可以使用PropertyPlaceholderConfigurer将这些属性外部化。所以,作为一个例子:

    <bean id="propertyPlaceholder" 
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="systemPropertiesMode" value="2" />
        <property name="locations" value="classpath:my_config_params.properties" />
    </bean>
    
    <bean id="myBusinessObjectImpl" class="com.mycompany.whatever.impl.MyServiceImpl"
          scope="prototype" autowire-candidate="false" />
    
    <bean id="myBusinessObjPool" class="org.springframework.aop.target.CommonsPoolTargetSource">
        <property name="targetBeanName" value="myBusinessObjectImpl" />
        <!-- THIS IS THE KEY.  myconfig.params.poolsize is the name of the property in the my_config_params.properties above. -->
        <property name="maxSize" value="${myconfig.params.poolsize}" /> 
    </bean>
    
    <bean id="myBusinessObject" class="org.springframework.aop.framework.ProxyFactoryBean">
        <property name="targetSource" ref="myBusinessObjPool" />
    </bean>
    
    <int:channel id="myInputChannel">
        <int:queue size="500" />
    </int:channel>
    
    <int:service-activator inputChannel="myInputChannel" ref="myBusinessObject" method="processMessages">
        <int:poller max-messages-per-poll="10" fixed-rate="5000"/>
    </int:service>
    

这也允许您使Service Activator成为有状态的。 对象池功能的强制性链接:

http://docs.spring.io/spring/docs/3.0.x/spring-framework-reference/html/aop-api.html#aop-ts-pool