ããã«ã¡ã¯ãã½ãªã¥ã¼ã·ã§ã³ã¢ã¼ããã¯ãã®ç¬æ¸ã§ãã
ä»åã¯Apache Camelã¢ããªã±ã¼ã·ã§ã³ã®éçºç°å¢ã®ã»ããã¢ããããã¦ãµã³ãã«ã¢ããªã確èªãã¦ãããã¤ã¾ã§ããã¦ã¿ããã¨æãã¾ãã
Apache Camelã£ã¦ä½ãï¼ã£ã¦æã£ã人ã¯ãè¸éãããæ¸ãã¦ããããã°è¨äºï¼Apache Camel è¶ å ¥éãåç §ãã¦ãã ããã
以åRed Hatã§ã¯Fuseã¨ããååã§Apache Camelã製ååãã¦è²©å£²ãã¦ãã¾ããã ä»ã¯Red Hat build of Apache Camelã¨ããååã§è£½ååããã¦ããã®ã§ãããRed Hat build of Apache Camelã«å¤ãã£ãå¾ãè¤éãªçµç·¯ã«ãã£ã¦ããã¥ã¡ã³ãã®ä½ç³»ãå¤ãã£ã¦ãããç´°å¿ã®ããã¥ã¡ã³ããè¦ã¤ãã«ãããªã£ã¦ãã¾ãã ç¾æç¹(2024å¹´11ææç¹)ã§ã¯ã製åããã¥ã¡ã³ãã®ãã¼ã¸ããRed Hat build of Apache Camelã®ãªã³ã¯ããã©ã£ããã®ãææ°ã®ããã¥ã¡ã³ãã§ãã ãã以å¤ã«ã¤ãã¦ã¯ããã§ã«ãªã¿ã¤ã¤ãã¦ãããã®ãããããããªã¿ã¤ã¤ãããã®ã®ããã¥ã¡ã³ãã¨ãªãã¾ãã
googleã§ apache camel red hatã§æ¤ç´¢ããã¨Fuseã®ããã¥ã¡ã³ããæåã«å¼ã£ããã£ã¦ãã¾ãã¾ããããã¡ãã¯ãã§ã«å¤ããã®ã¨ãªã£ã¦ãã¾ãã
ç¾æç¹(2024å¹´11æ)ã§ã®ãµãã¼ãããã¦ããææ°ã®ãã¼ã¸ã§ã³ã¯Red Hat build of Apache Camel 4.4ã§ãã ããã¥ã¡ã³ãã®ãã¼ã¸ã«ãã£ã¦ã¯Red Hat build of Apache Camel for Spring Boot 3.20ã¾ã§ãããã¼ã¸ã§ã³ä¸è¦§ããé¸ã¹ãªããã®ãããã¾ãã®ã§ã注æãã ããã
éãã¾ããã以ä¸ã2024å¹´11ææç¹ã§ã®ææ°ã®ããã¥ã¡ã³ãã«ãªãã¾ãã®ã§ã注æãã ããã
Apache Camelãå®éã«ä½¿ç¨ãã
Apache Camelèªä½ã¯ãã ã®ã©ã¤ãã©ãªã§ããåããããã«ã¯å¥éã¢ããªã±ã¼ã·ã§ã³ãµã¼ãã¼ãå¿ è¦ã«ãªãã¾ãã ç¾æç¹ã§ã¯ãµãã¼ããããç°å¢ã¨ãã¦Spring-BootãQuarkusã鏿ãããã¨ãã§ãã¾ããSpring-Bootã鏿ãããã¨ã§å¤ãã®äººãæ £ãã¦ããSpring-Bootã®APIã使ç¨ããäºãã§ãã¾ãã Quarkusã鏿ããã¨Spring-Bootããã軽快ã«åä½ãããã¨ãæå¾ ã§ãã¾ãã
ä»åã¯ãSpring-Bootãå©ç¨ãã¾ãã
Note: Camelã®ã©ã³ã¿ã¤ã ã¨ãã¦ä»ã«Camel Kãããã¾ãããCamel Kã®ãµãã¼ãã¯æ¥å¹´åã°ã«ã¯çµäºãããããæ°è¦ã«ä½¿ãå§ãããã¨ã¯åºæ¥ã¾ããã https://access.redhat.com/ja/articles/7083689
Spring-Bootã§Apache Camelã§éçºããããã«ã¯Javaã®éçºç°å¢ãå¿ è¦ã«ãªãã¾ããOpenJDKã®ã¤ã³ã¹ãã¼ã«ãMavenã®è¨å®ãå¿ è¦ã«ãªãã¾ãã
è¨å®ããããã¨ããªãå ´åã¯ã以ä¸ã®è¨äºã§èª¬æãã¦ãã¾ãã以ä¸ã®è¨äºã§ã¯JBoss EAPã®éçºç°å¢ãæ§ç¯ãã¦ãã¾ãããå ¨ãåãã§ãã
éçºç°å¢ããããã° Red Hat build of Apache Camel for Spring Boot ã®ã¹ã¿ã¼ãã¬ã¤ã ã®éãã«è¡ãã°ããã¸ã§ã¯ãã使ã§ãã¾ãããç°¡åã«ä½æããããã«ä»åã¯Mavenã®ã¢ã¼ãã¿ã¤ããå©ç¨ãã¾ãã
Mavenã®ã¢ã¼ãã¿ã¤ãã¯Javaã¢ããªã±ã¼ã·ã§ã³ã®ãã³ãã¬ã¼ããMaven Repositoryã«ç»é²ãã¦ããä»çµã¿ã§ãã ããã¤ãã®ãã©ã¡ã¼ã¿ã¼ãå ¥åãããã¨ã§Mavenã§ã®ã¢ããªã±ã¼ã·ã§ã³éçºã®ãµã³ãã«ãç°¡åã«ä½ããã¨ãã§ãã¾ãã ã¢ã¼ãã¿ã¤ãã®è©³ç´°ã«ã¤ãã¦ã¯Mavenã®ã¦ã§ããµã¤ããåç §ãã¦ãã ããã
ã¾ããEclipseçã使ç¨ããäºã§ã©ã®ãããªã¢ã¼ãã¿ã¤ããç»é²ããã¦ããããæ¤ç´¢ãããã¨ãã§ãã¾ãã
次ã®å³ã¯Eclipseã§æ°è¦ããã¸ã§ã¯ãã®ä½ææã«Mavenã¢ã¼ãã¿ã¤ãã®ä¸è¦§ã表示ãã¦ãã¾ãã
ãã¦ã話ã¯ããã¾ããããRed Hatã®ãµãã¼ãã®å Apache Camelã使ç¨ããå ´åã«ã©ã®ã¢ã¼ãã¿ã¤ããæå®ãããã«ã¤ãã¦ã¯ããã¥ã¡ã³ãã«è¨è¼ããã¦ãã¾ãã
ããã¥ã¡ã³ãéãã«ã³ãã³ããå©ãã¾ãã
mvn archetype:generate -DarchetypeGroupId=org.apache.camel.archetypes -DarchetypeArtifactId=camel-archetype-spring-boot -DarchetypeVersion=4.4.0.redhat-00033 -DgroupId=com.redhat -DartifactId=csb-app -Dversion=1.0-SNAPSHOT -DinteractiveMode=false
â»ãã®ãã¡ã-DgroupIdã¨-DartifactIdã-Dversionã«ã¤ãã¦ã¯èªç±ã«å¤æ´ãããã¨ãã§ãã¾ããartifactIdããã©ã«ãåã«ãªããã¨ã ãæ³¨æãã¦ãã ããã
ãã®æå®ã®ã¾ã¾ä½æããããã¸ã§ã¯ããgithubä¸ã«æºåãã¦ãã¾ãã
ãã®ã¢ã¼ãã¿ã¤ããã使ãããããã¸ã§ã¯ãã«ã¯ãµã³ãã«ã¢ããªã±ã¼ã·ã§ã³ãå«ã¾ãã¦ãã¾ãã å ã®ããã¥ã¡ã³ãéãããã°åããã¨ã¯ç¢ºèªãã§ããã®ã§ãä¸èº«ã®ã½ã¼ã¹ãè¦ã¦ã¿ã¾ãããã
Javaã®ã½ã¼ã¹ã³ã¼ãã¨ãã¦ã¯æ¬¡ã®4ã¤ãå«ã¾ãã¦ãã¾ãã
- MySpringBean.java CamelããJavaã®ã¡ã½ããå¼ã³åºãã®ãµã³ãã«ãå®è¡ããããã«æºåãããã¯ã©ã¹
- MySpringBootApplication.java Spring Bootã¢ããªã±ã¼ã·ã§ã³ã®èµ·åã«ä½¿ç¨ãããã¼ãã¹ãã©ãã
- MySpringBootRouter.java Camelã®è¨å®ãå«ã¾ããã¯ã©ã¹
- MySpringBootApplicationTest.java Camelããã¹ãããããã«å©ç¨ããã¯ã©ã¹
ãã®ä¸ã§è¦ãã¹ãã¯ã©ã¹ã¯MySpringBootRouter.javaã¨MySpringBootApplicationTest.javaã§ãã
ã¾ãã¯ãMySpringBootRouter.javaãè¦ã¦ããã¾ãããã
MySpringBootRouter.java
package com.redhat; import org.apache.camel.builder.RouteBuilder; import org.springframework.stereotype.Component; /** * A simple Camel route that triggers from a timer and calls a bean and prints to system out. * <p/> * Use <tt>@Component</tt> to make Camel auto detect this route when starting. */ @Component public class MySpringBootRouter extends RouteBuilder { @Override public void configure() { from("timer:hello?period={{timer.period}}").routeId("hello") .transform().method("myBean", "saySomething") .filter(simple("${body} contains 'foo'")) .to("log:foo") .end() .to("stream:out"); } }
ããã§ã¯Apache Camelã®ç¹å¾´ã§ããJava DSLã使ã£ãå¦çã確èªã§ãã¾ããApache Camelã§ã¯ã¡ã½ãããã§ã¼ã³ãå©ç¨ãã¦å¦çãçµã¿ç«ã¦ã¦ããã¾ããä½ããã¦ãããã¯èªãã°ãªãã¨ãªããããã§ãããã
{{}}ã§å²ããã¦ãé¨åã¯Spring-Bootã®æ©è½ã使ç¨ãã¦application.propertiesããå¤ãèªã¿è¾¼ã¾ãã¦ãã¾ãã
application.propertiesã«ã¯ timer.period=2000
ã¨æå®ããã¦ããããã timer:hello?period={{timer.period}}
ã¯å®éã«ã¯
timer:hello?period=2000
ã¨ãã¦è§£éããã¦ãã¾ãã
Apache Camelã§ã¯ã¢ã¸ã¥ã¼ã«ãçµã¿åããããã¨ã§å¦çã追å ã§ããããã¯Timerã³ã³ãã¼ãã³ãã§å®è£ ããã¦ãã¾ãã
Mavenä¾åé¢ä¿ã追å ãã¦ããªãã·ã§ã³ã追å ãã¦ããããã¨ã§åä½ãã¾ãã
æ £ãã¦ã人ã¯ã©ãããã³ã³ãã¼ãã³ããããã®ãããã©ã¡ã¼ã¿ã¼ã¨ãã¦ä½ãæå®ããã°ããã®ãããç¨åº¦ãããã®ã§ãããæ £ãã¦ãªã人ã¯éæ¹ã«æ®ãã¦ãã¾ãã¾ããåå¿è ã§ãããããããããã«Red Hatã§ã¯kaotoã¨ããRed Hat Build of Apache Camel 4.x åãéçºãã¼ã«ãæä¾ãã¦ãã¾ãã 詳細ã«ã¤ãã¦ã¯å¤å¸ãããæ¸ãã¦ãã ãã£ã¦ãã®ã§ãã¡ããåç §ãã¦ãã ããã
MySpringBootApplicationTest.java
ç¶ãã¦ãã¹ãã®æ¹ãè¦ã¦ããã¾ããApache Camelã§ã¯JUnitããã©ãã¼ããå½¢ã§ãã¹ãç¨ã®ãã¼ã«ãä»ãã¦ãã¾ãã
package com.redhat; import org.apache.camel.CamelContext; import org.apache.camel.ProducerTemplate; import org.apache.camel.builder.AdviceWith; import org.apache.camel.component.mock.MockEndpoint; import org.apache.camel.test.spring.junit5.CamelSpringBootTest; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest @CamelSpringBootTest public class MySpringBootApplicationTest { @Autowired private CamelContext camelContext; @Autowired private ProducerTemplate producerTemplate; @Test public void test() throws Exception { MockEndpoint mock = camelContext.getEndpoint("mock:stream:out", MockEndpoint.class); AdviceWith.adviceWith(camelContext, "hello", // intercepting an exchange on route r -> { // replacing consumer with direct component r.replaceFromWith("direct:start"); // mocking producer r.mockEndpoints("stream*"); } ); // setting expectations mock.expectedMessageCount(1); mock.expectedBodiesReceived("Hello World"); // invoking consumer producerTemplate.sendBody("direct:start", null); // asserting mock is satisfied mock.assertIsSatisfied(); } }
ãã¡ããä½ããããã¨ãã¦ããã®ãã¯ç°¡åã«ãããã®ã§ã¯ãªããã¨æãã¾ãã
AdviceWithã¯ã©ã¹ã®ä¸ã§Apache Camelã®ä¸èº«ã®è¨å®(fromã¨to)ãæ¸ãæãã¦ãã¾ãã ãã®çµæãå®è¡ãåºåãããå å®¹ãæ³å®éãã(mock#expectedBodiesReceivedã®å 容ã¨åãã)ã確èªãã¦ãã¾ãã
Apache Camelã¯ã¤ã³ãã°ã¬ã¼ã·ã§ã³ãã¼ã«ã¨ãã¦IN/OUTãåºããããããããã¹ããããããã§ãã
OpenShiftã¸ã®ãããã¤
ä»åã®Apache Camelã¯é常ã®Spring-Bootã¢ããªã±ã¼ã·ã§ã³ã®ãããååã®è¨äºãSpring-Bootã¢ããªã±ã¼ã·ã§ã³ã®bootable jarãOpenShiftã«ãããã¤ããã«ã¦æ¸ããã¨ããã®æé ã§ãããã¤ã§ãã¾ãã
ãã ãååã®è¨äºã§ãOpenShiftã¯CI/CDã«é¢ããæ©è½ãåãã¦ãããOpenShiftä¸ã§GitHubçããç´æ¥ã½ã¼ã¹ã³ã¼ããåå¾ãã¦ãã«ãããããããã¤ãããã¨ãã§ãã¾ãã ã¨æ¸ãã¾ãããããã¡ãã®èª¬æããã¦ããªããããä»åã¯ãã®èª¬æããããã¨æãã¾ãã
OpenShiftã¸ã®ã½ã¼ã¹ã³ã¼ããæå®ãã¦ãããã¤ããå ´åã®Mavenã®è¨å®
OpenShiftã¸ã®ãããã¤ã¯æè»ãªããããããããããã¤ããæ¹æ³ã¯ããã®ã§ãããã½ã¼ã¹ã³ã¼ããç´æ¥åå¾ããOpenShiftä¸ã§ãã«ããããããã¤ããããã«ä¸çªç°¡åãªæ¹æ³ã¯OpenShiftã®ã¤ã¡ã¼ã¸ã¹ããªã¼ã ã®ä»çµã¿ã使ãäºã§ãã 詳細ãªèª¬æã¯é¤ãã¾ããããã®ããã«ã¯Mavenã®pom.xmlã«openshiftã¨ããååã®ä»ããprofileãæºåãã¦ããå¿ è¦ãããã¾ãã ä»åã®ã¢ã¼ãã¿ã¤ãã§æå®ããããã¸ã§ã¯ãã§ã¯ãã§ã«è¨å®ããã¦ãã¾ãã
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> (ä¸ç¥) <profiles> <profile> <id>openshift</id> <build> <defaultGoal>install</defaultGoal> <plugins> <plugin> <groupId>org.eclipse.jkube</groupId> <artifactId>openshift-maven-plugin</artifactId> <version>1.16.2.redhat-00017</version> <executions> <execution> <goals> <goal>resource</goal> <goal>build</goal> <goal>apply</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </profile> </profiles> </project>
openshift-maven-pluginã¯fabric8-maven-plugin ããç½®ãæãããããã®ã§ããOpenShiftä¸ã®ãªã½ã¼ã¹ãæä½ãããã¨ãã§ãã¾ããã©ããããã¨ãã§ããã®ãã«ã¤ãã¦ã¯ããã¥ã¡ã³ããåç §ãã¦ãã ããã
ã³ãã³ãã©ã¤ã³ä¸ããåç´ã«githubã®ãªãã¸ããªãæå®ãã¦å®è¡ãããã¨ã§ãããã¤ãããã¨ãã§ãã¾ãã
oc new-app https://github.com/ssetoredhat/csb-app
ãã®è¨å®ã¯ä»ã®Spring-Bootã¢ããªã±ã¼ã·ã§ã³ãfat-jarãçæããã¢ããªã±ã¼ã·ã§ã³ã§ãæå¹ã§ããã½ã¼ã¹ã³ã¼ãããèªåçã«mavenã使ç¨ãã¦ãã«ãããããããã¤ããã¦ããã¾ãã
ããã
Apache Camelã®ããã¥ã¡ã³ãã®ç´¹ä»ããããã¸ã§ã¯ãã®å§ãæ¹ãOpenShiftã®ãããã¤ã¾ã§ãç°¡åã«èª¬æãã¾ããã ç°¡åã«è©¦ããã®ãå©ç¹ã ã¨æãã¾ãã®ã§ããã²åèã«ãã¦ã¿ã¦ãã ããã