Создание очереди сообщений при весенней загрузке с использованием Apache Camel - PullRequest
0 голосов
/ 28 марта 2019

Я очень новичок в этой очереди сообщений и только начал изучать некоторые базовые вещи в этом.

Итак, для нашего весеннего загрузочного приложения мы следовали архитектуре, такой как контроллеры, сервисы и сервисы, переговоры с репозиторием, поэтому здесь мне нужно создать один контроллер, который будет принимать класс DTO в качестве json, и отправлять эту информацию в очередь сообщений, указанную в верблюд апач Я перехожу по этой ссылке ! для моей справки, которая работает хорошо, но когда я попытался реализовать это в своем проекте, он сказал мне ошибку, перечисленную ниже.

Error

Исключительная ситуация при инициализации контекста - отмена попытка обновления: org.springframework.beans.factory.UnsatisfiedDependencyException: Ошибка создания бина с именем trackerQueueController: неудовлетворен зависимость выражается через поле 'camelContext'; вложенное исключение org.springframework.beans.factory.NoSuchBeanDefinitionException: нет доступен квалифицирующий компонент типа 'org.apache.camel.CamelContext': ожидается, по крайней мере, 1 боб, который считается кандидатом autowire. Аннотации зависимостей: {@ Org.springframework.beans.factory.annotation.Autowired (обязательно = истина)}

Я создал контроллер, маршруты и процессор, как показано ниже:

Контроллер

@RestController
@RequestMapping("/deviceinfo")
public class TrackerQueueController {
@Autowired
CamelContext camelContext;

@Autowired
private
ProducerTemplate producerTemplate;

@PostMapping()
public void startCamel(@RequestBody FieldUpdate fieldUpdate) {
    producerTemplate.sendBody("activemq:topic:in", fieldUpdate);
}
}

Маршруты

   @Component
public class TrackerQueueRoutes extends RouteBuilder {
    @Override
    public void configure() throws Exception {
        from("activemq:topic:in")
                .process(new TrackerProcessor() {
                    @Override
                    public void process(Exchange exchange) throws 
Exception {
                        log.info("I'm in");
                        FieldUpdate body = 
exchange.getIn().getBody(FieldUpdate.class);
                    log.info("Hello from camel processed message! 
Received payload: {}" , body.getSerialNumber());

exchange.getOut().setHeader(Exchange.HTTP_RESPONSE_CODE, 
HttpStatus.ACCEPTED);
                    }
            });
    }
}

Процессор

public class TrackerProcessor implements Processor {
    @Override
   public void process(Exchange exchange) throws Exception {

   }
}

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

1 Ответ

1 голос
/ 28 марта 2019

Как предложил Клаус Ибсен в комментариях, вы должны добавить эти зависимости в свой файл POM

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-spring-boot-starter</artifactId>
    <version>[camel-version]</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
  • camel-spring-boot-starter автоматически запускает CamelContext для вас, обнаруживает маршруты и т. Д.
  • spring-boot-starter-web поддерживает работу приложения, прослушивая веб-запросы. В противном случае он сразу выключится после запуска, потому что выполнять нечего.

Поскольку ваш класс маршрута Camel правильно помечен (@Component) и подклассами (extends RouteBuilder), он должен автоматически обнаруживаться стартером Camel SpringBoot.

См. Документы Camel-SpringBoot по всем этим темам и многим другим.

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