Хобрук: Ваш путь к мастерству в программировании

Добавление пользовательского компонента/конечной точки Apache Camel в приложение Spring

Я пытаюсь реализовать пользовательскую конечную точку в приложении Spring Boot.

Цель состоит в том, чтобы использовать маршруты как: from("...").process("...").to("my:...");

Теперь у меня есть 3 класса: DefaultConsumer, DefaultEndpoint, DefaultComponent:

package com.my.endpoint;

import org.apache.camel.Consumer;
import org.apache.camel.Processor;
import org.apache.camel.Producer;
import org.apache.camel.support.DefaultEndpoint;

public class MyEndpoint extends DefaultEndpoint {

    public MyEndpoint(String uri, MyComponent myComponent) {

    }
    ...
}

package com.my.endpoint;

import org.apache.camel.Endpoint;
import org.apache.camel.Processor;
import org.apache.camel.support.DefaultConsumer;

public class MyConsumer extends DefaultConsumer {

    public MyConsumer(Endpoint endpoint, Processor processor) {

        super(endpoint, processor);
    }
}

package com.my.endpoint;

import org.apache.camel.CamelContext;
import org.apache.camel.Endpoint;
import org.apache.camel.spi.annotations.Component;
import org.apache.camel.support.DefaultComponent;

import java.util.Map;

@Component("my")
public class MyComponent extends DefaultComponent {

    public MyComponent(CamelContext camelContext) {

        super(camelContext);
    }
    ...
}

Теперь: как я могу зарегистрироваться?

В классе конфигурации Spring у меня есть:

  @Override
  public void configure() throws Exception {

        camelContext.addComponent("my", new MyComponent(camelContext));

Но не работает:

    Caused by: org.apache.camel.NoSuchEndpointException: No endpoint could be found for: my, please check your classpath contains the needed Camel component jar.

Итак, я добавил файл META-INF в services/org/apache/camel/component/my:

class=com.my.endpoint.MyComponent

Но и это не работает.

Полного руководства по реализации этого нет.

Любая помощь?

Примечание. Я пытаюсь реализовать конечную точку, потому что мне нужно интегрировать свои системы с использованием моих типов данных. Я пытался использовать Transformer, но потерпел неудачу из-за этого: Установите пользовательский тип данных в Apache Верблюжий процессор

Раньше я пытался использовать преобразователь типов данных, но потерпел неудачу из-за этого (помечено как дубликат, потому что люди слишком ленивы, чтобы действительно понимать вопросы): Применить преобразование типов для потребителя Rest в Apache Camel

Я ПОЛНОСТЬЮ прочитал Apache Camel In Action, Second Edition, но на данный момент я не могу продолжать свой проект из-за?


  • Вы пробовали UriEndpointComponent вместо DefaultComponent? 25.03.2021
  • @StepanShcherbakov такого класса нет: устарело. использовать компонент по умолчанию 26.03.2021
  • Извините, я не заметил 26.03.2021
  • Я не совсем уверен, но, возможно, вам следует добавить аннотацию @ UriEndpoint к вашему классу компонента и @ UriParam для параметров uri. 26.03.2021
  • Да, @СтепанЩербаков. С UriEndpoint регистрация работает. Я думал, что это необязательно и только для поддержки документации, но нет. Спасибо. 29.03.2021
  • Добро пожаловать :) Я также добавил ответ, это может быть полезно для пользователей 30.03.2021

Ответы:


1

Это связано с тем, что пользовательский компонент должен быть снабжен аннотацией @UriEndpoint.

30.03.2021

2

Другой способ решить эту проблему: установить EndpointUri через конструктор или путем реализации createEndpointUri() в MyEndpoint.

Поэтому самым простым способом может быть изменение вашего конструктора на:

public MyEndpoint(String uri, MyComponent myComponent) {
 super(uri, myComponent);
}
19.07.2021
Новые материалы

HMTL - Многозадачное обучение для решения задач НЛП
Достижение результатов SOTA путем передачи знаний между задачами Область обработки естественного языка включает в себя десятки задач, среди которых машинный перевод, распознавание именованных..

Решения DBA Metrix
DBA Metrix Solutions предоставляет удаленного администратора базы данных (DBA), который несет ответственность за внедрение, обслуживание, настройку, восстановление базы данных, а также другие..

Начало работы с Блум
Обзор и Codelab для генерации текста с помощью Bloom Оглавление Что такое Блум? Некоторые предостережения Настройка среды Скачивание предварительно обученного токенизатора и модели..

Создание кнопочного меню с использованием HTML, CSS и JavaScript
Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

Внедрите OAuth в свои веб-приложения для повышения безопасности
OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

Классы в JavaScript
class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

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