Apache Camel创建Consumer组件

vel*_*s4j 2 java apache-camel

我是Apache Camel的新手。在hp不间断中,有一个接收器,它接收事件管理器生成的事件,就像流一样。我的目标是建立一个消费者端点,该端点接收传入的消息并通过Camel处理它。

另一个终点,我只需要在日志中编写它即可。从我的研究中我了解到,对于Consumer端点,我需要创建自己的组件,并且配置将像

   from("myComp:receive").to("log:net.javaforge.blog.camel?level=INFO")
Run Code Online (Sandbox Code Playgroud)

这是我的代码片段,它接收来自事件系统的消息。

 Receive receive = com.tandem.ext.guardian.Receive.getInstance();
    byte[] maxMsg = new byte[500]; // holds largest possible request 
    short errorReturn = 0;
    do { // read messages from $receive until last close 
        try {
            countRead = receive.read(maxMsg, maxMsg.length);
            String receivedMessage=new String(maxMsg, "UTF-8");
            //Here I need to handover receivedMessage to camel 

        } catch (ReceiveNoOpeners ex) {
            moreOpeners = false;
        } catch(Exception e) {
            moreOpeners = false;
        }
    } while (moreOpeners);
Run Code Online (Sandbox Code Playgroud)

有人可以提供一些提示来指导如何使它成为消费者。

Ral*_*alf 5

10,000英尺的视图是这样的:

您需要从实现组件开始。入门最简单的方法是扩展org.apache.camel.impl.DefaultComponent。您唯一要做的就是覆盖DefaultComponent::createEndpoint(..)。很明显,它所做的是创建端点。

因此,您下一步需要实现端点。org.apache.camel.impl.DefaultEndpoint为此扩展。至少DefaultEndpoint::createConsumer(Processor)要覆盖以创建自己的消费者。

最后但并非最不重要的一点是,您需要实现使用者。再次,最佳主义者扩大org.apache.camel.impl.DefaultConsumer。消费者是您生成代码的代码所在。通过构造函数,您会收到对端点的引用。使用终结点引用创建一个新的Exchange,将其填充并沿路由发送。遵循以下原则

Exchange ex = endpoint.createExchange(ExchangePattern.InOnly);
setMyMessageHeaders(ex.getIn(), myMessagemetaData);
setMyMessageBody(ex.getIn(), myMessage);

getAsyncProcessor().process(ex, new AsyncCallback() {
    @Override
    public void done(boolean doneSync) {
        LOG.debug("Mssage was processed " + (doneSync ? "synchronously" : "asynchronously"));
    }
});
Run Code Online (Sandbox Code Playgroud)

我建议您选择一个简单的组件(DirectComponent?)作为示例。