xmlspringspring-rabbit

How to specify another spring xml bean id as reference in value tag


<bean id="msg.throttle.time" class="java.lang.Long"
    factory-method="getMsgThrottleTime"
    factory-bean="ThrottleService">
</bean>

<rabbit:queue name="ws.connection.disconnect.sleep" durable="true">
    <rabbit:queue-arguments>
        <entry key="x-message-ttl" >
            <value type="java.lang.Long" >msg.throttle.time</value>
        </entry>
        <entry key="x-dead-letter-exchange" value="ws.connection.disconnect.x"/>
        <entry key="x-queue-type" value="quorum" />
    </rabbit:queue-arguments>
</rabbit:queue>

So msg.throttle.time is the bean id I want to pass as the value of x-message-ttl entry key to create a rabbitmq queue. How can I do that?


Solution

  • To reference another bean inside <rabbit:queue-arguments>, you should use <ref> instead of <value>, because <value> treats the content as a literal string, not a bean reference:

    <bean id="msg.throttle.time" class="java.lang.Long"
          factory-method="getMsgThrottleTime"
          factory-bean="ThrottleService" />
    
    <rabbit:queue name="ws.connection.disconnect.sleep" durable="true">
        <rabbit:queue-arguments>
            <entry key="x-message-ttl">
                <ref bean="msg.throttle.time" />
            </entry>
            <entry key="x-dead-letter-exchange" value="ws.connection.disconnect.x"/>
            <entry key="x-queue-type" value="quorum" />
        </rabbit:queue-arguments>
    </rabbit:queue>