2017-05-26 7 views
0

現在、私はリスナーの最大数を動的に変更する必要があるため、Spring AMQP Listener ContainerをBeanに渡そうとしています(ただし、メモリの制限があります。リスナーコンテナは私を箱から出してくれます)。Spring AMQP - BeanにListenerContainerを渡します

私の考えは、1秒おきに呼び出されるmanageListenerContainer Beanを作成し、それに応じてconcurrentConsumers属性を変更することでした。

しかし、id属性がrabbit:listener-containerのいくつかのバージョンから削除されているので、私は自分のbeanにlistenerContainerを渡す方法を理解できません。

これは私のリスナーのコンテナです:

<rabbit:listener-container connection-factory="connectionFactory" 
    error-handler="exHandler"> 
    <rabbit:listener ref="foo" method="listen" queue-names="myQueue" /> 
</rabbit:listener-container> 

そして、私はそれを注入したい豆:

<bean id="manageListenerContainer" class="background.ManageListenerContainer"> 
    <property name="listenerContainer" ref="listenerContainer"></property> 
</bean> 

私はこの

<bean class="org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer" id="listenerContainer"> 
    <constructor-arg ref="connectionFactory" /> 
</bean> 
のような新しいlistenerContainerをインスタンス化することができ考え出し

しかし、これは接続自体と同じオブジェクトではありません。

誰でも私にいくつかのポインタを教えてもらえますか?

オッリ

答えて

0

これはトリックでした:

<!-- TODO: Find a more awesome way to get the parameters. --> 
<rabbit:connection-factory id="connectionFactory" 
    username="#{ T(String).valueOf(systemEnvironment['CLOUDAMQP_URL']).split(&quot;//&quot;)[1].split(&quot;:&quot;)[0]}" 
    password="#{ T(String).valueOf(systemEnvironment['CLOUDAMQP_URL']).split(&quot;:&quot;)[2].split(&quot;@&quot;)[0]}" 
     host="#{ T(String).valueOf(systemEnvironment['CLOUDAMQP_URL']).split(&quot;@&quot;)[1].split(&quot;/&quot;)[0]}" 
virtual-host="#{ T(String).valueOf(systemEnvironment['CLOUDAMQP_URL']).split(&quot;@&quot;)[1].split(&quot;/&quot;)[1]}"/> 

<rabbit:template id="amqpTemplate" connection-factory="connectionFactory" /> 

<rabbit:admin connection-factory="connectionFactory" /> 

<rabbit:queue name="myQueue" /> 

<bean id="foo" class="Foo" /> 
<bean id="exHandler" class="BackgroundRejectingErrorHandler" /> 

<bean class="org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter" id="messageListenerAdapter"> 
    <constructor-arg ref="foo" /> 
</bean> 

<bean class="org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer" id="listenerContainer"> 
    <property name="connectionFactory" ref="connectionFactory" /> 
    <property name="queueNames" value="myQueue" /> 
    <property name="messageListener" ref="messageListenerAdapter" /> 
    <property name="concurrentConsumers" value="5" /> 
    <property name="maxConcurrentConsumers" value="150" /> 
    <property name="startConsumerMinInterval" value="10" /> 
    <property name="stopConsumerMinInterval" value="10" /> 
    <property name="errorHandler" ref="exHandler" /> 
</bean> 

<bean id="manageListenerContainer" class="background.ManageListenerContainer"> 
    <property name="listenerContainer" ref="listenerContainer"></property> 
</bean> 
1

rabbit:listenerタグを入れ子にその目的のためにidを持っています。

同封のlistener-containerは、共通プロパティの論理表現です。実際のListenerContainerは、実際にはrabbit:listenerに基づいています。

関連する問題