venerdì 27 marzo 2020

Camel Kafka consumer/producer

This is a simple integration I used with springboot, camel, kafka. I had to consume from a topic and do some logic to produce on another topic. I followed the same idea to develop a "topic switcher" that chose on what topic to produce (not in this post but the solution is immediate).
The routebuilder is the main camel class that call "getBody" method on a bean that do the magic. The bean call back the routebuilder to produce on Kafka.



//ROUTEBUILDER:

@Component
public class MyRouteBuilder extends RouteBuilder {

    @Override
    public void configure() throws Exception {

        from("kafka:{{consumer.topic}}?brokers={{kafka.brokers}}&consumersCount={{consumer.consumersCount}}&groupId={{consumer.group}}")
                .routeId("FromKafka")
                .log("------- ROUTE BUILDER -------")
                .onException(Exception.class)
                .log(LoggingLevel.ERROR, "crash-data-stream", "Invalid Input")
                .maximumRedeliveries(2).redeliveryDelay(30000)
                .end()
                .to("bean:externalBean?method=getBody(${body})");

        from("direct:myproducer")
                .routeId("myproducer")
                .to("kafka:{{producer.topic}}?brokers={{kafka.brokers}}")
                ;
    }
}


----------------------------------

//EXTERNAL BEAN

@Service
public class ExternalBean {

    @EndpointInject("direct:myproducer")
    ProducerTemplate producer;
 
    public void getBody(String body) throws Exception {
        //do stuff and send back to camel
        myproducer.sendBody(body);
    }

}

lunedì 2 marzo 2020

Spring boot multiple property files



Add in pom:

<build>
...
  <resources>
   <resource>
    <directory>src/main/resources</directory>
    <filtering>true</filtering>
   </resource>
  </resources>
...
</build>



  1. Add

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-help-plugin</artifactId>
    <version>3.2.0</version>
     <executions>
      <execution>
       <id>show-profiles</id>
        <phase>compile</phase>
        <goals>
         <goal>active-profiles</goal>
        </goals>
      </execution>
     </executions>
</plugin>




  1. Add

<profiles>
  <profile>
   <id>dev</id>
    <properties>
     <activatedProperties>dev</activatedProperties>
    </properties>
    <activation>
     <activeByDefault>true</activeByDefault>
    </activation>
  </profile>
  <profile>
  <id>prod</id>
   <properties>
     <activatedProperties>prod</activatedProperties>
   </properties>
  </profile>
</profiles>



  1. Create application.properties:

spring.profiles.active=@activatedProperties@



  1. Create:

application-dev.properties

application-prod.properties



  1. run:



mvn clean spring-boot:run -Pprod

//or

mvn clean spring-boot:run -Dspring-boot.run.profiles=dev

Run minikube with podman on Fedora

After install minikube as described in the documentation , set rootless property to true to use Podman without sudo: minikube config set roo...