私は初めて RabbitMQ を試しており、Spring AMQP ラッパーを使用することにしました。最初に書き込みパフォーマンスをテストし、送信者をキューに設定することを計画していました。
春のセットアップ:
<rabbit:connection-factory id="connectionFactory" host="localhost"
username="guest" password="guest" />
<rabbit:admin connection-factory="connectionFactory" />
<rabbit:template id="myTemplate" connection-factory="connectionFactory"
exchange="myQueue"/>
送信者メイン:
ApplicationContext context = new ClassPathXmlApplicationContext(
"th/rabbit-sender-context.xml");
AmqpTemplate aTemplate = (AmqpTemplate) context.getBean("myTemplate");
int total = 1000;
for (int i = 0; i < total; i++) {
System.out.println(i);
aTemplate.convertAndSend("my.routingkey.1", "#"+i+" on "+new Date());
}
ただし、15 個のメッセージを送信した後、クライアントは次の例外で失敗します。
Caused by: com.rabbitmq.client.AlreadyClosedException: clean connection shutdown; reason: Attempt to use closed channel
at com.rabbitmq.client.impl.AMQChannel.ensureIsOpen(AMQChannel.java:190)
at com.rabbitmq.client.impl.AMQChannel.transmit(AMQChannel.java:291)
at com.rabbitmq.client.impl.ChannelN.basicPublish(ChannelN.java:636)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.springframework.amqp.rabbit.connection.CachingConnectionFactory$CachedChannelInvocationHandler.invoke(CachingConnectionFactory.java:365)
at com.sun.proxy.$Proxy4.basicPublish(Unknown Source)
at org.springframework.amqp.rabbit.core.RabbitTemplate.doSend(RabbitTemplate.java:675)
at org.springframework.amqp.rabbit.core.RabbitTemplate$1.doInRabbit(RabbitTemplate.java:351)
at org.springframework.amqp.rabbit.core.RabbitTemplate.execute(RabbitTemplate.java:627)
... 9 more
どうして?