当前位置: 首页 > 知识库问答 >
问题:

将Spring bean传递给Camel组件

怀飞掣
2023-03-14

我有一个类型为FooComponent的自定义组件,它通过以下行添加到路由中:

from("foo://bar?args=values&etc")
        .bean(DownstreamComponent.class)
        ...

创建一个终结点和消费者(类型为FOFOCER),该终结点和消费者反过来会发出消息,这些消息将到达DownStreComponent和管道的其余部分。

为了进行监控,我需要FooComponent消费者调用一个非驼峰对象上的方法,我正在创建一个Springbean。Camel管道对性能非常敏感,因此我无法将FooComponent分成两半,并将监视器调用作为Camel组件插入它们之间(我的首选解决方案,因为FooComponent不必真正了解监视器)。我不愿意将方法调用变成驼峰消息,稍后将由管道中的监控组件拾取,因为管道过滤稍后会变得复杂,我不想过度干预。

FooConsumer的某个地方,我有:

// in the class
@Autowired
Monitor monitor;

// inside the consumer's run method
monitor.noticeSomething();

问题是监视器永远不会被设置为监视器bean,监视器bean是在应用程序的其余部分中创建的。据我所知,这是因为对Spring来说,Fef消费者本身是不可见的——这种类型的对象通常是在FefComponent中创建的。

那么,如何让efComponent找到它需要使用的Monitor实例呢?

  • 创建路线时,我可以传递它吗?这似乎很棘手,因为这个定义是一个虚假的URL”foo://bar?args=values

共有2个答案

杜俊晤
2023-03-14

最简单的方法是在FooComponent类上创建一个Monitor属性,并像其他bean一样连接它。

<bean id="monitorBean" class="my.Monitor"/>

<bean id="foo" class="my.FooComponent">
    <property name="monitor" ref="monitorBean"/>
</bean>

然后在您的FooConsumer中,当您需要获得显示器时,请拨打:

Monitor monitor = ((FooComponent) getEndpoint().getComponent()).getMonitor();

如果要按每个终结点更改监视器bean,则可以使用Camel的漂亮#语法来定位具有该id的bean,并将其注入Endpoint属性。

foo:something?monitor=#monitorBean

然后,要在你的FOMER中使用它,你只需说:

Monitor monitor = ((FooEndpoint) getEndpoint()).getMonitor();
乐正德华
2023-03-14

如果你有一个Monitor的单例实例,你应该能够在efComponent类中@Autowire它。因为Camel在创建efComponent时会让Spring依赖注入。

然后,当您从组件创建endpoint/使用者时,可以传递monitor实例。

 类似资料:
  • 我正在为一个应用程序使用Apache骆驼和Spring启动。我需要从目录中读取,然后散集xml读取,然后处理未编组的对象以在其中设置更多数据,然后再次列表并将其发送到不同的文件夹。我使用以下路由。请告诉我在解组到处理器后如何发送POJO。目前默认情况下,它是进入处理器的交换。

  • 我试图将类名传递给react组件以更改其样式,但似乎无法正常工作: 我试图通过传递具有各自风格的类的名称来改变药丸的风格。我是新来的,所以也许我做得不对。谢啦

  • 问题内容: 我在烧瓶中有一个称为数组的函数,该函数接收一个列表并打印出列表中的项目: 在客户端,我想将名为str的javascript数组传递给该数组。我该怎么办?这就是我现在所拥有的,但是Flask没有读取添加的变量。有任何想法吗? 问题答案: Flask具有一个称为request的内置对象。在请求中有一个称为args的multidict。 您可以用来检索查询字符串的值。 当然,这需要一个get

  • 问题内容: 我尝试将函数传递给子组件。当用户单击每个子组件时,将调用onclick函数。此onclick函数将写入父组件。 父组件: 子组件: 在这一行: 它说没有定义handleClick …如何解决这个问题? 感谢您的回答。 问题答案: 您需要将Agents绑定到AgentsList:这是您的代码的一个简单示例,我不得不删除一些东西,但是您明白了: http://jsfiddle.net/vh

  • 问题内容: 我正在尝试访问DetailsPage组件中的 ID ,但无法访问它。我试过了 将参数传递给DetailsPage,但徒劳。 所以有什么想法如何将ID传递给DetailsPage吗? 问题答案: 如果要将props传递到路线内的组件,最简单的方法是利用,如下所示: 您可以使用以下内容访问道具: 将需要通过原路线的道具,否则你将只能得到内。

  • 问题内容: 我想将功能传递给子组件,但出现此错误。 基本上是我想做的。 var ReactGridLayout = require(’react-grid-layout’); 似乎它是在React v16中引入的。因此,将函数从父代传递给子代的正确方法是什么? 问题答案: 我发现出了什么问题。这是因为react-grid-layout。我必须将其余的属性传递给孩子。