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

在Spring引导应用程序中使用的自定义骆驼组件

裴育
2023-03-14

我是Camel集成的初学者,我需要创建定制的Camel组件,并在Spring Boot应用程序中使用它。

我尝试使用maven原型生成我的组件。

所以命令是这样的:

mvn原型:generate-DarchetypeGroupId=org。阿帕奇。骆驼ArchetypeArtifactid=camel原型组件-DarchetypeVersion=2.12.1-DgroupId=my。tcp。骆驼component-DartifactId=my-tcp-Dname=MyTCP-Dscheme=my-tcp

生成的代码如下所示

public class MyTCPComponent extends DefaultComponent {

    protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
        Endpoint endpoint = new MyTCPEndpoint(uri, this);
        setProperties(endpoint, parameters);
        return endpoint;
    }
}

public class MyTCPEndpoint extends DefaultEndpoint {

    public MyTCPEndpoint() {}

    public MyTCPEndpoint(String uri, PtTCPComponent component) {
        super(uri, component);
    }

    public MyTCPEndpoint(String endpointUri) {
        super(endpointUri);
    }

    public Producer createProducer() throws Exception {
        return new MyTCPProducer(this);
    }

    public Consumer createConsumer(Processor processor) throws Exception {
        return new MyTCPConsumer(this, processor);
    }

    public boolean isSingleton() {
        return true;
    }
}

public class MyTCPConsumer extends ScheduledPollConsumer {
    private final MyTCPEndpoint endpoint;

    public MyTCPConsumer(MyTCPEndpoint endpoint, Processor processor) {
        super(endpoint, processor);
        this.endpoint = endpoint;
    }

    @Override
    protected int poll() throws Exception {
        Exchange exchange = endpoint.createExchange();

        // create a message body
        Date now = new Date();
        exchange.getIn().setBody("Hello World! The time is " + now);

        try {
            // send message to next processor in the route
            getProcessor().process(exchange);
            return 1; // number of messages polled
        } finally {
            // log exception if an exception occurred and was not handled
            if (exchange.getException() != null) {
                getExceptionHandler().handleException("Error processing exchange", exchange, exchange.getException());
            }
        }
    }
}

public class MyTCPProducer extends DefaultProducer {
    private static final Logger LOG = LoggerFactory.getLogger(MyTCPProducer.class);
    private MyTCPEndpoint endpoint;

    public MyTCPProducer(MyTCPEndpoint endpoint) {
        super(endpoint);
        this.endpoint = endpoint;
    }

    public void process(Exchange exchange) throws Exception {
        System.out.println(exchange.getIn().getBody());    
    }

}

以及在参考资料中创建的清单文件。

我发现你可以用FatJar初始化springBoot

@SpringBootApplication
public class MySpringBootRouter extends FatJarRouter {

    @Override
    public void configure() {
        from("timer://trigger").
                transform().simple("ref:myBean").
                to("log:out", "mock:test");
    }

    @Bean
    String myBean() {
        return "I'm Spring bean!";
    }

}

让某人在SpringBoot应用程序中集成他们的自定义组件。

我更愿意让springboot与camel自动发现组件一起工作。

谢谢你。

共有1个答案

邹海荣
2023-03-14

问题是我试图在camel-Spring Boot中添加一个定制的camel组件。

我决定只将其用作参考bean,而不是组件。

  @Component("my-tcp")
    @Slf4j
    public class MyTCPComponent {

           public String messageProcess(Exchange msg){
             // do your logic here
           }
  }

@Configuration
public class MyTCPCamelRouter extends RouteBuilder {


    @Override
    public void configure() throws Exception {

        from("direct:my-tcp")
                .to("bean:my-tcp")
                .to("log:foo");
    }
}

在波姆。xml

 <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-spring-boot-starter</artifactId>
        <version>3.0.0-SNAPSHOT</version>
 </dependency>

我考虑的另一个解决方案是使用maven原型生成camel定制组件,然后将其作为jar导入spring boot应用程序。

 类似资料:
  • 然后我需要做的是创建另一个FTP连接--技术上是到同一台机器,但路径不同。在我的实验中,我使用了一个带有构造URI的使用者模板来获取另一个文件(基于轮询文件的内容)。 这已经在一个高级别工作,并获取我需要的文件。谁能证实这是不是一件危险的事? 根据文档: 当然,我想要的文件确实会被检索到,而且我可以将它进一步传递到骆驼路由中,然而,当我处理FTP流文件时,我看到了字节级处理(按位计算等)的问题,我

  • 我正在用apache Camel构建一个spring boot应用程序。我想让camel中的DSL监听spring boot启动时的相同端口。 我尝试了这个链接,但如果不使用组件,就无法解析它。我不希望我的路由看起来像,而是希望直接使用jetty Build.Gradle

  • 我在camel Kafka starter依赖项中使用了一个Kafka组件。在这个问题中,建议我使用“定制器”。我将如何在spring boot应用程序中使用它?

  • 我使用的是Spring启动和骆驼版 为了使骆驼能够访问属性并使用它们在uri路线中使用 添加依赖项并定义,bean足以让它工作 -- 现在,在我按照迁移指南将更新为并修复了组件的导入之后。在运行时,camel找不到属性,我得到以下信息: 在text:activemq:queue:{{xxx}的属性中找不到键为[xxx]的属性 你知道是什么改变了,为什么我的路线不再有效了吗? 更新1 我将sprin

  • 我想在Spring Boot应用程序中使用WebSphereLiberty,而不是tomcat服务器。如果我是正确的,它是不支持开箱即用的。如何配置spring boot/websphere liberty来实现这一点?

  • 我已经为IntelliJ安装了Camel插件。 要开始调试,我们必须创建一个临时应用程序 您如何确切地知道本地加载的端口应用程序是什么?我怎样才能改变它?我没有找到关于。。。