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

使用Apache camel将MyObject传递到bean路由的可能性?

柳德义
2023-03-14

我正在使用Apache camel JAVA DSL使用来自Apache kafka的消息。我通过在Kafka上将对象转换为byte[]来编写对象。当我使用它时,我会收到一条带有字节[]的消息。我将其反序列化并获得一个对象。

我检查它是否是MyObject的对象,然后需要使用java DSL. to()将其传递给bean。我的代码如下:

public class KafkaRouter extends RouteBuilder {
    
    private MessageBean msgBean;
    
    @Override
    public void configure() throws Exception {
        
        from("{{kafka.cons.uri}}").process(new Processor() {
            
            
            
            @Override
            public void process(Exchange exchange) throws Exception {
                Object obj = SerializationUtils.deserialize(exchange.getIn().getBody(byte[].class));                //TODO cast to specific class as returned after deserialization.
                
                if(obj !=null && obj instanceof MessageBean){
                    
                    msgBean = (MessageBean)obj;
                    
                }
                else {
                    
                    throw new PTFException("Invalid Message read in Kafka Consumer");
                }
                
            }
            
            
        }).bean(PTFTransformerService.class,"callTransformerService(msgBean)"); ;
    }

现在的问题是我只想MyObject在相应的调用方法,我不想使用TypeConvertors。我不想得到Exchange/body in方法,我将在进程中处理我的流并抛出异常,如果读取无效消息,并且不将其转发到bean。

另一方面,我的方法是:

private void callTransformerService(MessageBean msgObj){
    // Got my object here ;-)   
        
    }

共有3个答案

孙玮
2023-03-14

您可以在处理器中设置Exchange主体,如下所示:

msgBean = (MessageBean)obj;
exchange.getIn().setBody(msgBean, MessageBean.class);
void callTransformerService(@Body MessageBean msgObj) {}
郑嘉年
2023-03-14

您可能需要编写一个自定义的回退类型转换器,可以将kafka字节[]转换为POJO

  • http://camel.apache.org/type-converter.html

然后,您可以在bean中定义pojo类型,Camel将使用回退类型转换器尝试转换为pojo类型。

单于皓轩
2023-03-14

在函数参数前添加@Body

import org.apache.camel.Body;

private void callTransformerService(@Body MessageBean msgObj){

}
 类似资料:
  • 例如,在具有分页列表的路由上,网址可能如下所示,表示我们已加载第二个网页: 使用指令和来传递查询参数。例如: 或者,我们可以使用服务通过JS跳转: 读取查询参数 See Official Documentation on Query Parameters

  • 我正在研究这个angular2项目,其中我使用从一个组件导航到另一个组件。 有两个组件。i、 例如, 我想从PagesComponent导航到DesignerComponent。 到目前为止其路由正确但我需要通过 我尝试使用RouteParams,但它的获取页面对象。 下面是我的代码: 页面.组件. ts 在html中,我正在执行以下操作: 在 DesignerComponent 构造函数中,我完

  • 问题内容: 我希望能够使用ui-router转换为状态并传递任意对象。 我知道通常会使用它,但是我相信此值会插入URL中,并且我不希望用户能够对此数据添加书签。 我想做这样的事情。 有没有办法在不将值编码到URL的情况下执行此操作? 问题答案: 在0.2.13版中,您应该可以将对象传递到$ state.go, 然后访问控制器中的参数。 myParam将不会显示在URL中。 资源: 请参阅chris

  • 我试图使用react router将props从app.jsx传递到某个路由组件,但出现以下错误

  • 我需要将文件从文件夹同步到restendpoint。因此,如果文件被放置在特定文件夹中,我需要将该文件发送到接受多部分文件的RESTendpoint。我正在使用ApacheCamel来实现这一点。 RESTendpoint在Spring中编写,如下所示: 我是Camel的新手,并且已经弄清楚了如何通过构建路由并获取文件来轮询目录,但是我无法弄清楚如何使用此路由将此文件放入其余endpoint。这是

  • 我尝试使用react路由器将道具传递给组件,如下所示: 我如何做到这一点,但与反应路由器,我如何在组件本身使用它? 我试过这个,但不起作用: