【问题标题】:Apache Camel, send message when server starts and stopsApache Camel,在服务器启动和停止时发送消息
【发布时间】:2013-11-09 02:26:16
【问题描述】:

我有一个使用 JAVA DSL 的简单骆驼 MINA 服务器,我的运行方式与此处记录的示例一样:

当前,此服务器从队列接收报告,更新它们,然后将它们发送到下一个服务器。很简单的代码:

public class MyApp_B {

    private Main main;

    public static void main(String... args) throws Exception {
        MyApp_B loadbalancer = new MyApp_B();
        loadbalancer.boot();
    }

    public void boot() throws Exception {
        main = new Main();
        main.enableHangupSupport();

        main.addRouteBuilder(
                new RouteBuilder(){
                    @Override
                    public void configure() throws Exception {
                        from("mina:tcp://localhost:9991")
                        .setHeader("minaServer", constant("localhost:9991"))
                        .beanRef("service.Reporting", "updateReport")
                        .to("direct:messageSender1");

                        from("direct:messageSender1")
                        .to("mina:tcp://localhost:9993")
                        .log("${body}");
                    }
                }
        );

        System.out.println("Starting Camel MyApp_B. Use ctrl + c to terminate the JVM.\n");
        main.run();
    }
}

现在,我想知道是否可以做两件事:

  1. 让该服务器在它开始运行时向主服务器发送一条消息。这是一条带有此服务器信息的“Hello”消息。
  2. 告诉主服务器在我按下 CTRL+C 或执行其他操作时将其忘记。

我也读过这个:

从技术上讲,通过重写 doStart 和 doStop 方法,我应该得到预期的行为,但是,这些方法(特别是 doStop 方法)根本不起作用。

有没有办法做到这一点?如果是怎么办?如果没有,我有什么选择?

提前致谢,佩德罗。

【问题讨论】:

    标签: java apache-camel


    【解决方案1】:

    代码确实可以正常工作。问题是我的 IDE,Eclipse。当使用 Terminate 按钮时,Eclipse 只是简单地终止进程,而不是向它发送 CTRL+C 信号。此外,Eclipse 似乎无法将 CTRL+C 信号发送到在其控制台上运行的进程。

    我还在 Eclipse 的官方论坛上创建了一个讨论:

    也许有一天它会帮助遇到和我类似情况的人。

    【讨论】:

    • 很高兴知道这个问题。这样的事情会让你发疯。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-30
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-30
    相关资源
    最近更新 更多