有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java兔子连接无法关闭

我有一个带有SpringRabbit1.1.4(和Spring3.1.2)的批处理(java应用程序),用于连接到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;
}

我使用java命令在脚本shell中启动批处理。它运行良好,所有java代码都可以执行,但linux进程保持活动状态,因为与rabbit的连接保持活动状态。在rabbit manager UI中,若我关闭连接,linux进程将终止

我做错了什么?谢谢!


共 (2) 个答案

  1. # 1 楼答案

    作业完成后,您可以关闭连接:

    @Autowired
    CachingConnectionFactory cachingConnectionFactory;
    
    
    ...
    
        cachingConnectionFactory.resetConnection();
    

    context.getBean(CachingConnectionFactory.class).resetConnection();
    

    或者在作业完成时简单地关闭应用程序上下文:

    context.close();
    

    其中任何一个都将关闭连接

  2. # 2 楼答案

    您需要拨打:

    cachingConnectionFactory.destroy();