Apache camel Apache Camel路由到接口(或者动态添加侦听器)

Apache camel Apache Camel路由到接口(或者动态添加侦听器),apache-camel,Apache Camel,我正在研究一个简单的用例,它允许客户端动态注册来自JMS端点的事件。我当前的实现如下所示: ... public void addListener(Event event, Listener listener){ try { camelContext.addRoutes(new RouteBuilder() { @Override public void configure() throws Exception {

我正在研究一个简单的用例,它允许客户端动态注册来自JMS端点的事件。我当前的实现如下所示:

...
public void addListener(Event event, Listener listener){
    try {
        camelContext.addRoutes(new RouteBuilder() {
            @Override
            public void configure() throws Exception {
                from(event.from()).bean(listener);
            }
        });
    } catch (Exception exception) {
        exception.printStackTrace();
    }

}
...
上面的event.from()将标识从中消费消息的端点(“activemq:topic:market.stocks.update.ibm”),侦听器将是侦听器接口的一个实现

我设想了一个典型的调用:

notifications.addListener(updateEvent, new Listener(){
    void listen(){
        System.out.println("Hey! Something got updated");
    }
});
当然,除此之外,上述任何一项都不起作用,因为camel路由希望有一个具体的bean作为接收者,因此camel上下文无法启动


动态添加bean端点的推荐方法是什么?

在camel用户论坛上回答


嗯,这听起来像是你的另一个问题。。。(见我的评论)这有点不同。我希望在这里实现经典的观察者模式,但回调将由Camel执行。这将使我不必保留关于谁订阅了什么事件(在哪个队列上使用什么选择器等)的信息。在一些次要方面也是不同的:使用者是系统中的其他类,在这种情况下,我不关心在重启之间保存路由。这是关于让感兴趣的侦听器(可能是系统中的其他类)知道已发生的状态更改。很公平……感谢澄清,这对我来说似乎很好……这一定是侦听器类的问题,因为它需要接受可以从JMS消息对象转换为的参数类型(字符串等)谢谢。我在camel用户论坛上发布了这篇文章,发现我配置packageScan的方式有问题。