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

骆驼头过滤策略豆Spring注册

孙成益
2023-03-14

我很难让Spring Camel获得注册为Bean的HeaderFilterStrategy类,这样就可以通过Camel路线找到它。我试图注释HeaderFilterStrategy自定义类似乎是徒劳的。。。那么如何注册这个东西,以便在运行时找到它呢?

我有一个驼峰应用程序,其中一条路线使用定制的HeaderFilterStrategy

策略类看起来像:

public class HeaderFilter implements HeaderFilterStrategy {
    @Override
    public boolean applyFilterToCamelHeaders(String s, Object o, Exchange exchange) {
      return false;
    }

   @Override
   public boolean applyFilterToExternalHeaders(String s, Object o, Exchange exchange) {
    return true;
   }
}

我注册它与骆驼使用一个简单的注册表:

    SimpleRegistry registry = new SimpleRegistry();
    registry.put("HeaderFilter" ,new HeaderFilter());
    .
    .
    final CamelContext ctx = new DefaultCamelContext(registry);

我在我的路线中引用了它

.to("https://myhost/endpoint&headerFilterStrategy=#HeaderFilter")

就像拉尔夫在圣诞之夜拿着他那把可靠的红色骑手BB枪一样,这个世界一切都好。

所以,现在我想把这个纯骆驼应用程序放到Spring下。我确保所有合适的骆驼、Spring骆驼和Spring用品都是进口的。。然而,当我试图将我的HeaderStrategy注释为Spring的Bean时,它失败了:

@Component
public class HeaderFilter implements HeaderFilterStrategy {

@Bean
  @Override
  public boolean applyFilterToCamelHeaders(String s, Object o, Exchange exchange) {
    return false;
  }
  @Override
  public boolean applyFilterToExternalHeaders(String s, Object o, Exchange exchange) {
    return true;
  }
}

现在,当我这样做的时候,IDE基本上告诉我它不能自动连接方法调用中的任何参数,因为有不止一个类型为String或Object的bean,并且没有找到类型为Exchange的bean...

在运行时,Camel确实尝试解释路由,但抛出了一个失败,即“没有符合条件的bean类型”java。lang.String“可用,因为这是方法调用中的第一个参数。。。

那么,我如何让这个东西能够正确地注册到注释中呢?或者在不尝试自动连线的情况下手动注册这个bean?我只需要将该类注册为BEAN,这样就可以在运行时通过camel找到它。。。或者至少我知道这是需要发生的事情。。。那我该怎么做呢?

共有1个答案

公西光华
2023-03-14

我发现,我没有正确使用注释。我在AppConfig类中添加了以下内容:

@Configuration
public class AppConfig{

  @Bean 
  public HeaderFilter HeaderFilter(){
    return new HeaderFilter();
  }
}

我不确定上述建议是否有效,但这显然有效。

 类似资料:
  • 尝试将春豆添加到骆驼体属性中。类似于: 甚至先输入标题: 其中uiLimit为: 并且在标头和属性中仍然为空。 任何想法为什么注册表中的 bean 查找对 OSGI 不起作用?(单个捆绑包中的所有豆子/路由) PS:这在Route中运行良好:

  • 我有一条小路线,我想使用自定义的重新传递策略来重复向endpoint发送消息,但这种行为非常奇怪。看起来,重新交付政策只是在重复一个错误。我试图将所有交换发送到路由的开头,但策略不起作用,因为每次都在创建: 我做错了什么?当错误发生时,我想以间隔重复我的请求。我的骆驼版本是2.6 日志:

  • 我使用camel框架处理jetty组件。 我有两个问题: 1)我使用大消息(约1mb)和jetty组件将消息正文读取到骆驼交换标头中。它会导致这样的错误: 所以,我如何才能使jetty组件不将HttpRequest主体放入标头中? 2) 当我试图重写默认的HeaderFilterStrategy时,我编写了这样一段代码: 它引起了这样的例外: 原因:组织。阿帕奇。骆驼ResolveEndpoint

  • 我们正在尝试使用Apache Camel进行集群。到目前为止,我们在一个节点上完成了它,并且工作得很好。 一个节点:我将readlock策略设置为“changed”,它将跟踪camelLock文件的文件变化,并且只有当文件下载完成时,它才会被拿起进行处理。但是camel readlock策略“已改变”在聚类中是不鼓励的。根据camel文档,建议使用“幂等”。这就是我使用5GB文件进行测试时所发生的

  • 我通过扩展DefaultComponent编写了一个camel组件,还实现了endpoint、consumer和producer的关联类。我的producer正在扩展camel DefaultProducer,我想在这个类中注入一个Springbean,这样每当执行一个路由时 我将能够从文件系统中获取文件并将其存储到数据库中。为了将文件存储到数据库中,我有一个由Spring容器实例化的服务类,但是

  • 我是第一次使用Camel。我的试验项目是编写一个应用程序,该应用程序接收HTTP GET请求(使用Jetty)并通过Thrift将请求传递到另一台服务器。然后将收到的答案传递回客户端。(即,如果您愿意,我正在编写超文本传输协议-get请求和Thrift支持的服务器之间的数据交换机或中间件应用程序。) 我有一个完美的非驼峰版本,现在我正在尝试将驼峰等效物组合在一起。目前,我只想将jetty请求写入一