209.4. Eclipse Kura 구성 요소
Camel 2.15에서 사용 가능
이 설명서 페이지에서는 Eclipse Kura M2M 게이트웨이를 사용한 Camel의 통합 옵션에 대해 설명합니다. Eclipse Kura에 Camel 경로를 배포하는 일반적인 이유는 메시징 M2M 게이트웨이에 엔터프라이즈 통합 패턴과 Camel 구성 요소를 제공하기 위한 것입니다. 예를 들어, Kura를 installed PI에 설치한 다음 Kura 서비스를 사용하여 해당 sensor에 연결된 센서의 온도를 읽고, 마지막으로 Camel EIP 및 구성 요소를 사용하여 현재 온도 값을 데이터 센터 서비스로 전달할 수 있습니다.
209.4.1. KuraRouter activator
Eclipse Kura에 배포된 번들은 일반적으로 번들 활성화기로 개발되었습니다. 따라서 Kura에 Apache Camel 경로를 배포하는 가장 쉬운 방법은 org.apache.camel.kura.KuraRouter
클래스를 포함하는 OSGi 번들을 생성하는 것입니다.
public class MyKuraRouter extends KuraRouter { @Override public void configure() throws Exception { from("timer:trigger"). to("netty-http:http://app.mydatacenter.com/api"); } }
KuraRouter
는 org.osgi.framework.BundleActivator
인터페이스를 구현하므로 Kura 번들 구성 요소 클래스를 생성하는 동안 시작
및 중지
방법을 등록해야 합니다.
Kura 라우터는 자체 OSGi 인식 CamelContext
를 시작합니다. 이는 KuraRouter
를 확장하는 모든 클래스에 전용 CamelContext
인스턴스가 있음을 의미합니다. OSGi 번들당 하나의 KuraRouter
를 배포하는 것이 좋습니다.
209.4.2. Deploying KuraRouter
Kura 라우터 클래스가 포함된 번들은 OSGi 매니페스트에서 다음 패키지를 가져와야 합니다.
Import-Package: org.osgi.framework;version="1.3.0", org.slf4j;version="1.6.4", org.apache.camel,org.apache.camel.impl,org.apache.camel.core.osgi,org.apache.camel.builder,org.apache.camel.model, org.apache.camel.component.kura
Camel 구성 요소가 런타임 수준에서 서비스로 해결되므로 경로에 사용하려는 모든 Camel 구성 요소 번들을 가져올 필요는 없습니다.
라우터 번들을 배포하기 전에 다음 Camel 코어 번들을 배포(Kura GoGo shell 사용)…에 배포(및 시작)했는지 확인하십시오.
install file:///home/user/.m2/repository/org/apache/camel/camel-core/2.15.0/camel-core-2.15.0.jar start <camel-core-bundle-id> install file:///home/user/.m2/repository/org/apache/camel/camel-core-osgi/2.15.0/camel-core-osgi-2.15.0.jar start <camel-core-osgi-bundle-id> install file:///home/user/.m2/repository/org/apache/camel/camel-kura/2.15.0/camel-kura-2.15.0.jar start <camel-kura-bundle-id>
…및 경로에서 사용하려는 모든 구성 요소:
install file:///home/user/.m2/repository/org/apache/camel/camel-stream/2.15.0/camel-stream-2.15.0.jar start <camel-stream-bundle-id>
그런 다음 라우터 번들을 배포합니다.
install file:///home/user/.m2/repository/com/example/myrouter/1.0/myrouter-1.0.jar start <your-bundle-id>
209.4.3. KuraRouter 유틸리티
Kura 라우터 기본 클래스는 많은 유용한 유틸리티를 제공합니다. 이 섹션에서는 각 항목을 살펴봅니다.
209.4.3.1. SLF4J logger
Kura는 로깅 목적으로ECDHEF4J facade를 사용합니다. 보호된 멤버 로그는
지정된 Kura 라우터와 관련된ECDHEF4J 로거 인스턴스를 반환합니다.
public class MyKuraRouter extends KuraRouter { @Override public void configure() throws Exception { log.info("Configuring Camel routes!"); ... } }
209.4.3.2. BundleContext
보호된 멤버 bundleContext
는 지정된 Kura 라우터와 관련된 번들 컨텍스트를 반환합니다.
public class MyKuraRouter extends KuraRouter { @Override public void configure() throws Exception { ServiceReference<MyService> serviceRef = bundleContext.getServiceReference(LogService.class.getName()); MyService myService = bundleContext.getService(serviceRef); ... } }
209.4.3.3. CamelContext
보호 멤버 camelContext
는 지정된 Kura 라우터와 관련된 CamelContext
입니다.
public class MyKuraRouter extends KuraRouter { @Override public void configure() throws Exception { camelContext.getStatus(); ... } }
209.4.3.4. ProducerTemplate
보호된 멤버 생산자Template
은 지정된 Camel 컨텍스트와 관련된 ProducerTemplate
인스턴스입니다.
public class MyKuraRouter extends KuraRouter { @Override public void configure() throws Exception { producerTemplate.sendBody("jms:temperature", 22.0); ... } }
209.4.3.5. ConsumerTemplate
보호된 멤버 consumerTemplate
은 지정된 Camel 컨텍스트와 연결된 ConsumerTemplate
인스턴스입니다.
public class MyKuraRouter extends KuraRouter { @Override public void configure() throws Exception { double currentTemperature = producerTemplate.receiveBody("jms:temperature", Double.class); ... } }
209.4.3.6. OSGi 서비스 확인자
OSGi service resolver (service(Class<T> serviceType)
)를 사용하여 OSGi 번들 컨텍스트에서 유형으로 서비스를 쉽게 검색할 수 있습니다.
public class MyKuraRouter extends KuraRouter { @Override public void configure() throws Exception { MyService myService = service(MyService.class); ... } }
service를 찾을 수 없는 경우 null
값이 반환됩니다. 서비스를 사용할 수 없는 경우 애플리케이션이 실패하는 경우 대신 requiredService(Class)
메서드를 사용합니다. 서비스를 찾을 수 없는 경우 requiredService
throws IllegalStateException
입니다.
public class MyKuraRouter extends KuraRouter { @Override public void configure() throws Exception { MyService myService = requiredService(MyService.class); ... } }
209.4.4. KuraRouter activator 콜백
Kura 라우터는 Camel 라우터의 작동 방식을 사용자 지정하는 데 사용할 수 있는 라이프사이클 콜백과 함께 제공됩니다. 예를 들어 이전이 시작되기 직전에 라우터와 연결된 CamelContext
인스턴스를 구성하려면 KuraRouter
클래스의 beforeStart
메서드를 덮어씁니다.
public class MyKuraRouter extends KuraRouter { ... protected void beforeStart(CamelContext camelContext) { OsgiDefaultCamelContext osgiContext = (OsgiCamelContext) camelContext; osgiContext.setName("NameOfTheRouter"); } }
209.4.5. ConfigurationAdmin에서 XML 경로 로드
경우에 따라 서버 구성에서 경로에 대한 XML 정의를 읽는 것이 좋습니다. 이는 OTA(Over-the-Air Redeployment) 비용이 발생할 수 있는 IoT 게이트웨이의 일반적인 시나리오입니다. 이러한 요구 사항을 해결하기 위해 각 KuraRouter
는 OSGi ConfigurationAdmin을 사용하여 kura.camel PID에서
속성을 찾습니다. 이 방법을 사용하면 배포된 kura.camel
-SUNDLE-SYMBOLIC-NAME.routeKuraRouter
당 Camel XML 경로 파일을 정의할 수 있습니다. 경로를 업데이트하려면 적절한 구성 속성을 편집하고 연결된 번들을 다시 시작합니다. kura.camel.BUNDLE-SYMBOLIC-NAME.route
속성의 내용은 Camel XML 경로 파일일 것으로 예상됩니다.
<routes xmlns="http://camel.apache.org/schema/spring"> <route id="loaded"> <from uri="direct:bar"/> <to uri="mock:bar"/> </route> </routes>
209.4.6. 선언적 OSGi 서비스로 Kura 라우터 배포
Kura 라우터를 선언적 OSGi 서비스로 배포하려면 KuraRouter
에서 제공하는 방법을 활성화
및 비활성화할
수 있습니다.
<scr:component name="org.eclipse.kura.example.camel.MyKuraRouter" activate="activate" deactivate="deactivate" enabled="true" immediate="true"> <implementation class="org.eclipse.kura.example.camel.MyKuraRouter"/> </scr:component>
209.4.7. 예를 들면 다음과 같습니다.
- Camel 구성
- 구성 요소
- 끝점
- 시작하기