Rabbit连接不会关闭

时间:2016-05-26 12:49:56

标签: java spring-rabbit

我有一个批量(java应用程序)与spring-rabbit 1.1.4(和春季3.1.2)连接到兔子(消费者),像这样:

<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 manager UI中,如果我关闭连接,linux进程终止。

我做错了什么?谢谢!

2 个答案:

答案 0 :(得分:0)

当您的工作完成后,您可以关闭连接:

@Autowired
CachingConnectionFactory cachingConnectionFactory;


...

    cachingConnectionFactory.resetConnection();

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

或者只是在作业完成时关闭应用程序上下文:

context.close();

其中任何一个都会关闭连接。

答案 1 :(得分:0)

您需要致电:

0000000000000000000000000000000000000000010000000000101011110000