【问题标题】:why does my main method keeps running?为什么我的主要方法一直在运行?
【发布时间】:2013-07-01 17:57:40
【问题描述】:

我正在做一个 spring-integration + rabbitMQ 应用程序。从一个主类中,我调用了一个网关,该网关将我的消息发送到rabbitmq,它运行良好,但由于某些奇怪的原因,我的主要方法继续运行,起初我认为我可能在我的spring-context中留下了一个轮询器,但那并非如此。 这是我的代码:

public final class Main {

    private static final Logger LOGGER = Logger.getLogger(Main.class);

    @Autowired
    static
    ChatGateway chatGateway;

    private Main() { }

    /**
     * Load the Spring Integration Application Context
     *
     * @param args - command line arguments
     */
    public static void main(String args[]) {
        Mensaje mensaje = new Mensaje();
        mensaje.setClienteID("clienteXXX");

        ClassPathXmlApplicationContext ctx = new 
        ClassPathXmlApplicationContext("classpath:META-INF/spring/integration/spring-integration-context.xml");
        chatGateway = (ChatGateway) ctx.getBean("chatGateway");

        chatGateway.enviarAlarma(mensaje);

    }
}

这是我的春季背景:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:int="http://www.springframework.org/schema/integration"
    xmlns:int-amqp="http://www.springframework.org/schema/integration/amqp"
    xmlns:rabbit="http://www.springframework.org/schema/rabbit"
    xmlns:int-stream="http://www.springframework.org/schema/integration/stream"
    xsi:schemaLocation="http://www.springframework.org/schema/integration/amqp http://www.springframework.org/schema/integration/amqp/spring-integration-amqp.xsd
        http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd
        http://www.springframework.org/schema/integration/stream http://www.springframework.org/schema/integration/stream/spring-integration-stream.xsd
        http://www.springframework.org/schema/rabbit http://www.springframework.org/schema/rabbit/spring-rabbit.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- From STDIN To RabbitMQ 

    <int-stream:stdin-channel-adapter id="consoleIn"
        channel="toRabbit">
        <int:poller fixed-delay="1000" max-messages-per-poll="1" />
    </int-stream:stdin-channel-adapter>
    -->

    <int:channel id="toRabbit" />

    <int:gateway id="chatGateway"
        service-interface="com.praxis.chat.gateway.ChatGateway"
        default-request-channel="toRabbit" />

    <int-amqp:outbound-channel-adapter
        channel="toRabbit" amqp-template="amqpTemplate" exchange-name="si.test.exchange"
        routing-key="si.test.binding" />


    <!-- Infrastructure -->

    <rabbit:connection-factory id="connectionFactory" />

    <rabbit:template id="amqpTemplate" connection-factory="connectionFactory" />

    <rabbit:admin connection-factory="connectionFactory" />

    <rabbit:queue name="si.test.queue" />

    <rabbit:direct-exchange name="si.test.exchange">
        <rabbit:bindings>
            <rabbit:binding queue="si.test.queue" key="si.test.binding" />
        </rabbit:bindings>
    </rabbit:direct-exchange>

</beans>

为什么我的 main 方法在发送消息后仍继续运行? 提前致谢。

【问题讨论】:

    标签: java rabbitmq spring-integration


    【解决方案1】:

    它会继续,因为它没有被告知要结束。

    你可以使用:

    System.exit(0);

    return;

    main(String[] args)的末尾

    【讨论】:

    • 这似乎行得通。我坚持认为除非有无限循环,否则 main 方法不会完成。
    • 其实问题是RabbitMQ客户端运行了一个非守护线程当你准备关闭你的应用程序时,你可以使用ctx.destroy(),它将在连接工厂调用destroy(),关闭连接并停止连接的线程。
    猜你喜欢
    • 2011-05-31
    • 2022-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多