UseTest1
Probability of Default Microservice
RHD BrainBit, 01-03-2018
Bert Koorengevel –The Commitments
Und jetzt kommen die Kamele …
Agenda
• PDM – Enterprise Integration Patterns
• Wat is Apache Camel?
• Waarom gebruiken we Camel?
• Zijn er alternatieven?
• Hoe ziet een Camel project er uit?
PDM
Facility
Advanced
Data
Analytics
Special
Assessment
Management
Credit
Assessment
Suite
RRR
PDM – Probability of Default Microservice
Enriched
Facility
RRR
Patterns
• Design Patterns
• 23 stuks
• Enterprise Integration Patterns
• 65 stuks
Messaging Patterns
Und jetzt kommen die Kamele …
Apache Camel is:
• Open source lightweight Integration framework
• Library: .jar dependencies
camel-core.jar + .jar per component
• Gebaseerd op Enterprise Integration patterns
• Java,Groovy & Scala fluent DSL
• Versie 1.0 gepubliceerd in 2007, huidige versie: 2.20.3
• Integreert met Spring (-boot)
ApplicationContext  CamelContext
6
How do I get started with Apache Camel?
Apache Camel is easy,
just read this 912 page book ;)
Workshop van Ivo Woltring:
• https://github.com/Ordina-JTech/camel-workshop
Of deep-dive:
• http://camel.apache.org
Endpoint URI’s - Components
• http[s]://hostName[:port][/resourceUri][?options]
• bean:beanName[?options]
• consul:apiEndpoint[?options]
• direct:someName[?options]
• ejb:ejbName[?options]
• file://nameOfFileOrDirectory[?options]
• hipchat://[host][:port]?options
• jdbc:dataSourceName[?options]
• rest:verb:path[?options]
• validation:resourceName[?options]
Routes definieren tussen Endpoints
9
@Component
public class HelloRouteBuilder extends RouteBuilder {
@Override
public void configure() {
from("rest:get:hello:/{me}")
.transform().simple("Hi ${header.me}");
from("rest:post:hello")
.setHeader("subject", constant("Hello!"))
.to("smtp:admin@tempuri.com");
}
}
Exchange & Processor
• Exchange
• In(putMessage)
• Header
• Body
• Out(putMessage)
• Header
• Body
• Exception
• [tl;dr]
@Component
public class GetOrderProcessor implements Processor {
@Autowired CustomerOrderRepository repo;
public void process(Exchange exchg) {
Customer cust = exchg.getIn()
.getBody(Customer.class);
exchg.getOut()
.setBody(repo.findAll(cust.getId()));
}
}
@Autowired GetOrderProcessor getOrders
. . .
from("direct:getcustomerorders").process(getOrders);
VergelijkingCamel met Spring Integration
PDM – Camel kernel
from("direct:determine_pd")
.to("bean-validator:facility")
.log("Start PDM for facility id: ${body.facilityId}")
.to(MULTI_URI)
.log("--> CAS")
.to(CalculatePDClientAdapter.URI)
.log(" RRR = ${body.rabobankRiskRating}");
from(MULTI_URI)
.multicast(multiStrategy)
.stopOnException()
.parallelProcessing()
.to( AdaGetBehaviouralDataRoute.URI,
SamGetDpdInfoAdapter.URI,
SamGetFacilityDefaultStatusAdapter.URI)
.end();
PDM – SAM interconnection
@Value("${service.sam.getdpdinfourl}")
private String getDpdInfoUrl;
. . .
from(SamGetDpdInfoAdapter.URI)
.to(SamGetDpdInfoClient.URI)
.unmarshall().json(JsonLibrary.Jackson, DPDInfo.class);
from(SamGetDpdInfoClient.URI)
.setHeader(Exchange.HTTP_METHOD, constant(HttpMethods.GET))
.setHeader(Exchange.HTTP_URI, simple(getDpdInfoUrl))
.to("https4:get");
Testing Camel routes
14
@RunWith(CamelSpringRunner.class)
public class SamGetDpdInfoAdapterTest {
@Produce(uri=TEST_START) ProducerTemplate samDpdInfoProducer;
@EndpointInject(uri=MOCK_RESULT) MockEndpoint resultEndpoint;
@TestConfiguration
public static class TestConfig extends SingleRouteCamelConfiguration {
@Override public RouteBuilder route() {
return () -> {
from(TEST_START).to(SamGetDpdInfoAdapter.URI).to(MOCK_RESULT);
}
}
}
@Test
public void test() {
resultEndpoint.expectedMessageCount(1);
resultEndpoint.allMessages().body(DPDInfo.class).isNotNull();
Facility facility = new Facility(“123”);
samDpdInfoProducer.sendBody(facility);
resultEndpoint.assertIsSatisfied();
}
}
Vragen ?
Bedankt voor jullie aandacht!

