Websocket 대신 Apache Camel에서 PubNub를 쉽게 사용

11845 단어 apache-camelPubNub
안녕하세요.저는 서무라고 합니다.
이번에는 IoT를 위한 BaaS PubNub에 Apache Camel에서 연결하는 방법을 적으세요.
PubNub의 경과 이해
어제는 3/11로 모인 밀카오 아저씨.Milkcocoa Meetup vol 8라는 학습회에 참가했다.
IoT를 향한 BaaS로 최근 자주 듣는Milkcocoa 이름으로, 이 분야 서비스에 관심이 있어 참여했지만, 스피커인 여러분이 말하는 내용은 직접 IoT라기보다는실시간 웹 서버로 밀카오를 활용한 기능(센서 시스템의 프레젠테이션도 있지만)이 많은데 제가 기대했던 것과는 조금 다르다고 생각합니다.
바로 이때, 마지막 스피커로 밀카오 에반니스트의 비슈크@n0bisuke씨, 천천히
"PubNub 아세요?"
"PubNub 멋있는 것 같은데?"
솔직히 밀카오가 졌을 수도 있어요.
"하지만 역시 BaaS로서 함께 뜨거워졌으면 좋겠어요."
(※ 기억력이 없어 미묘한 어조로 적는다)
(추서)
비슈톤은 나에게 실제 슬라이드의 URL을 주었다. 이것에 관해서는 슬라이드를 보십시오.
https://speakerdeck.com/n0bisuke/pubnubtomilkcocoa-milkcocoameetup-vol9-number-mlkcca-5fen
(추기는 여기까지)
이런 말을 듣고 록의 에반니스트라고 생각하면서 거기서 알았다PubNub.
BaaS에 실시간 웹 서버를 이전하는 추세
'Backend asa Service'라는 단어의 발음을 보면 더 과장된 것을 상상했지만, 스피커 여러분에게서 "더 쉽게 실시간 웹 서버로 사용할 수 있었으면 좋겠다"는 메시지를 받았다.처음에는'그러면 아파치 카멜의 웹소켓 구성 요소가 있었으면 좋겠다'고 생각했는데, 실제로 웹소켓을 처리할 때의 흙냄새는 알고 있었기 때문에 이 부분을 공인된 외부 서비스에 양도하는 것도 괜찮다고 생각했다.
PubNub에는 이미 Apache Camel용 구성 요소가 있습니다.
Apache Camel은 자바 플랫폼에서 실행되는 프로그램 라이브러리/서비스/형식/프로토콜 통합 프레임워크입니다.프로그램 라이브러리/서비스/포맷/프로토콜 사이의 n이 n에 대한 연결 및 변환 코드를 단독으로 쓰는 것은 매우 어렵기 때문에 n-x-n 같은 x로 만들어야 한다는 생각이 틀을 잡았다.
참고로 Apache Camel은 n-x의 부분을 구성 요소라고 합니다.
2016년 3월까지 프로젝트 외부에서 제작된 조립품도 200여개에 달했다.
Apache Camel: Components http://camel.apache.org/components.html
놀랍게도 오늘 처음 알게 된 퍼블유브는 외부에서 제작된 부품으로 이미 위에 실렸다.
Camel 기수로서 이걸 꼭 해봐야겠어요.
PubNub 준비
PubNub https://www.pubnub.com/

등록에 필요한 것은 우편 주소입니다.
특별한 포인트가 없어서 로그인이 완료되었기 때문에 생략합니다.
PubNub 어플리케이션 제작, 열쇠 획득
로그인한 후 [CREATE NEW APP] 버튼을 눌러 애플리케이션을 만들고 적절한 이름을 지정합니다.나는'마이토'를 결정했다.

응용 프로그램 상세 정보에 들어가면 각종 버튼 정보가 표시됩니다.이렇게 PubNub 측에서 준비를 마쳤습니다.

Apache Camel 준비
IDE에서 새 Maven 프로젝트를 만들고 종속성을 설명합니다.
(표준 빌드 도구 Maven이 있는 NetBeans IDE를 사용합니다.)
중앙창고에서 camel-pubnub를 검색하면 추가됩니다.
아파치 카멜 측 issue에는 slf4j-simple도 추가됐다.이렇게 하면 로그가 표준 출력으로 출력됩니다.
다음은 자동으로 생성된pom입니다.xml.
pom.xml
<?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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mycode</groupId>
    <artifactId>myiot</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <dependencies>
        <dependency>
            <groupId>io.rhiot</groupId>
            <artifactId>camel-pubnub</artifactId>
            <version>0.1.4</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>1.6.6</version>
        </dependency>
    </dependencies>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
