Publishing causes Initialization of all declared exchanges
I have been building a very contrived example using Spring-AMQP and Spring-Integration-AMQP and have noticed that whenever declaring my exchanges/queues/binding in the application using the "rabbit" namespace I am seeing a huge decrease in message throughput. I cranked up the logging level and can see that my exchanges/queues/bindings are being declared on every message publish. I didn't see anything about this in JIRA or in the forum so I thought I would point it out.
Example:
Code:
<bean id="amqpConnectionFactory" class="org.springframework.amqp.rabbit.connection.CachingConnectionFactory">
<constructor-arg value="localhost"/>
<property name="username" value="guest"/>
<property name="password" value="guest"/>
</bean>
<amqp:inbound-channel-adapter channel="amqpLoopIn" queue-names="loopIn" connection-factory="amqpConnectionFactory"/>
<integration:channel id="amqpLoopIn" />
<amqp:outbound-channel-adapter channel="amqpLoopIn" exchange-name="loop" amqp-template="amqpTemplate"/>
<bean id="amqpTemplate" class="org.springframework.amqp.rabbit.core.RabbitTemplate">
<property name="connectionFactory" ref="amqpConnectionFactory" />
</bean>
<rabbit:admin connection-factory="amqpConnectionFactory"/>
<rabbit:queue name="loopIn" durable="true"/>
<rabbit:fanout-exchange name="loop" durable="true">
<rabbit:bindings>
<rabbit:binding queue="loopIn"/>
</rabbit:bindings>
</rabbit:fanout-exchange>
Logs:
Code:
DEBUG 04/26/2011 10:38:20 org.springframework.amqp.rabbit.connection.CachingConnectionFactory - Returning cached Channel: AMQChannel(amqp://guest@localhost:5672/,11)
DEBUG 04/26/2011 10:38:20 org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer - Waiting for message from consumer.
DEBUG 04/26/2011 10:38:20 org.springframework.amqp.rabbit.listener.BlockingQueueConsumer - Retrieving delivery for Consumer: tag=[amq.ctag-yntvt7Wdxp+TJoMra6gJmw==], channel=Cached Rabbit Channel: AMQChannel(amqp://guest@localhost:5672/,7), acknowledgeMode=AUTO local queue size=0
DEBUG 04/26/2011 10:38:20 org.springframework.amqp.rabbit.listener.BlockingQueueConsumer - Storing delivery for Consumer: tag=[amq.ctag-lw67hNkx+SpzqI4AVy8Hxw==], channel=Cached Rabbit Channel: AMQChannel(amqp://guest@localhost:5672/,6), acknowledgeMode=AUTO local queue size=0
DEBUG 04/26/2011 10:38:20 org.springframework.amqp.rabbit.connection.CachingConnectionFactory - Found cached Rabbit Channel
DEBUG 04/26/2011 10:38:20 org.springframework.amqp.rabbit.core.RabbitTemplate - Executing callback on RabbitMQ Channel: Cached Rabbit Channel: AMQChannel(amqp://guest@localhost:5672/,12)
DEBUG 04/26/2011 10:38:20 org.springframework.amqp.rabbit.core.RabbitAdmin - declaring Exchange 'loop'
DEBUG 04/26/2011 10:38:20 org.springframework.amqp.rabbit.listener.BlockingQueueConsumer - Received message: (Body:'Test Test Test'; ID:null; Content:text/plain; Headers:{}; Exchange:loop; RoutingKey:; Reply:null; DeliveryMode:PERSISTENT; DeliveryTag:580)
DEBUG 04/26/2011 10:38:20 org.springframework.amqp.rabbit.core.RabbitAdmin - declaring Queue 'loopIn'
DEBUG 04/26/2011 10:38:20 org.springframework.amqp.rabbit.core.RabbitAdmin - Binding queue [loopIn] to exchange [loop] with routing key []
DEBUG 04/26/2011 10:38:20 org.springframework.amqp.rabbit.connection.CachingConnectionFactory - Returning cached Channel: AMQChannel(amqp://guest@localhost:5672/,12)
DEBUG 04/26/2011 10:38:20 org.springframework.amqp.rabbit.core.RabbitAdmin - Declarations finished
DEBUG 04/26/2011 10:38:20 org.springframework.amqp.rabbit.connection.CachingConnectionFactory - Found cached Rabbit Channel
DEBUG 04/26/2011 10:38:20 org.springframework.amqp.rabbit.core.RabbitTemplate - Executing callback on RabbitMQ Channel: Cached Rabbit Channel: AMQChannel(amqp://guest@localhost:5672/,11)
DEBUG 04/26/2011 10:38:20 org.springframework.amqp.rabbit.core.RabbitTemplate - Publishing message on exchange [loop], routingKey = []
DEBUG 04/26/2011 10:38:20 org.springframework.amqp.rabbit.core.RabbitAdmin - Initializing declarations
DEBUG 04/26/2011 10:38:20 org.springframework.amqp.rabbit.connection.CachingConnectionFactory - Returning cached Channel: AMQChannel(amqp://guest@localhost:5672/,11)
DEBUG 04/26/2011 10:38:20 org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer - Waiting for message from consumer.