Пользовательский верблюжий компонент, используемый в весенне-загрузочном приложении - PullRequest
0 голосов
/ 19 мая 2019

Я новичок в интеграции с верблюдом, и мне нужно создать свой собственный компонент верблюда и использовать его в приложении Spring Boot.

Я пытался сгенерировать свой компонент, используя maven archetype .

Итак, команда такая:

mvn архетип: генерировать -DarchetypeGroupId = org.apache.camel.archetypes -DarchetypeArtifactId = верблюд-архетип-компонент -DarchetypeVersion = 2.12.1 -DgroupId = my.tcp.camel.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());    
    }

}

и файл манифеста, созданный в ресурсах.

Я обнаружил, что вы можете инициализировать springBoot с помощью FatJar

@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 работал с компонентом автоматического обнаружения верблюдов.

Спасибо.

1 Ответ

0 голосов
/ 27 мая 2019

Проблема заключалась в том, что я пытался добавить Пользовательский компонент верблюда в загрузку верблюжьей пружины.

Я решил использовать только в качестве эталонного компонента вместо компонента.

  @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");
    }
}

и в pom.xml

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

Другое решение, о котором я думал, - это создать пользовательский компонент верблюда с помощью архетипа maven, а затем импортировать его в виде jar-файла в приложении с весенней загрузкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...