</project>
PubNub 구성 요소 사용 확인
다음은camel-pubnub 구성 요소의 사용 방법입니다.
https://rhiot.gitbooks.io/rhiotdocumentation/content/cloudplatform/camel_components/camel_pubnub_component.html
Apache Camel은 액세스한 리소스를 URI로 기술해야 합니다.이 쓰기 방법을 알면 됩니다. General Uri format 근처를 방문하십시오.

기본적으로pubnub://pubsub:channel?options그리고 옵션에 3가지 키를 설정하면 사용할 수 있다.
실행 코드 쓰기
다음 코드 샘플 중
발송측에서 1초에 한 번씩 PubNub에 메일을 보냅니다.
PubNub에서 받은 정보를 수신하는 측면 표준 출력입니다.
App.java
package com.mycode.myiot;

import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.main.Main;

public class App {
    public static void main(String[] args) throws Exception{
        Main main = new Main();
        main.addRouteBuilder(new RouteBuilder(){
            @Override
            public void configure() throws Exception { // ここまでApache Camelの基本共通コード

                String pubKey = "ゆ○式"; // 有効な値を設定されたし
                String subKey = "一般"; // 有効な値を設定されたし
                String secKey = "完売"; // 有効な値を設定されたし
                String pubnubEndpointUri = String.format("pubnub://pubsub:channel?publisherKey=%s&subscriberKey=%s&secretKey=%s", pubKey,subKey,secKey);

                // 送信側のルール定義
                from("timer:foo") // 1秒ごとに実行
                        .setBody(constant("foo")) // 送信内容を文字列"foo"に設定
                        .to(pubnubEndpointUri); // PubNubへ送信

                // 受信側のルール定義
                from(pubnubEndpointUri) // PubNubから受信
                        .to("log:foo"); // 受信内容をログに出力する

            } // ここからApache Camelの基本共通コード
        });
        main.run();
    }
}
실행 결과

수신측에서 1초마다 포오가 흐르는 것을 알 수 있다.다만 이렇게 되면 아직 퍼블릭 서버를 통과한 느낌은 아닌 것 같아요.
리뷰 수신 부분을 시도한 상태에서 앱.자바를 실행합니다.다음은 발송 부분에 대한 댓글, 그리고 몇 개의 앱이다.자바를 실행합니다.이를 통해 1쌍 이상의 Pub/Sub를 간단히 만들 수 있습니다.
이 경우 각 로그가 출력되므로 Apache Camel에서 PubNub 서버를 사용할 수 있습니다.
감상
편리한 프로그램을 만들 때 웹 소켓 서버를 만들 필요가 없을 것 같습니다.
반면 지금까지는'웹소켓을 쓰면 어떻게 해볼 수 있을까'라는 생각에 그쳐 쉽게 이뤄졌다고 생각한다.사용자를 식별하는 기능을 검증해야 한다.
굉장히 개인적인 소감...
최근 유행하는 Google 유행의 캡처를 미리 게재합니다.(실제 페이지 클릭 이미지)

아파치카멜의 스케일링 감각을 잘 아는 자신의 관점에서도 펍 누브의 스케일링 감각은 상당히 괜찮은 편이다.
(밀카오는 동명 상대가 많다고 해서 포기했다.)
펍펍이나 아파치카멜 모두 국내에서는'아는 사람만 안다'는 제품이다.그러나 상대적으로 이름이 알려지지 않은 사람들 사이에는 이미 조립품이 준비되어 있어 해외 기량의 거대함과 선진성을 실감할 수 있다.
밀카오의 경우 현재 상태라면 아파치 카멜에 어떻게 대처할지 고민하지 않고 자신도 별다른 요구는 없지만,'Pub을 따라잡고 뛰어넘는다'는 이론으로 한다면
결과적으로 이렇게 섬세하게 대응하는 상황에서 외국 제품과는 차이가 있겠지.
밀카오뿐만 아니라 국산품 전부라면.어떡하죠?(가볍게 마무리)

좋은 웹페이지 즐겨찾기