gpt4 book ai didi

java - RabbitMQ Spring 模板在发送 15 条消息后抛出尝试使用关闭 channel

转载 作者:行者123 更新时间:2023-11-30 03:58:09 25 4
gpt4 key购买 nike

我是第一次尝试 RabbitMQ,并决定使用 Spring AMQP 包装器。我打算首先测试写入性能并设置发送者到队列:

Spring 设置:

<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

怎么会这样?

最佳答案

看看你的兔子配置。

您的 amqp 模板“myTemplate”是使用交换“myQueue”设置的..可以吗?是否有任何名为“myQueue”的交换器,或者这是您的队列名称?如果没有,请创建一个交换,然后将该路由键设置为您所需的队列。

如果您设置了无效的 Exchange,则不会为您的模板打开/获取任何 channel ,从而导致 AlreadyClosedException。

关于java - RabbitMQ Spring 模板在发送 15 条消息后抛出尝试使用关闭 channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22597665/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com