Кролик соединение не закроется

У меня есть пакет (java-приложение) с spring-rabbit 1.1.4 (и spring 3.1.2) для подключения к rabbit (consumer), как это :

<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;
}

Я запускаю пакет в script shell с помощью команды java. Он хорошо работает, и весь код java выполняется, но процесс linux продолжает жить, потому что связь с rabbit продолжает жить. В интерфейсе rabbit manager при закрытии соединения процесс linux завершается.

Что я делаю не так ? Спасибо !

1 ответ

  1. По завершении задания можно закрыть соединение:

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

    или

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

    или просто закройте контекст приложения по завершении задания:

    context.close();
    

    Любой из них отключит соединение.