兔子连接不会关闭
Rabbit connection won't close
我有一个批处理(java 应用程序)与 spring-rabbit 1.1.4(和 spring 3.1.2)连接到 rabbit(消费者),像这样:
<bean class="org.springframework.amqp.support.converter.JsonMessageConverter" name="jsonMessageConverter">
<property name="classMapper">
<bean class="com.mydomain.amqp.mapper.CustomClassMapper"/>
</property>
</bean>
<rabbit:connection-factory id="connectionFactory"
host="${rabbitmq.host}"
port="${rabbitmq.port}"
virtual-host="${rabbitmq.vhost}"
username="${rabbitmq.username}"
password="${rabbitmq.password}"
/>
<rabbit:template id="amqpTemplate" connection-factory="connectionFactory" message-converter="jsonMessageConverter" />
在应用中,我使用这样的兔子模板:
@Value("${rabbitmq.exchange.name}")
private String exchange;
@Value("${rabbitmq.routing.key}")
private String routingKey;
@Autowired
private RabbitTemplate amqpTemplate;
@Override
public boolean sendMessage(BussinessMessage message) {
amqpTemplate.convertAndSend(exchange, routingKey, message);
return true;
}
我在脚本 shell 中使用 java 命令开始批处理。它运行良好,所有 java 代码都执行,但是 linux 进程保持活动状态,因为与 rabbit 的连接保持活动状态。在兔子管理器 UI 中,如果我关闭连接,linux 进程终止。
我做错了什么?谢谢!
当您的工作完成后,您可以关闭连接:
@Autowired
CachingConnectionFactory cachingConnectionFactory;
...
cachingConnectionFactory.resetConnection();
或
context.getBean(CachingConnectionFactory.class).resetConnection();
或者在作业完成时简单地关闭应用程序上下文:
context.close();
其中任何一个都会关闭连接。
您需要致电:
cachingConnectionFactory.destroy();
我有一个批处理(java 应用程序)与 spring-rabbit 1.1.4(和 spring 3.1.2)连接到 rabbit(消费者),像这样:
<bean class="org.springframework.amqp.support.converter.JsonMessageConverter" name="jsonMessageConverter">
<property name="classMapper">
<bean class="com.mydomain.amqp.mapper.CustomClassMapper"/>
</property>
</bean>
<rabbit:connection-factory id="connectionFactory"
host="${rabbitmq.host}"
port="${rabbitmq.port}"
virtual-host="${rabbitmq.vhost}"
username="${rabbitmq.username}"
password="${rabbitmq.password}"
/>
<rabbit:template id="amqpTemplate" connection-factory="connectionFactory" message-converter="jsonMessageConverter" />
在应用中,我使用这样的兔子模板:
@Value("${rabbitmq.exchange.name}")
private String exchange;
@Value("${rabbitmq.routing.key}")
private String routingKey;
@Autowired
private RabbitTemplate amqpTemplate;
@Override
public boolean sendMessage(BussinessMessage message) {
amqpTemplate.convertAndSend(exchange, routingKey, message);
return true;
}
我在脚本 shell 中使用 java 命令开始批处理。它运行良好,所有 java 代码都执行,但是 linux 进程保持活动状态,因为与 rabbit 的连接保持活动状态。在兔子管理器 UI 中,如果我关闭连接,linux 进程终止。
我做错了什么?谢谢!
当您的工作完成后,您可以关闭连接:
@Autowired
CachingConnectionFactory cachingConnectionFactory;
...
cachingConnectionFactory.resetConnection();
或
context.getBean(CachingConnectionFactory.class).resetConnection();
或者在作业完成时简单地关闭应用程序上下文:
context.close();
其中任何一个都会关闭连接。
您需要致电:
cachingConnectionFactory.destroy();