210.4. Eclipse Kura 구성 요소
Camel 2.15부터 사용 가능
이 문서 페이지에서는 Eclipse Kura M2M 게이트웨이와 Camel의 통합 옵션에 대해 설명합니다. Eclipse Kura에 Camel 경로를 배포하는 일반적인 이유는 메시징 M2M 게이트웨이에 엔터프라이즈 통합 패턴 및 Camel 구성 요소를 제공하는 것입니다. 예를 들어 R Cryostat PI에 Kura를 설치한 다음 Kura 서비스를 사용하여 R Cryostat PI에 연결된 센서에서 온도를 읽고 Camel EIP 및 구성 요소를 사용하여 현재 온도 값을 데이터 센터 서비스로 전달할 수 있습니다.
210.4.1. KuraRouter activator
Eclipse Kura에 배포된 번들은 일반적으로 번들 작동기로 개발됩니다. 따라서 Apache Camel 경로를 Kura에 배포하는 가장 쉬운 방법은 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
를 배포하는 것이 좋습니다.
210.4.2. 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>
210.4.3. KuraRouter 유틸리티
Kura router base class provides many useful utilities. This section explores each of them.
210.4.3.1. SLF4J 로거
Kura는 로깅을 위해 SLF4J facade를 사용합니다. 보호된 멤버 로그
는 지정된 Kura 라우터와 관련된 SLF4J 로거 인스턴스를 반환합니다.
public class MyKuraRouter extends KuraRouter { @Override public void configure() throws Exception { log.info("Configuring Camel routes!"); ... } }
210.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); ... } }
210.4.3.3. CamelContext
보호된 멤버 camelContext
는 지정된 Kura 라우터와 관련된 CamelContext
입니다.
public class MyKuraRouter extends KuraRouter { @Override public void configure() throws Exception { camelContext.getStatus(); ... } }
210.4.3.4. ProducerTemplate
보호된 멤버 producerTemplate
은 지정된 Camel 컨텍스트와 연결된 ProducerTemplate
인스턴스입니다.
public class MyKuraRouter extends KuraRouter { @Override public void configure() throws Exception { producerTemplate.sendBody("jms:temperature", 22.0); ... } }
210.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); ... } }
210.4.3.6. OSGi 서비스 확인자
OSGi 서비스 확인자(service(Class<T> serviceType)
를 사용하여 OSGi 번들 컨텍스트에서 유형별로 서비스를 쉽게 검색할 수 있습니다.
public class MyKuraRouter extends KuraRouter { @Override public void configure() throws Exception { MyService myService = service(MyService.class); ... } }
서비스가 없으면 null
값이 반환됩니다. 서비스를 사용할 수 없는 경우 애플리케이션이 실패하려면 대신 requiredService(Class)
메서드를 사용합니다. 서비스를 찾을 수 없는 경우 requiredService
에서 IllegalStateException
이 발생합니다.
public class MyKuraRouter extends KuraRouter { @Override public void configure() throws Exception { MyService myService = requiredService(MyService.class); ... } }
210.4.4. KuraRouter activator 콜백
Kura 라우터는 Camel 라우터의 작동 방식을 사용자 정의하는 데 사용할 수 있는 라이프사이클 콜백과 함께 제공됩니다. 예를 들어 이전이 시작되기 직전에 라우터와 연결된 CamelContext
인스턴스를 구성하려면 KuraRouter
클래스의 start
메서드를 재정의합니다.
public class MyKuraRouter extends KuraRouter { ... protected void beforeStart(CamelContext camelContext) { OsgiDefaultCamelContext osgiContext = (OsgiCamelContext) camelContext; osgiContext.setName("NameOfTheRouter"); } }
210.4.5. ConfigurationAdmin에서 XML 경로 로드
서버 구성에서 경로의 XML 정의를 읽는 것이 필요한 경우도 있습니다. 이는 무선 재배포 비용이 중요한 IoT 게이트웨이의 일반적인 시나리오입니다. 이 요구 사항을 해결하기 위해 각 KuraRouter
는 OSGi ConfigurationAdmin을 사용하여 kura.camel
PID에서 kura.camel PID에서 kura.camel.BUNDLE-SYMBOLIC-NAME.route
속성을 찾습니다. 이 방법을 사용하면 배포된 KuraRouter
당 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>
210.4.6. Kura 라우터를 선언 OSGi 서비스로 배포
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>
210.4.7. 예를 들면 다음과 같습니다.
- Camel 구성
- Component
- endpoint
- 시작하기