Brain bit camel

  • 1.
    UseTest1 Probability of DefaultMicroservice RHD BrainBit, 01-03-2018 Bert Koorengevel –The Commitments Und jetzt kommen die Kamele …
  • 2.
    Agenda • PDM –Enterprise Integration Patterns • Wat is Apache Camel? • Waarom gebruiken we Camel? • Zijn er alternatieven? • Hoe ziet een Camel project er uit?
  • 3.
  • 4.
    Patterns • Design Patterns •23 stuks • Enterprise Integration Patterns • 65 stuks
  • 5.
  • 6.
    Und jetzt kommendie Kamele … Apache Camel is: • Open source lightweight Integration framework • Library: .jar dependencies camel-core.jar + .jar per component • Gebaseerd op Enterprise Integration patterns • Java,Groovy & Scala fluent DSL • Versie 1.0 gepubliceerd in 2007, huidige versie: 2.20.3 • Integreert met Spring (-boot) ApplicationContext  CamelContext 6
  • 7.
    How do Iget started with Apache Camel? Apache Camel is easy, just read this 912 page book ;) Workshop van Ivo Woltring: • https://github.com/Ordina-JTech/camel-workshop Of deep-dive: • http://camel.apache.org
  • 8.
    Endpoint URI’s -Components • http[s]://hostName[:port][/resourceUri][?options] • bean:beanName[?options] • consul:apiEndpoint[?options] • direct:someName[?options] • ejb:ejbName[?options] • file://nameOfFileOrDirectory[?options] • hipchat://[host][:port]?options • jdbc:dataSourceName[?options] • rest:verb:path[?options] • validation:resourceName[?options]
  • 9.
    Routes definieren tussenEndpoints 9 @Component public class HelloRouteBuilder extends RouteBuilder { @Override public void configure() { from("rest:get:hello:/{me}") .transform().simple("Hi ${header.me}"); from("rest:post:hello") .setHeader("subject", constant("Hello!")) .to("smtp:admin@tempuri.com"); } }
  • 10.
    Exchange & Processor •Exchange • In(putMessage) • Header • Body • Out(putMessage) • Header • Body • Exception • [tl;dr] @Component public class GetOrderProcessor implements Processor { @Autowired CustomerOrderRepository repo; public void process(Exchange exchg) { Customer cust = exchg.getIn() .getBody(Customer.class); exchg.getOut() .setBody(repo.findAll(cust.getId())); } } @Autowired GetOrderProcessor getOrders . . . from("direct:getcustomerorders").process(getOrders);
  • 11.
  • 12.
    PDM – Camelkernel from("direct:determine_pd") .to("bean-validator:facility") .log("Start PDM for facility id: ${body.facilityId}") .to(MULTI_URI) .log("--> CAS") .to(CalculatePDClientAdapter.URI) .log(" RRR = ${body.rabobankRiskRating}"); from(MULTI_URI) .multicast(multiStrategy) .stopOnException() .parallelProcessing() .to( AdaGetBehaviouralDataRoute.URI, SamGetDpdInfoAdapter.URI, SamGetFacilityDefaultStatusAdapter.URI) .end();
  • 13.
    PDM – SAMinterconnection @Value("${service.sam.getdpdinfourl}") private String getDpdInfoUrl; . . . from(SamGetDpdInfoAdapter.URI) .to(SamGetDpdInfoClient.URI) .unmarshall().json(JsonLibrary.Jackson, DPDInfo.class); from(SamGetDpdInfoClient.URI) .setHeader(Exchange.HTTP_METHOD, constant(HttpMethods.GET)) .setHeader(Exchange.HTTP_URI, simple(getDpdInfoUrl)) .to("https4:get");
  • 14.
    Testing Camel routes 14 @RunWith(CamelSpringRunner.class) publicclass SamGetDpdInfoAdapterTest { @Produce(uri=TEST_START) ProducerTemplate samDpdInfoProducer; @EndpointInject(uri=MOCK_RESULT) MockEndpoint resultEndpoint; @TestConfiguration public static class TestConfig extends SingleRouteCamelConfiguration { @Override public RouteBuilder route() { return () -> { from(TEST_START).to(SamGetDpdInfoAdapter.URI).to(MOCK_RESULT); } } } @Test public void test() { resultEndpoint.expectedMessageCount(1); resultEndpoint.allMessages().body(DPDInfo.class).isNotNull(); Facility facility = new Facility(“123”); samDpdInfoProducer.sendBody(facility); resultEndpoint.assertIsSatisfied(); } }
  • 15.
    Vragen ? Bedankt voorjullie aandacht!