# Spring Boot and ServiceCall EIP Example

This example show how to use Camel with ServiceCall EIP with spring-boot and consul.

This example includes two maven modules:

 - services that exposes a number of services
 - consumer that consumes services

## Configuration

The consumer is configured in the src/main/resources/application.properties in which we blacklist some services for being discovered and we add some additional services not managed by consul

    # Configure service filter
    camel.cloud.service-filter.blacklist[service-1] = localhost:9012

    # Configure additional services
    camel.cloud.service-discovery.services[service-2] = localhost:9021,localhost:9022,localhost:9023


## Build

You can build this example using

    mvn compile

## Run the example

Using multiple shells:

 - start consul:

  $ cd services
  $ src/main/bash/consul-run.sh

 - start the service-1 service group:

  $ cd services
  $ mvn spring-boot:run -Dspring.profiles.active=service-1

  - start the service-2 service group:

  $ cd services
  $ mvn spring-boot:run -Dspring.profiles.active=service-2

  - start the consumer

  $ cd consumer
  $ mvn spring-boot:run

## Test the example:

In a new shell:

  $ curl localhost:8080/camel/serviceCall/service1
  Hi!, I'm service-1 on camel-1/route1
  $ curl localhost:8080/camel/serviceCall/service2
  Hi!, I'm service-1 on camel-1/route2

If you keep calling the http endpoint you'll notice they are consumed using a round robin policy and that one of the services registered in consul is not taken into account according to the blacklist.

## More information

You can find more information about Apache Camel at the website: http://camel.apache.org/

