Apache Camel 구성 요소 참조


Red Hat Fuse 7.6

Camel 구성 요소에 대한 구성 참조

초록

Apache Camel에는 100개 이상의 구성 요소가 있으며 각 구성 요소는 구성할 수 있습니다. 이 가이드에서는 각 구성 요소의 설정을 설명합니다.

1장. 구성 요소 개요

이 장에서는 Apache Camel에 사용할 수 있는 모든 구성 요소에 대한 요약 정보를 제공합니다.

1.1. 컨테이너 유형

Red Hat Fuse는 Camel 애플리케이션을 배포할 수 있는 다양한 컨테이너 유형을 제공합니다.

  • Spring Boot
  • Apache Karaf
  • JBoss EAP(JBoss Enterprise Application Platform)

또한 Camel 애플리케이션을 containerless 로 실행할 수 있습니다. 즉, Camel 애플리케이션이 특별한 컨테이너 없이 JVM에서 직접 실행됩니다.

Fuse는 한 컨테이너에서 Camel 구성 요소를 지원할 수 있지만 다른 컨테이너는 지원하지 않는 경우가 있습니다. 이에 대한 여러 가지 이유가 있지만 경우에 따라 구성 요소가 모든 컨테이너 유형에 적합하지 않습니다. 예를 들어, camel-ejb 구성 요소는 Java EE(즉, JBoss EAP)용으로 특별히 설계되었으며 다른 컨테이너 유형에서는 지원되지 않습니다.

1.2. 지원되는 구성 요소

다음 키를 확인합니다.

Expand
기호설명

지원됨

지원되지 않거나 아직 지원되지 않음

deprecated

향후 릴리스에서 제거 가능

표 1.1. “Apache Camel 구성 요소 지원 매트릭스” 어떤 컨테이너에서 지원되는 Camel 구성 요소에 대한 포괄적인 세부 정보를 제공합니다.

Expand
표 1.1. Apache Camel 구성 요소 지원 매트릭스
구성 요소유형ContainerlessSpring Boot 1.xSpring Boot 2.xKarafJBoss EAP

activemq-camel

끝점

camel-ahc

끝점

camel-ahc-ws

끝점

camel-ahc-wss

끝점

camel-amqp

끝점

camel-apns

끝점

camel-asn1

데이터 형식

camel-as2

끝점

camel-asterisk

끝점

camel-atmos

끝점

camel-atmosphere-websocket

끝점

camel-atom

끝점

camel-atomix

끝점

camel-avro

끝점

camel-avro

데이터 형식

camel-aws

끝점

camel-azure

끝점

camel-bam

끝점

deprecated

deprecated

deprecated

deprecated

camel-barcode

데이터 형식

camel-base64

데이터 형식

camel-bean

끝점

camel-bean

언어

camel-bean-validator

끝점

camel-beanio

데이터 형식

camel-beanstalk

끝점

camel-binding

끝점

deprecated

deprecated

deprecated

deprecated

camel-bindy

끝점

camel-bindy

데이터 형식

camel-blueprint

끝점

camel-bonita

끝점

camel-boon

데이터 형식

camel-box

끝점

camel-braintree

끝점

camel-browse

끝점

camel-cache

끝점

deprecated

deprecated

deprecated

deprecated

camel-caffeine

끝점

camel-castor

데이터 형식

deprecated

deprecated

deprecated

deprecated

camel-cdi

끝점

deprecated

camel-chronicle-engine

끝점

camel-chunk

끝점

camel-class

끝점

camel-cm-sms

끝점

camel-cmis

끝점

camel-coap

끝점

camel-cometd

끝점

camel-constant

언어

camel-context

끝점

deprecated

camel-consul

끝점

camel-controlbus

끝점

camel-couchbase

끝점

camel-couchdb

끝점

camel-cql

끝점

camel-crypto

끝점

camel-crypto

데이터 형식

camel-crypto-cms

끝점

camel-csv

데이터 형식

camel-cxf

끝점

camel-cxf-transport

끝점

camel-dataformat

끝점

camel-dataset

끝점

camel-digitalocean

끝점

camel-direct

끝점

camel-direct-vm

끝점

camel-disruptor

끝점

camel-dns

끝점

camel-docker

끝점

camel-dozer

끝점

camel-drill

끝점

camel-dropbox

끝점

camel-eclipse

 

deprecated

camel-ehcache

끝점

camel-ejb

끝점

camel-el

언어

deprecated

camel-elasticsearch

끝점

camel-elasticsearch5

끝점

camel-elasticsearch-rest

끝점

camel-elsql

끝점

camel-etcd

끝점

camel-eventadmin

끝점

camel-exchangeProperty

언어

camel-exec

끝점

camel-facebook

끝점

camel-fhir

데이터 형식

camel-fhir

끝점

camel-file

끝점

camel-file

언어

camel-flatpack

끝점

camel-flatpack

데이터 형식

camel-flink

끝점

camel-fop

끝점

camel-freemarker

끝점

camel-ftp

끝점

camel-gae

끝점

deprecated

camel-ganglia

끝점

camel-geocoder

끝점

camel-git

끝점

camel-github

끝점

camel-google-bigquery

끝점

camel-google-calendar

끝점

camel-google-drive

끝점

camel-google-mail

끝점

camel-google-pubsub

끝점

camel-google-sheets

끝점

camel-grape

끝점

camel-groovy

언어

camel-groovy-dsl

 

deprecated

camel-grpc

끝점

camel-guava-eventbus

끝점

camel-guice

끝점

deprecated

deprecated

deprecated

camel-gzip

데이터 형식

camel-hawtdb

끝점

deprecated

deprecated

deprecated

deprecated

camel-hazelcast

끝점

camel-hbase

끝점

camel-hdfs

끝점

deprecated

camel-hdfs2

끝점

camel-header

언어

camel-headersmap

 

camel-hessian

데이터 형식

deprecated

deprecated

deprecated

deprecated

deprecated

camel-hipchat

끝점

camel-hl7

데이터 형식

camel-http

끝점

deprecated

deprecated

deprecated

camel-http4

끝점

camel-hystrix

끝점

camel-ibatis

끝점

deprecated

camel-ical

데이터 형식

camel-iec60870

끝점

camel-ignite

끝점

camel-imap

끝점

camel-infinispan

끝점

camel-influxdb

끝점

camel-ipfs

끝점

camel-irc

끝점

camel-ironmq

끝점

camel-jacksonxml

데이터 형식

camel-jasypt

끝점

camel-javaspace

끝점

deprecated

camel-jaxb

데이터 형식

camel-jbpm

끝점

camel-jcache

끝점

camel-jcifs

끝점

camel-jclouds

끝점

camel-jcr

끝점

camel-jdbc

끝점

camel-jetty

끝점

deprecated

deprecated

deprecated

deprecated

camel-jetty8

끝점

camel-jetty9

끝점

camel-jgroups

끝점

camel-jibx

데이터 형식

camel-jing

끝점

camel-jira

끝점

camel-jms

끝점

camel-jmx

끝점

camel-jolt

끝점

camel-josql

끝점

deprecated

deprecated

deprecated

deprecated

camel-jpa

끝점

camel-jsch

끝점

camel-json-fastjson

데이터 형식

camel-json-gson

데이터 형식

camel-json-jackson

데이터 형식

camel-json-johnzon

데이터 형식

camel-json-validator

끝점

camel-json-xstream

데이터 형식

camel-jsonpath

언어

camel-jt400

끝점

camel-juel

끝점

deprecated

deprecated

deprecated

deprecated

camel-jxpath

언어

deprecated

camel-kafka

끝점

camel-kestrel

끝점

deprecated

deprecated

deprecated

deprecated

camel-krati

끝점

deprecated

deprecated

deprecated

deprecated

camel-kubernetes

끝점

camel-kura

 

camel-ldap

끝점

camel-ldif

끝점

camel-leveldb

끝점

camel-linkedin

끝점

camel-log

끝점

camel-lpr

끝점

camel-lra

 

camel-lucene

끝점

camel-lumberjack

끝점

camel-lzf

데이터 형식

camel-master

 

camel-mail

끝점

camel-metrics

끝점

camel-micrometer

끝점

camel-milo

끝점

camel-mime-multipart

데이터 형식

camel-mina

끝점

deprecated

camel-mina2

끝점

camel-mllp

끝점

camel-mock

끝점

camel-mongodb

끝점

camel-mongodb-gridfs

끝점

camel-mongodb3

끝점

camel-mqtt

끝점

deprecated

deprecated

deprecated

deprecated

deprecated

camel-msv

끝점

camel-mustache

끝점

camel-mvel

끝점

camel-mvel

언어

camel-mybatis

끝점

camel-nagios

끝점

camel-nats

끝점

camel-netty

끝점

deprecated

deprecated

deprecated

camel-netty-http

끝점

deprecated

deprecated

deprecated

camel-netty4

끝점

camel-netty4-http

끝점

camel-nsq

끝점

camel-ognl

언어

camel-olingo2

끝점

camel-olingo4

끝점

camel-openshift

끝점

deprecated

camel-openstack

끝점

camel-opentracing

 

camel-optaplanner

끝점

camel-paho

끝점

camel-paxlogging

끝점

camel-pdf

끝점

camel-pgevent

끝점

camel-pgp

데이터 형식

camel-php

언어

deprecated

deprecated

deprecated

deprecated

camel-pop3

끝점

camel-printer

끝점

Camel-properties

끝점

camel-protobuf

데이터 형식

camel-pubnub

끝점

camel-pulsar

끝점

camel-python

언어

deprecated

deprecated

deprecated

deprecated

camel-quartz

끝점

deprecated

camel-quartz2

끝점

camel-quickfix

끝점

camel-rabbitmq

끝점

camel-reactive-streams

끝점

camel-reactor

 

camel-ref

끝점

camel-ref

언어

camel-rest

끝점

camel-rest-api

끝점

camel-rest-openapi

camel-rest-swagger

끝점

camel-restlet

끝점

camel-ribbon

 

camel-rmi

끝점

camel-routebox

끝점

deprecated

camel-rss

끝점

camel-rss

데이터 형식

camel-ruby

언어

deprecated

deprecated

deprecated

deprecated

camel-rx

끝점

deprecated

deprecated

deprecated

deprecated

camel-rxjava2

끝점

camel-saga

끝점

camel-salesforce

끝점

camel-sap

끝점

camel-sap-netweaver

끝점

camel-saxon

끝점

camel-scala

끝점

deprecated

deprecated

deprecated

deprecated

camel-scheduler

끝점

camel-schematron

끝점

camel-scp

끝점

camel-scr

끝점

deprecated

deprecated

camel-script

끝점

deprecated

deprecated

deprecated

deprecated

deprecated

camel-seda

끝점

Camel-serialization

데이터 형식

camel-service

끝점

camel-servicenow

끝점

camel-servlet

끝점

camel-servletlistener

끝점

deprecated

deprecated

deprecated

deprecated

camel-sftp

끝점

camel-shiro

끝점

camel-simple

언어

camel-sip

끝점

camel-sjms

끝점

camel-sjms2

끝점

camel-slack

끝점

camel-smpp

끝점

camel-snakeyaml

끝점

camel-snmp

끝점

camel-soapjaxb

데이터 형식

camel-solr

끝점

camel-spark

끝점

camel-spark-rest

끝점

camel-spel

언어

camel-splunk

끝점

camel-spring

끝점

camel-spring-batch

끝점

camel-spring-boot

끝점

camel-spring-cloud

 

camel-spring-cloud-consul

끝점

camel-spring-cloud-netflix

 

camel-spring-cloud-zookeeper

끝점

camel-spring-event

끝점

camel-spring-integration

끝점

camel-spring-javaconfig

끝점

camel-spring-ldap

끝점

camel-spring-redis

끝점

camel-spring-security

끝점

camel-spring-ws

끝점

camel-sql

끝점

camel-sql-stored

끝점

camel-ssh

끝점

camel-stax

끝점

camel-stomp

끝점

camel-stream

끝점

camel-string

데이터 형식

camel-string-template

끝점

camel-stub

끝점

camel-swagger

끝점

deprecated

deprecated

camel-openapi-java

끝점

camel-swagger-java

끝점

camel-syslog

데이터 형식

camel-tagsoup

끝점

camel-tarfile

데이터 형식

camel-telegram

끝점

camel-thrift

끝점

camel-thrift

데이터 형식

camel-tika

끝점

camel-timer

끝점

camel-tokenize

언어

camel-twilio

끝점

camel-twitter

끝점

camel-undertow

끝점

camel-univocity-csv

데이터 형식

camel-univocity-fixed

데이터 형식

camel-univocity-tsv

데이터 형식

camel-urlrewrite

끝점

deprecated

deprecated

deprecated

deprecated

camel-validator

끝점

camel-velocity

끝점

camel-vertx

끝점

camel-vm

끝점

camel-weather

끝점

camel-web3j

끝점

camel-websocket

끝점

camel-wordpress

끝점

camel-xchange

끝점

camel-xmlbeans

데이터 형식

deprecated

deprecated

deprecated

deprecated

camel-xmljson

데이터 형식

deprecated

deprecated

deprecated

deprecated

deprecated

camel-xmlrpc

끝점

camel-xmlrpc

데이터 형식

camel-xmlsecurity

끝점

camel-xmpp

끝점

camel-xpath

언어

camel-xquery

끝점

camel-xquery

언어

camel-xslt

끝점

camel-xstream

데이터 형식

camel-xtokenize

언어

camel-yaml-snakeyaml

데이터 형식

camel-yammer

끝점

camel-yql

끝점

camel-zendesk

끝점

camel-zip

데이터 형식

camel-zipfile

데이터 형식

camel-zipkin

끝점

camel-zookeeper

끝점

camel-zookeeper-master

끝점

2장. ActiveMQ

2.1. ActiveMQ Component

ActiveMQ 구성 요소를 사용하면 메시지를 JMS Queue 또는 Topic으로 보내거나 Apache ActiveMQ 를 사용하여 JMS Queue 또는 Topic에서 사용할 메시지를 보낼 수 있습니다.

이 구성 요소는 177장. JMS 구성 요소 를 기반으로 하며 Spring의 JmsTemplate 을 사용하여 소비하기 위해 MessageListenerContainer 를 사용하여 선언적 트랜잭션에 대해 Spring의 JMS 지원을 사용합니다. 177장. JMS 구성 요소 구성 요소의 모든 옵션이 이 구성 요소에도 적용됩니다.

이 구성 요소를 사용하려면 camel-core.jar,camel-spring.jarcamel-jms.jar 와 같은 모든 Apache Camel 종속 항목과 함께 클래스 경로에 activemq.jar 또는 activemq-core.jar 가 있는지 확인하십시오.

트랜잭션 및 캐싱

JMS 와 함께 트랜잭션을 사용하는 경우 성능에 영향을 줄 수 있으므로 JMS가 포함된 트랜잭션을 사용하는 경우 JMS 페이지에서 아래 섹션 트랜잭션 및 캐시 수준 을 참조하십시오.

2.2. URI 형식

activemq:[queue:|topic:]destinationName

여기서 destinationName 은 ActiveMQ 대기열 또는 주제 이름입니다. 기본적으로 destinationName 은 큐 이름으로 해석됩니다. 예를 들어 큐에 연결하려면 FOO.BAR 을 사용합니다.

activemq:FOO.BAR

원하는 경우 선택적 queue: 접두사를 포함할 수 있습니다.

activemq:queue:FOO.BAR

항목에 연결하려면 topic: 접두사를 포함해야 합니다. 예를 들어 주제, Stocks.Prices 에 연결하려면 다음을 사용합니다.

activemq:topic:Stocks.Prices

2.3. 옵션

이 구성 요소에도 적용되는 모든 옵션이 적용되므로 177장. JMS 구성 요소 구성 요소의 옵션을 참조하십시오.

2.4. EAP 배포용 Camel

이 구성 요소는 Red Hat JBoss EAP(JBoss Enterprise Application Platform) 컨테이너에서 단순화된 배포 모델을 제공하는 Camel on EAP(Wildfly Camel) 프레임워크에서 지원합니다.

포함된 브로커 또는 외부 브로커와 함께 작동하도록 ActiveMQ Camel 구성 요소를 구성할 수 있습니다. JBoss EAP 컨테이너에 브로커를 포함하려면 EAP 컨테이너 구성 파일에서 ActiveMQ 리소스 어댑터를 구성하고 ActiveMQ 리소스 어댑터 구성 을 참조하십시오.

2.5. 연결 팩토리 구성

다음 테스트 사례 는 ActiveMQ 연결에 사용되는 brokerURL 을 지정하는 동안 activeMQComponent() 메서드 를 사용하여 ActiveMQ Component를 CamelContext 에 추가하는 방법을 보여줍니다.

camelContext.addComponent("activemq", activeMQComponent("vm://localhost?broker.persistent=false"));

2.6. Spring XML을 사용하여 연결 팩토리 구성

ActiveMQComponent에서 다음과 같이 ActiveMQ 브로커 URL을 구성할 수 있습니다.

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
       http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">

  <camelContext xmlns="http://camel.apache.org/schema/spring">
  </camelContext>

  <bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent">
    <property name="brokerURL" value="tcp://somehost:61616"/>
  </bean>

</beans>

2.7. 연결 풀링 사용

Camel을 사용하여 ActiveMQ 브로커로 전송하는 경우 풀링된 연결 팩토리를 사용하여 JMS 연결, 세션 및 생산자의 효율적인 풀링을 처리하는 것이 좋습니다. 이 내용은 ActiveMQ Spring Support 페이지에 설명되어 있습니다.

Maven으로 Jencks AMQ 풀을 캡처할 수 있습니다.

    <dependency>
      <groupId>org.apache.activemq</groupId>
      <artifactId>activemq-pool</artifactId>
      <version>5.3.2</version>
    </dependency>

그런 다음 다음과 같이 activemq 구성 요소를 설정합니다.

    <bean id="jmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
        <property name="brokerURL" value="tcp://localhost:61616" />
    </bean>

    <bean id="pooledConnectionFactory"    class="org.apache.activemq.pool.PooledConnectionFactory" init-method="start" destroy-method="stop">
        <property name="maxConnections" value="8" />
        <property name="connectionFactory" ref="jmsConnectionFactory" />
    </bean>

    <bean id="jmsConfig" class="org.apache.camel.component.jms.JmsConfiguration">
        <property name="connectionFactory" ref="pooledConnectionFactory"/>
        <property name="concurrentConsumers" value="10"/>
    </bean>

    <bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent">
        <property name="configuration" ref="jmsConfig"/>
    </bean>
참고

풀링된 연결 팩토리의 initdestroy 메서드를 확인합니다. 이는 연결 풀이 올바르게 시작되고 종료되었는지 확인하는 것이 중요합니다.

그런 다음 PooledConnectionFactory 가 동시에 사용 중인 최대 8개의 연결이 있는 연결 풀을 생성합니다. 각 연결은 여러 세션에서 공유할 수 있습니다. 연결당 최대 세션 수를 구성하는 데 사용할 수 있는 maxActive 옵션이 있습니다. 기본값은 500 입니다. ActiveMQ 5.7 이후 옵션은 용도를 보다 잘 반영하기 위해 옵션이 변경되었으며 maxActiveSessionPerConnection 로 이름이 지정되었습니다. concurrentConsumersmaxConnections 보다 더 높은 값으로 설정되어 있습니다. 이는 각 소비자가 세션을 사용하고 있으며 세션으로서 동일한 연결을 공유할 수 있으므로 이는 괜찮습니다. 이 예제에서는 8 * 500 = 4000 활성 세션을 동시에 가질 수 있습니다.

2.8. 경로에서 MessageListener POJO 호출

ActiveMQ 구성 요소는 또한 JMS MessageListener에서 프로세서 로 도우미 유형 변환기 를 제공합니다. 즉, 43장. 빈 구성 요소 구성 요소는 모든 경로 내에서 직접 JMS MessageListener 빈을 호출할 수 있습니다.

예를 들어 다음과 같이 JMS에서 MessageListener를 생성할 수 있습니다.

public class MyListener implements MessageListener {
   public void onMessage(Message jmsMessage) {
       // ...
   }
}

그런 다음 다음과 같이 경로에 사용하십시오.

from("file://foo/bar").
  bean(MyListener.class);

즉, Apache Camel 구성 요소를 재사용하고 JMS MessageListener POJO\에 쉽게 통합할 수 있습니다!

2.9. ActiveMQ 대상 옵션 사용

ActiveMQ 5.6에서 사용 가능

"destination." 접두사를 사용하여 끝점 URI에서 대상 옵션 을 구성할 수 있습니다. 예를 들어 소비자를 배타적으로 표시하고 prefetch 크기를 50으로 설정하려면 다음과 같이 수행할 수 있습니다.

<camelContext xmlns="http://camel.apache.org/schema/spring">
  <route>
    <from uri="file://src/test/data?noop=true"/>
    <to uri="activemq:queue:foo"/>
  </route>
  <route>
    <!-- use consumer.exclusive ActiveMQ destination option, notice we have to prefix with destination. -->
    <from uri="activemq:foo?destination.consumer.exclusive=true&amp;destination.consumer.prefetchSize=50"/>
    <to uri="mock:results"/>
  </route>
</camelContext>

2.10. 권고 메시지 사용

ActiveMQ는 사용할 수 있는 항목에 배치된 권고 메시지 를 생성할 수 있습니다. 이러한 메시지는 느린 소비자를 감지하거나 통계(일별 메시지/생성된 메시지 수 등)를 작성하는 경우에 알림을 보내는 데 도움이 될 수 있습니다. 다음 Spring DSL 예제에서는 주제에서 메시지를 읽는 방법을 보여줍니다.

<route>
	<from uri="activemq:topic:ActiveMQ.Advisory.Connection?mapJmsMessage=false" />
	<convertBodyTo type="java.lang.String"/>
	<transform>
	     <simple>${in.body}&#13;</simple>
	</transform>
	<to uri="file://data/activemq/?fileExist=Append&ileName=advisoryConnection-${date:now:yyyyMMdd}.txt" />
</route>

큐에서 메시지를 사용하는 경우 data/activemq 폴더에 다음 파일이 표시됩니다.If you consume a message on a queue, you should see the following files under data/activemq folder:

advisoryConnection-20100312.txt advisoryProducer-20100312.txt

문자열을 포함하는 경우:

      ActiveMQMessage {commandId = 0, responseRequired = false, messageId = ID:dell-charles-3258-1268399815140
      -1:0:0:0:221, originalDestination = null, originalTransactionId = null, producerId = ID:dell-charles-
      3258-1268399815140-1:0:0:0, destination = topic://ActiveMQ.Advisory.Connection, transactionId = null,
      expiration = 0, timestamp = 0, arrival = 0, brokerInTime = 1268403383468, brokerOutTime = 1268403383468,
      correlationId = null, replyTo = null, persistent = false, type = Advisory, priority = 0, groupID = null,
      groupSequence = 0, targetConsumerId = null, compressed = false, userID = null, content = null,
      marshalledProperties = org.apache.activemq.util.ByteSequence@17e2705, dataStructure = ConnectionInfo
      {commandId = 1, responseRequired = true, connectionId = ID:dell-charles-3258-1268399815140-2:50,
      clientId = ID:dell-charles-3258-1268399815140-14:0, userName = , password = *****,
      brokerPath = null, brokerMasterConnector = false, manageable = true, clientMaster = true},
      redeliveryCounter = 0, size = 0, properties = {originBrokerName=master, originBrokerId=ID:dell-charles-
      3258-1268399815140-0:0, originBrokerURL=vm://master}, readOnlyProperties = true, readOnlyBody = true,
      droppable = false}

2.11. 구성 요소 JAR 가져오기

이 종속성이 필요합니다.

  • activemq-camel

ActiveMQ는 ActiveMQ 프로젝트 와 함께 릴리스된 177장. JMS 구성 요소 구성 요소의 확장입니다.

<dependency>
  <groupId>org.apache.activemq</groupId>
  <artifactId>activemq-camel</artifactId>
  <version>5.6.0</version>
</dependency>

3장. AHC 구성 요소

Camel 버전 2.8에서 사용 가능

ahc: 구성 요소는 외부 HTTP 리소스를 사용하기 위해 HTTP 기반 엔드포인트를 제공합니다(HTTP를 사용하여 외부 서버를 호출하는 클라이언트로).
구성 요소는 Async Http Client 라이브러리를 사용합니다.

Maven 사용자는 이 구성 요소를 위해 다음 종속성을 pom.xml 에 추가해야 합니다.

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-ahc</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>

3.1. URI 형식

ahc:http://hostname[:port][/resourceUri][?options]
ahc:https://hostname[:port][/resourceUri][?options]

는 기본적으로 HTTP용 포트 80 및 443을 HTTPS에 사용합니다.

다음 형식 ?option=value&option=value&…​로 URI에 쿼리 옵션을 추가할 수 있습니다.

3.2. AhcEndpoint 옵션

AHC 끝점은 URI 구문을 사용하여 구성됩니다.

ahc:httpUri

다음 경로 및 쿼리 매개변수를 사용합니다.

3.2.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

httpUri

required: http://hostname:port/path과 같이 사용할 URI

 

URI

3.2.2. 쿼리 매개변수(13 매개변수):

Expand
이름설명기본값유형

bridgeEndpoint (producer)

옵션이 true인 경우 Exchange.HTTP_URI 헤더가 무시되고 요청 끝점의 URI를 사용합니다. 또한 AhcProducer가 모든 오류 응답을 다시 보낼 수 있도록 throwExceptionOnFailure를 false로 설정할 수도 있습니다.

false

boolean

bufferSize (producer)

Camel과 AHC Client 간에 데이터를 전송할 때 사용되는 초기 메모리 버퍼 크기입니다.

4096

int

connectionClose (producer)

Connection Close 헤더를 HTTP 요청에 추가해야 하는지 정의합니다. 이 매개변수는 기본적으로 false입니다.

false

boolean

cookieHandler (producer)

HTTP 세션을 유지 관리하도록 쿠키 처리기 구성

 

CookieHandler

headerFilterStrategy (producer)

사용자 지정 HeaderFilterStrategy를 사용하여 Camel 메시지와의 헤더를 필터링합니다.

 

HeaderFilterStrategy

throwExceptionOnFailure (producer)

원격 서버에서 응답이 실패한 경우 AhcOperationFailedException의 throw를 비활성화하는 옵션입니다. 이를 통해 HTTP 상태 코드와 관계없이 모든 응답을 얻을 수 있습니다.

true

boolean

transferException (producer)

소비자 측에서 Exchange가 실패하고 발생한 Exception이 애플리케이션/x-java-serialized-object 콘텐츠 유형으로 응답에서 직렬화된 경우 (예: Jetty 또는 Servlet Camel 구성 요소 사용) 생산자 측에서 예외는 AhcOperationFailedException 대신 deserialize되고 그대로 발생합니다. 원인된 예외는 직렬화해야 합니다. 이 설정은 기본적으로 꺼져 있습니다. 이를 활성화하면 Java가 요청에서 Java로 들어오는 데이터를 역직렬화하고 잠재적인 보안 위험이 될 수 있다는 점에 유의하십시오.

false

boolean

바인딩 (advanced)

AHC와 Camel 간에 바인딩하는 방법을 제어할 수 있는 사용자 지정 AhcBinding을 사용합니다.

 

AhcBinding

clientConfig (advanced)

사용자 지정 com.ning.http.client.AsyncHttpClient 인스턴스를 사용하도록 AsyncHttpClient를 구성합니다.

 

AsyncHttpClientConfig

clientConfigOptions (고급)

맵의 키/값을 사용하여 AsyncHttpClientConfig를 구성하려면 다음을 수행합니다.

 

map

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

clientConfigRealmOptions (보안)

맵의 키/값을 사용하여 AsyncHttpClientConfig Realm을 구성하려면 다음을 수행합니다.

 

map

sslContextParameters (security)

레지스트리의 org.apache.camel.util.jsse.SSLContextParameters에 대한 참조입니다. 이 참조는 구성 요소 수준에서 구성된 모든 SSLContextParameter를 재정의합니다. JSSE 구성 유틸리티 사용을 참조하십시오. 이 옵션을 구성하면 끝점 또는 구성 요소 수준에서 clientConfig 옵션을 통해 제공되는 모든 SSL/TLS 구성 옵션을 재정의합니다.

 

SSLContextParameters

3.3. AhcComponent Options

AHC 구성 요소는 아래에 나열된 8 가지 옵션을 지원합니다.

Expand
이름설명기본값유형

클라이언트 (고급)

사용자 정의 AsyncHttpClient 사용

 

AsyncHttpClient

바인딩 (advanced)

AHC와 Camel 간에 바인딩하는 방법을 제어할 수 있는 사용자 지정 AhcBinding을 사용합니다.

 

AhcBinding

clientConfig (advanced)

사용자 지정 com.ning.http.client.AsyncHttpClient 인스턴스를 사용하도록 AsyncHttpClient를 구성합니다.

 

AsyncHttpClientConfig

sslContextParameters (security)

레지스트리의 org.apache.camel.util.jsse.SSLContextParameters에 대한 참조입니다. 이 옵션을 구성하면 끝점 또는 구성 요소 수준에서 clientConfig 옵션을 통해 제공되는 모든 SSL/TLS 구성 옵션을 재정의합니다.

 

SSLContextParameters

JavaSerialized Object (advanced) 허용

요청이 context-type=application/x-java-serialized-object를 사용할 때 java serialization을 허용할지 여부입니다. 기본적으로 꺼집니다. 이를 활성화하면 Java가 요청에서 Java로 들어오는 데이터를 역직렬화하고 잠재적인 보안 위험이 될 수 있다는 점에 유의하십시오.

false

boolean

useGlobalSslContext 매개변수 (보안)

글로벌 SSL 컨텍스트 매개 변수의 사용을 활성화합니다.

false

boolean

headerFilterStrategy (filter)

사용자 지정 org.apache.camel.spi.HeaderFilterStrategy를 사용하여 Camel 메시지로 헤더를 필터링하려면 다음을 수행합니다.

 

HeaderFilterStrategy

resolveProperty Placeholders (advanced)

구성 요소가 시작 시 자체적으로 속성 자리 표시자를 확인해야 하는지 여부입니다. String 유형의 속성만 속성 자리 표시자를 사용할 수 있습니다.Only properties which are of String type can use property placeholders.

true

boolean

AhcComponent 의 모든 옵션을 설정하면 해당 옵션을 생성되는 AhcEndpoints 로 전파합니다. 그러나 AhcEndpoint 는 사용자 지정 옵션을 설정/override할 수도 있습니다. 끝점에 설정된 옵션은 항상 AhcComponent 의 옵션보다 우선합니다.

3.4. 메시지 헤더

Expand
이름유형설명

Exchange.HTTP_URI

문자열

호출할 URI입니다. 는 엔드포인트에서 직접 설정된 기존 URI를 재정의합니다.

Exchange.HTTP_PATH

문자열

요청 URI의 경로, 헤더는 HTTP_URI를 사용하여 요청 URI를 빌드하는 데 사용됩니다. 경로가 "/"로 시작하는 경우 http 생산자는 Exchange.HTTP_BASE_URI 헤더 또는 exchange.getFromEndpointUri()를 기반으로 하는 상대 경로를 찾습니다.

Exchange.HTTP_QUERY

문자열

Camel 2.11 이후: URI 매개변수. 는 끝점에 직접 설정된 기존 URI 매개 변수를 재정의합니다.

Exchange.HTTP_RESPONSE_CODE

int

외부 서버의 HTTP 응답 코드입니다. 200은 OK 입니다.

Exchange.HTTP_CHARACTER_ENCODING

문자열

문자 인코딩.

Exchange.CONTENT_TYPE

문자열

HTTP 콘텐츠 유형입니다. 는 text/html 와 같은 콘텐츠 유형을 제공하도록 IN 및 OUT 메시지에 설정됩니다.

Exchange.CONTENT_ENCODING

문자열

HTTP 콘텐츠 인코딩입니다. gzip 과 같은 콘텐츠 인코딩을 제공하도록 IN 및 OUT 메시지에 설정되어 있습니다.

3.5. 메시지 본문

Camel은 외부 서버의 HTTP 응답을 OUT 본문에 저장합니다. IN 메시지의 모든 헤더가 OUT 메시지에 복사되므로 라우팅 중에 헤더가 유지됩니다. 또한 Camel은 HTTP 응답 헤더와 OUT 메시지 헤더에 추가합니다.

3.6. 응답 코드

Camel은 HTTP 응답 코드에 따라 처리합니다.

  • 응답 코드는 범위 100.299이며 Camel은 성공 대응과 관련이 있습니다.
  • 응답 코드는 범위 300..399에 있으며 Camel은 리디렉션 응답과 관련이 있으며 정보가 포함된 AhcOOperationFailedException 이 발생합니다.
  • 응답 코드는 400 이상이며 Camel은 외부 서버 오류로 간주하고 정보가 포함된 AhcOperationFailedException 이 발생합니다.

    throwExceptionOnFailure

    실패한 응답 코드에 대해 AhcOperationFailedException 이 throw되지 않도록 옵션 throwExceptionOnFailurefalse 로 설정할 수 있습니다. 이를 통해 원격 서버에서 모든 응답을 가져올 수 있습니다.

3.7. AhcOperationFailedException

이 예외에는 다음 정보가 포함됩니다.

  • HTTP 상태 코드
  • HTTP 상태 줄 (상태 코드의 텍스트)
  • 리디렉션 위치, 서버가 리디렉션을 반환하는 경우
  • 서버가 응답으로 본문을 제공하는 경우 java.lang.String 로서 응답 본문

3.8. GET 또는 POST를 사용하여 호출

다음 알고리즘은 GET 또는 POST HTTP 메서드를 사용해야 하는지 확인하는 데 사용됩니다.
1. 헤더에 제공된 메서드를 사용합니다.
2. 쿼리 문자열이 헤더에 제공되는 경우 GET 입니다.
3. 끝점이 쿼리 문자열로 구성된 경우 GET 입니다.
4. 보낼 데이터가 있는 경우 POST (body가 null이 아님)
5. 그렇지 않으면 GET 입니다.

3.9. 호출할 URI 구성

HTTP 생산자의 URI를 직접 엔드포인트 URI로 설정할 수 있습니다. 아래 경로에서 Camel은 HTTP를 사용하여 외부 서버 oldhost 로 호출합니다.

from("direct:start")
        .to("ahc:http://oldhost");

다음과 같은 Spring 샘플이 있습니다.

<camelContext xmlns="http://activemq.apache.org/camel/schema/spring">
  <route>
    <from uri="direct:start"/>
    <to uri="ahc:http://oldhost"/>
  </route>
</camelContext>

메시지에 Exchange.HTTP_URI 라는 헤더를 추가하여 HTTP 끝점 URI를 덮어쓸 수 있습니다.

from("direct:start")
    .setHeader(Exchange.HTTP_URI, constant("http://newhost"))
    .to("ahc:http://oldhost");

3.10. URI 매개변수 구성

ahc 생산자는 HTTP 서버로 보낼 URI 매개 변수를 지원합니다. URI 매개 변수는 끝점 URI에서 직접 설정하거나 메시지에서 Exchange.HTTP_QUERY 키를 사용하는 헤더로 설정할 수 있습니다.

from("direct:start")
        .to("ahc:http://oldhost?order=123&detail=short");

또는 헤더에 제공되는 옵션:

from("direct:start")
            .setHeader(Exchange.HTTP_QUERY, constant("order=123&detail=short"))
        .to("ahc:http://oldhost");

3.11. http 메서드를 HTTP 생산자로 설정하는 방법

HTTP 구성 요소는 메시지 헤더를 설정하여 HTTP 요청 메서드를 설정하는 방법을 제공합니다. 예를 들면 다음과 같습니다.

from("direct:start")
            .setHeader(Exchange.HTTP_METHOD, constant("POST"))
        .to("ahc:http://www.google.com")
            .to("mock:results");

다음과 같은 Spring 샘플이 있습니다.

<camelContext xmlns="http://activemq.apache.org/camel/schema/spring">
  <route>
    <from uri="direct:start"/>
    <setHeader headerName="CamelHttpMethod">
        <constant>POST</constant>
    </setHeader>
    <to uri="ahc:http://www.google.com"/>
    <to uri="mock:results"/>
  </route>
</camelContext>

3.12. charset 구성

POST 를 사용하여 데이터를 보내는 경우 Exchange 속성을 사용하여 charset을 구성할 수 있습니다.If you are using POST to send data you can configure the charset using the Exchange property:

exchange.setProperty(Exchange.CHARSET_NAME, "iso-8859-1");

3.12.1. 끝점 URI의 URI 매개 변수

이 샘플에는 웹 브라우저에 입력한 전체 URI 엔드포인트가 있습니다. 물론 여러 URI 매개변수는 웹 브라우저에서와 마찬가지로 구분 기호로 & amp; 문자를 사용하여 설정할 수 있습니다. Camel은 여기에서 속임수를 사용하지 않습니다.

// we query for Camel at the Google page
template.sendBody("ahc:http://www.google.com/search?q=Camel", null);

3.12.2. 메시지의 URI 매개 변수

Map headers = new HashMap();
headers.put(Exchange.HTTP_QUERY, "q=Camel&lr=lang_en");
// we query for Camel and English language at Google
template.sendBody("ahc:http://www.google.com/search", null, headers);

위의 헤더 값에서 ? 접두사가 붙 않아야 하며 & amp; char를 사용하여 일반적으로 매개 변수를 분리할 수 있습니다.

3.12.3. 응답 코드 가져오기

Exchange.HTTP_RESPONSE_CODE 를 사용하여 출력 메시지 헤더에서 값을 가져와 AHC 구성 요소에서 HTTP 응답 코드를 가져올 수 있습니다.

Exchange exchange = template.send("ahc:http://www.google.com/search", new Processor() {
            public void process(Exchange exchange) throws Exception {
                exchange.getIn().setHeader(Exchange.HTTP_QUERY, constant("hl=en&q=activemq"));
            }
   });
   Message out = exchange.getOut();
   int responseCode = out.getHeader(Exchange.HTTP_RESPONSE_CODE, Integer.class);

3.13. AsyncHttpClient 구성

AsyncHttpClient 클라이언트는 AsyncHttpClientConfig 를 사용하여 클라이언트를 구성합니다. 자세한 내용은
Async Http Client 설명서를 참조하십시오.

Camel 2.8 에서 구성은 AsyncHttpClientConfig.Builder 에서 제공하는 빌더 패턴을 사용하도록 제한됩니다. Camel 2.8에서 AsyncHttpClientConfig 는 getter/setter를 지원하지 않으므로 Spring bean 스타일(예: XML 파일의 <bean> 태그)을 사용하여 쉽게 만들고 구성할 수 없습니다.

아래 예제에서는 빌더를 사용하여 AhcComponent 에서 구성하는 AsyncHttpClientConfig 를 생성하는 방법을 보여줍니다.

Camel 2.9 에서 AHC 구성 요소는 Async HTTP 라이브러리 1.6.4를 사용합니다. 이 최신 버전은 일반 빈 스타일 구성에 대한 추가 지원을 제공합니다. AsyncHttpClientConfigBean 클래스는 AsyncHttpClientConfig 에서 사용할 수 있는 구성 옵션에 대한 getter 및 setter를 제공합니다. AsyncHttpClientConfigBean 인스턴스는 AHC 구성 요소로 직접 전달되거나 clientConfig URI를 사용하여 끝점 URI에서 참조될 수 있습니다.

Camel 2.9 에서도 사용할 수 있는 기능은 URI에서 직접 구성 옵션을 설정하는 기능입니다. "clientConfig"로 시작하는 URI 매개 변수를 사용하여 AsyncHttpClientConfig 의 다양한 구성 가능한 속성을 설정할 수 있습니다. 끝점 URI에 지정된 속성은 "clientConfig" 매개변수 사용 우선 순위를 사용하여 설정되는 항목과 "clientConfig" URI 매개변수에서 참조하는 구성에 지정된 특성과 병합됩니다. 참조되는 AsyncHttpClientConfig 인스턴스는 각 엔드포인트에 대해 항상 복사되므로 하나의 끝점의 설정이 이전에 생성된 끝점의 설정과 관계없이 유지됩니다. 아래 예제에서는 "clientConfig" 유형 URI 매개 변수를 사용하여 AHC 구성 요소를 구성하는 방법을 보여줍니다.

from("direct:start")
    .to("ahc:http://localhost:8080/foo?clientConfig.maxRequestRetry=3&clientConfig.followRedirects=true")

3.14. SSL 지원(HTTPS)

JSSE 구성 유틸리티 사용

Camel 2.9부터 AHC 구성 요소는 Camel JSSE 구성 유틸리티를 통해 SSL/TLS 구성을 지원합니다.  이 유틸리티는 작성하는 데 필요한 구성 요소별 코드의 양을 크게 줄이고 엔드포인트 및 구성 요소 수준에서 구성할 수 있습니다.  다음 예제에서는 AHC 구성 요소에서 유틸리티를 사용하는 방법을 보여줍니다.

구성 요소의 프로그래밍 구성

KeyStoreParameters ksp = new KeyStoreParameters();
ksp.setResource("/users/home/server/keystore.jks");
ksp.setPassword("keystorePassword");

KeyManagersParameters kmp = new KeyManagersParameters();
kmp.setKeyStore(ksp);
kmp.setKeyPassword("keyPassword");

SSLContextParameters scp = new SSLContextParameters();
scp.setKeyManagers(kmp);

AhcComponent component = context.getComponent("ahc", AhcComponent.class);
component.setSslContextParameters(scp));

끝점의 Spring DSL 기반 구성

...
  <camel:sslContextParameters
      id="sslContextParameters">
    <camel:keyManagers
        keyPassword="keyPassword">
      <camel:keyStore
          resource="/users/home/server/keystore.jks"
          password="keystorePassword"/>
    </camel:keyManagers>
  </camel:sslContextParameters>...
...
  <to uri="ahc:https://localhost/foo?sslContextParameters=#sslContextParameters"/>
...

3.15. 예를 들면 다음과 같습니다.

4장. AHC Websocket 구성 요소

Camel 버전 2.14로 사용 가능

ahc-ws 구성 요소는 Websocket을 통해 외부 서버와 통신하는 클라이언트를 위해 Websocket 기반 엔드포인트를 제공합니다(클라이언트가 외부 서버에 대한 Websocket 연결을 여는 경우).
구성 요소는 Async Http Client 라이브러리를 차례로 사용하는 AHC 구성 요소를 사용합니다.

Maven 사용자는 이 구성 요소를 위해 다음 종속성을 pom.xml 에 추가해야 합니다.

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-ahc-ws</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>

4.1. URI 형식

ahc-ws://hostname[:port][/resourceUri][?options]
ahc-wss://hostname[:port][/resourceUri][?options]

는 기본적으로 ahc-ws에 포트 80을 사용하고 ahc-ws에는 443 포트를 사용합니다.

4.2. AHC-WS Options

AHC-WS 구성 요소는 AHC 구성 요소의 다양한 구성 옵션을 사용할 수 있습니다.

AHC Websocket 구성 요소는 아래에 나열된 8 가지 옵션을 지원합니다.

Expand
이름설명기본값유형

클라이언트 (고급)

사용자 정의 AsyncHttpClient 사용

 

AsyncHttpClient

바인딩 (advanced)

AHC와 Camel 간에 바인딩하는 방법을 제어할 수 있는 사용자 지정 AhcBinding을 사용합니다.

 

AhcBinding

clientConfig (advanced)

사용자 지정 com.ning.http.client.AsyncHttpClient 인스턴스를 사용하도록 AsyncHttpClient를 구성합니다.

 

AsyncHttpClientConfig

sslContextParameters (security)

레지스트리의 org.apache.camel.util.jsse.SSLContextParameters에 대한 참조입니다. 이 옵션을 구성하면 끝점 또는 구성 요소 수준에서 clientConfig 옵션을 통해 제공되는 모든 SSL/TLS 구성 옵션을 재정의합니다.

 

SSLContextParameters

JavaSerialized Object (advanced) 허용

요청이 context-type=application/x-java-serialized-object를 사용할 때 java serialization을 허용할지 여부입니다. 기본적으로 꺼집니다. 이를 활성화하면 Java가 요청에서 Java로 들어오는 데이터를 역직렬화하고 잠재적인 보안 위험이 될 수 있다는 점에 유의하십시오.

false

boolean

useGlobalSslContext 매개변수 (보안)

글로벌 SSL 컨텍스트 매개 변수의 사용을 활성화합니다.

false

boolean

headerFilterStrategy (filter)

사용자 지정 org.apache.camel.spi.HeaderFilterStrategy를 사용하여 Camel 메시지로 헤더를 필터링하려면 다음을 수행합니다.

 

HeaderFilterStrategy

resolveProperty Placeholders (advanced)

구성 요소가 시작 시 자체적으로 속성 자리 표시자를 확인해야 하는지 여부입니다. String 유형의 속성만 속성 자리 표시자를 사용할 수 있습니다.Only properties which are of String type can use property placeholders.

true

boolean

AHC Websocket 끝점은 URI 구문을 사용하여 구성됩니다.

ahc-ws:httpUri

다음 경로 및 쿼리 매개변수를 사용합니다.

4.2.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

httpUri

required: http://hostname:port/path과 같이 사용할 URI

 

URI

4.2.2. 쿼리 매개변수(18 매개변수):

Expand
이름설명기본값유형

bridgeEndpoint (common)

옵션이 true인 경우 Exchange.HTTP_URI 헤더가 무시되고 요청 끝점의 URI를 사용합니다. 또한 AhcProducer가 모든 오류 응답을 다시 보낼 수 있도록 throwExceptionOnFailure를 false로 설정할 수도 있습니다.

false

boolean

bufferSize (일반)

Camel과 AHC Client 간에 데이터를 전송할 때 사용되는 초기 메모리 버퍼 크기입니다.

4096

int

headerFilterStrategy (common)

사용자 지정 HeaderFilterStrategy를 사용하여 Camel 메시지와의 헤더를 필터링합니다.

 

HeaderFilterStrategy

throwExceptionOnFailure (일반)

원격 서버에서 응답이 실패한 경우 AhcOperationFailedException의 throw를 비활성화하는 옵션입니다. 이를 통해 HTTP 상태 코드와 관계없이 모든 응답을 얻을 수 있습니다.

true

boolean

transferException (일반)

소비자 측에서 Exchange가 실패하고 발생한 Exception이 애플리케이션/x-java-serialized-object 콘텐츠 유형으로 응답에서 직렬화된 경우 (예: Jetty 또는 Servlet Camel 구성 요소 사용) 생산자 측에서 예외는 AhcOperationFailedException 대신 deserialize되고 그대로 발생합니다. 원인된 예외는 직렬화해야 합니다. 이 설정은 기본적으로 꺼져 있습니다. 이를 활성화하면 Java가 요청에서 Java로 들어오는 데이터를 역직렬화하고 잠재적인 보안 위험이 될 수 있다는 점에 유의하십시오.

false

boolean

bridgeErrorHandler (consumer)

소비자를 Camel 라우팅 오류 처리기에 브리징할 수 있습니다. 이는 소비자가 들어오는 메시지를 선택하는 동안 예외가 발생한 것을 의미하며, 이제 메시지로 처리되어 라우팅 오류 처리기에 의해 처리됩니다. 기본적으로 소비자는 org.apache.camel.spi.ExceptionHandler를 사용하여 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

false

boolean

sendMessageOnError (consumer)

web-socket 리스너가 오류를 수신한 경우 메시지를 보낼지 여부입니다.

false

boolean

예외 처리기 (consumer)

소비자가 사용자 지정 ExceptionHandler를 사용하도록 하려면 다음을 수행합니다. bridgeErrorHandler 옵션이 활성화되어 있는지 확인한 후 이 옵션이 사용되지 않습니다. 기본적으로 소비자는 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

 

ExceptionHandler

exchangePattern (consumer)

소비자가 교환을 생성할 때 교환 패턴을 설정합니다.

 

ExchangePattern

connectionClose (producer)

Connection Close 헤더를 HTTP 요청에 추가해야 하는지 정의합니다. 이 매개변수는 기본적으로 false입니다.

false

boolean

cookieHandler (producer)

HTTP 세션을 유지 관리하도록 쿠키 처리기 구성

 

CookieHandler

Streaming(producer) 사용

스트리밍이 여러 개의 텍스트 조각으로 데이터를 보낼 수 있도록 합니다.

false

boolean

바인딩 (advanced)

AHC와 Camel 간에 바인딩하는 방법을 제어할 수 있는 사용자 지정 AhcBinding을 사용합니다.

 

AhcBinding

clientConfig (advanced)

사용자 지정 com.ning.http.client.AsyncHttpClient 인스턴스를 사용하도록 AsyncHttpClient를 구성합니다.

 

AsyncHttpClientConfig

clientConfigOptions (고급)

맵의 키/값을 사용하여 AsyncHttpClientConfig를 구성하려면 다음을 수행합니다.

 

map

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

clientConfigRealmOptions (보안)

맵의 키/값을 사용하여 AsyncHttpClientConfig Realm을 구성하려면 다음을 수행합니다.

 

map

sslContextParameters (security)

레지스트리의 org.apache.camel.util.jsse.SSLContextParameters에 대한 참조입니다. 이 참조는 구성 요소 수준에서 구성된 모든 SSLContextParameter를 재정의합니다. JSSE 구성 유틸리티 사용을 참조하십시오. 이 옵션을 구성하면 끝점 또는 구성 요소 수준에서 clientConfig 옵션을 통해 제공되는 모든 SSL/TLS 구성 옵션을 재정의합니다.

 

SSLContextParameters

4.3. Websocket을 통한 데이터 쓰기 및 읽기

ahc-ws 끝점은 엔드포인트가 생산자 또는 소비자로 구성되어 있는지 여부에 따라 소켓에 데이터를 쓰거나 소켓에서 읽을 수 있습니다.

4.4. 데이터를 쓰거나 읽을 URI 구성

아래 경로에서 Camel은 지정된 websocket 연결에 씁니다.

from("direct:start")
        .to("ahc-ws://targethost");

다음과 같은 Spring 샘플이 있습니다.

<camelContext xmlns="http://camel.apache.org/schema/spring">
  <route>
    <from uri="direct:start"/>
    <to uri="ahc-ws://targethost"/>
  </route>
</camelContext>

아래 경로에서 Camel은 지정된 websocket 연결에서 읽습니다.

from("ahc-ws://targethost")
        .to("direct:next");

다음과 같은 Spring 샘플이 있습니다.

<camelContext xmlns="http://camel.apache.org/schema/spring">
  <route>
    <from uri="ahc-ws://targethost"/>
    <to uri="direct:next"/>
  </route>
</camelContext>

 

4.5. 예를 들면 다음과 같습니다.

5장. AMQP 구성 요소

Camel 버전 1.2로 사용 가능

amqp: 구성 요소는 Qpid 프로젝트의 JMS 클라이언트 API를 사용하여 AMQP 1.0 프로토콜 을 지원합니다. AMQP 0.9(특히 RabbitMQ)를 사용하려는 경우 Camel RabbitMQ 구성 요소에도 관심이 있을 수 있습니다. Camel 2.17.0 AMQP 구성 요소가 AMQP 0.9 이상을 지원하기 전에 먼저 Camel 2.17.0은 AMQP 1.0만 지원했습니다.

Maven 사용자는 이 구성 요소를 위해 다음 종속성을 pom.xml 에 추가해야 합니다.

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-amqp</artifactId>
    <version>${camel.version}</version> <!-- use the same version as your Camel core version -->
</dependency>

5.1. URI 형식

amqp:[queue:|topic:]destinationName[?options]

5.2. AMQP 옵션

대상 이름 뒤에 JMS 구성 요소의 모든 다양한 구성 옵션을 지정할 수 있습니다.

AMQP 구성 요소는 아래에 나열된 80 옵션을 지원합니다.

Expand
이름설명기본값유형

구성 (고급)

공유 JMS 구성 사용

 

JmsConfiguration

acceptMessages whilee Stopping (consumer)

소비자가 중지되는 동안 메시지를 수락하는지 여부를 지정합니다. 대기열에 포함된 메시지가 여전히 있는 동안 런타임에 JMS 경로를 시작하고 중지하는 경우 이 옵션을 활성화할 수 있습니다. 이 옵션이 false이고 JMS 경로를 중지하면 메시지가 거부될 수 있으며 JMS 브로커는 재전송을 시도해야 하지만 다시 거부될 수 있으며 결국 메시지가 JMS 브로커의 dead letter 큐에서 이동될 수 있습니다. 이 옵션을 사용하려면 이 옵션을 사용하는 것이 좋습니다.

false

boolean

allowReplyManagerQuick Stop (consumer)

요청-reply 메시징에 대해 응답 관리자에게 사용되는 DefaultMessageListenerContainer에서 사용되는지 여부에 따라 JmsConfigurationisAcceptMessagesWhileStopping이 활성화되어 있고 org.apache.camel.CamelContext가 현재 중지되는 경우 DefaultMessageListenerContainer.runningAllowed 플래그를 빠르게 중지할 수 있습니다. 이 빠른 중지 기능은 일반 JMS 소비자에서 기본적으로 활성화되어 있지만 응답 관리자를 위해 이 플래그를 활성화해야 합니다.

false

boolean

acknowledgementMode (consumer)

Integer로 정의된 JMS 승인 모드입니다. 벤더별 확장을 acknowledgment 모드로 설정할 수 있습니다. 일반 모드에서는 acknowledgementModeName을 대신 사용하는 것이 좋습니다.

 

int

ReLoadingOf Properties (Consumer)

JMS 속성이 필요하지 않기 때문에 일반적으로 비효율적인 메시지가 로드되는 즉시 JMS 속성을 신속하게 로드할 수 있지만 기본 JMS 공급자 및 JMS 속성 사용과 관련된 문제를 조기에 포착할 수 있습니다.

false

boolean

acknowledgementModeName (consumer)

SESSION_TRANSACTED, CLIENT_ACKNOWLEDGE, AUTO_ACKNOWLEDGE, DUPS_OK_ACKNOWLEDGE 중 하나인 JMS 승인 이름

AUTO_ ACKNOWLEDGE

문자열

AutoStartup (consumer)

소비자 컨테이너가 자동으로 시작되어야 하는지 여부를 지정합니다.

true

boolean

cacheLevel (consumer)

기본 JMS 리소스의 ID별 캐시 수준을 설정합니다. 자세한 내용은 cacheLevelName 옵션을 참조하십시오.

 

int

cacheLevelName (consumer)

기본 JMS 리소스의 이름으로 캐시 수준을 설정합니다. 가능한 값은 CACHE_AUTO, CACHE_CONNECTION, CACHE_CONSUMER, CACHE_NONE 및 CACHE_SESSION입니다. 기본 설정은 CACHE_AUTO입니다. 자세한 내용은 Spring 문서 및 트랜잭션 캐시 수준을 참조하십시오.

CACHE_AUTO

문자열

replyToCacheLevelName (producer)

JMS를 통해 요청/반복을 수행할 때 응답 소비자의 이름으로 캐시 수준을 설정합니다. 이 옵션은 고정 응답 대기열(임시 아님)을 사용하는 경우에만 적용됩니다. Camel은 기본적으로 배타적 또는 공유 w/ replyToSelectorName에 대해 CACHE_CONSUMER를 사용합니다. 그리고 replyToSelectorName 없이 공유의 경우 CACHE_SESSION을 사용합니다. IBM WebSphere와 같은 일부 JMS 브로커는 작동하도록 replyToCacheLevelName=CACHE_NONE을 설정해야 할 수 있습니다. 참고: 임시 대기열을 사용하는 경우 CACHE_NONE이 허용되지 않으며 CACHE_CONSUMER 또는 CACHE_SESSION과 같은 더 높은 값을 사용해야 합니다.

 

문자열

clientID( 일반)

사용할 JMS 클라이언트 ID를 설정합니다. 이 값은 지정된 경우 고유해야 하며 단일 JMS 연결 인스턴스에서만 사용할 수 있습니다. 일반적으로 내구성 주제 서브스크립션에만 필요합니다. Apache ActiveMQ를 사용하는 경우 대신 가상 주제를 사용할 수 있습니다.

 

문자열

concurrentConsumers (consumer)

JMS에서 사용할 때 기본 동시 소비자 수를 지정합니다( JMS를 통한 요청/복제용 아님). 스레드의 동적 확장/다운을 제어하려면 maxMessagesPerTask 옵션도 참조하십시오. JMS를 통해 요청/응답 시 replyToConcurrentConsumers 옵션은 응답 메시지 리스너에서 동시 소비자 수를 제어하는 데 사용됩니다.

1

int

replyToConcurrent Consumers (producer)

JMS를 통해 요청/reply를 수행할 때 기본 동시 소비자 수를 지정합니다. 스레드의 동적 확장/다운을 제어하려면 maxMessagesPerTask 옵션도 참조하십시오.

1

int

ConnectionFactory (일반)

사용할 연결 팩토리입니다. 구성 요소 또는 끝점에서 연결 팩토리를 구성해야 합니다.

 

ConnectionFactory

사용자 이름 (보안)

ConnectionFactory와 함께 사용할 사용자 이름입니다. ConnectionFactory에서 사용자 이름/암호를 직접 구성할 수도 있습니다.

 

문자열

암호 (보안)

ConnectionFactory에 사용할 암호입니다. ConnectionFactory에서 사용자 이름/암호를 직접 구성할 수도 있습니다.

 

문자열

deliveryPersistent (producer)

기본적으로 영구 제공이 사용되는지 여부를 지정합니다.

true

boolean

deliveryMode (producer)

사용할 전달 모드를 지정합니다. 가능한 값은 javax.jms.DeliveryMode에서 정의한 값입니다. NON_PERSISTENT = 1 및 PERSISTENT = 2.

 

정수

durableSubscriptionName (common)

내구성 주제 서브스크립션을 지정하기 위한 내구성 있는 구독자 이름입니다. clientId 옵션도 구성해야 합니다.

 

문자열

exceptionListener (advanced)

기본 JMS 예외에 대해 알림을 받을 JMS Exception Listener를 지정합니다.

 

ExceptionListener

errorHandler (advanced)

메시지를 처리하는 동안 throw되지 않은 예외의 경우 호출될 org.springframework.util.ErrorHandler를 지정합니다. 기본적으로 이러한 예외는 errorHandler가 구성되지 않은 경우 WARN 수준에서 기록됩니다. 로깅 수준 및 스택 추적을 errorHandlerLoggingLevel 및 errorHandlerLogStackTrace 옵션을 사용하여 기록해야 하는지 여부를 구성할 수 있습니다. 이렇게 하면 사용자 지정 오류 처리기를 코딩하는 것보다 훨씬 쉽게 구성할 수 있습니다.This makes it much easier to configure, than having to code a custom errorHandler.

 

ErrorHandler

errorHandlerLogging Level (logging)

은 로깅되지 않은 예외에 대해 기본 errorHandler 로깅 수준을 구성할 수 있습니다.

WARN

LoggingLevel

errorHandlerLogStack Trace (logging)

기본 errorHandler로 stacktrace를 기록해야 하는지 여부를 제어할 수 있습니다.

true

boolean

explicitQosEnabled (producer)

메시지를 보낼 때 서비스의 deliveryMode, 우선순위 또는 timeToLive 특성을 사용해야 하는 경우 설정합니다. 이 옵션은 Spring의 JmsTemplate을 기반으로 합니다. deliveryMode, priority 및 timeToLive 옵션이 현재 엔드포인트에 적용됩니다. 이는 메시지 세분화에서 작동하는 preserveMessageQos 옵션과 달리 Camel In 메시지 헤더에서만 QoS 속성을 읽습니다.

false

boolean

exposeListenerSession (consumer)

메시지를 사용할 때 리스너 세션을 노출해야 하는지 여부를 지정합니다.

false

boolean

idleTaskExecutionLimit (advanced)

수신 작업의 유휴 실행에 대한 제한을 지정하고 해당 실행 내에 메시지를 받지 못했습니다. 이 제한에 도달하면 작업이 종료되고 다른 실행 작업에 대한 수신을 그대로 둡니다(동적 스케줄링의 경우 maxConcurrentConsumers 설정을 참조). Spring에서 사용할 수 있는 추가 doc가 있습니다.

1

int

idleConsumerLimit (advanced)

언제든지 유휴 상태일 수 있는 소비자 수에 대한 제한을 지정합니다.

1

int

includeAmqpAnnotations (consumer)

AMQP에서 Camel Message로 매핑할 때 AMQP 주석을 포함할지 여부를 지정합니다. 이 옵션을 true 로 설정하면 JMS_AMQP_MA_ 접두사가 포함된 AMQP 메시지 주석을 JMS 메시지 헤더에 매핑합니다. Apache Qpid JMS API의 제한 사항으로 인해 전달 주석은 무시됩니다.

참고: includeAmqpAnnotations 옵션은 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다. Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 https://access.redhat.com/support/offerings/techpreview/를 참조하십시오.

false

boolean

maxConcurrentConsumers (Consumer)

JMS에서 사용할 때 최대 동시 소비자 수를 지정합니다( JMS를 통한 요청/복제용 아님). 스레드의 동적 확장/다운을 제어하려면 maxMessagesPerTask 옵션도 참조하십시오. JMS를 통해 요청/응답 시 replyToMaxConcurrentConsumers 옵션은 응답 메시지 리스너에서 동시 소비자 수를 제어하는 데 사용됩니다.

 

int

replyToMaxConcurrent Consumers (producer)

JMS에서 요청/reply를 사용할 때 최대 동시 소비자 수를 지정합니다. 스레드의 동적 확장/다운을 제어하려면 maxMessagesPerTask 옵션도 참조하십시오.

 

int

replyOnTimeoutToMax ConcurrentConsumers (producer)

JMS를 통해 요청/reply를 사용할 때 시간 초과가 발생한 경우 계속 라우팅할 수 있는 최대 동시 소비자 수를 지정합니다.

1

int

maxMessagesPerTask (advanced)

작업당 메시지 수입니다. -1은 무제한입니다. 동시 소비자에 범위(예: max)를 사용하는 경우 이 옵션을 사용하여 더 적은 작업이 필요할 때 소비자의 속도를 축소하는 방법을 제어하기 위해 값을 100으로 설정할 수 있습니다.

-1

int

messageConverter (advanced)

사용자 지정 Spring org.springframework.jms.support.converter.MessageConverter를 사용하려면 javax.jms.Message에 매핑할 수 있는 방법을 제어할 수 있습니다.

 

MessageConverter

mapJmsMessage (advanced)

Camel이 수신된 JMS 메시지를 javax.jms.TextMessage와 같은 적절한 페이로드 유형에 자동 매핑해야 하는지 여부를 문자열 등에 지정합니다.

true

boolean

messageIdEnabled (advanced)

전송할 때 메시지 ID를 추가해야 하는지 여부를 지정합니다. 이는 JMS 브로커에 대한 힌트일 뿐입니다. JMS 공급자가 이 힌트를 수락하는 경우 이러한 메시지에는 메시지 ID가 null로 설정되어야 합니다. 공급자가 힌트를 무시하는 경우 메시지 ID를 일반 고유 값으로 설정해야 합니다.

true

boolean

messageTimestampEnabled (advanced)

메시지 전송 시 기본적으로 타임스탬프를 활성화할지 여부를 지정합니다. 이는 JMS 브로커에 대한 힌트일 뿐입니다. JMS 공급자가 이 힌트를 수락하는 경우 이러한 메시지에는 타임스탬프가 0으로 설정되어야 합니다. 공급자가 힌트를 무시하면 타임스탬프를 정규 값으로 설정해야 합니다.

true

boolean

alwaysCopyMessage (producer)

true인 경우 Camel은 전송을 위해 생산자에 전달될 때 항상 메시지의 JMS 메시지 사본을 만듭니다. replyToDestinationSelectorName이 설정된 경우와 같이 메시지를 복사하는 데 필요한 경우 Camel은 replyToDestinationSelectorName이 설정된 경우 alwaysCopyMessage 옵션을 true로 설정합니다.

false

boolean

useMessageIDAs CorrelationID (advanced)

JMSMessageID를 항상 InOut 메시지의 JMSCorrelationID로 사용할지 여부를 지정합니다.

false

boolean

우선 순위 (producer)

1보다 큰 값은 보낼 때 메시지 우선 순위를 지정합니다(여기서 0이 가장 낮은 우선 순위이고 9가 가장 높은 경우). 이 옵션을 적용하려면 explicitQosEnabled 옵션도 활성화해야 합니다.

4

int

pubSubNoLocal (advanced)

자체 연결에서 게시한 메시지 배달을 금지할지 여부를 지정합니다.Specifies whether to inhibit the delivery of messages published by its own connection.

false

boolean

receiveTimeout (advanced)

메시지 수신 시간(밀리초)입니다.

1000

long

복구Interval (advanced)

연결이 새로 고쳐질 때(즉, 밀리초) 복구 시도 사이의 간격을 지정합니다. 기본값은 5000ms, 즉 5초입니다.

5000

long

taskExecutor (consumer)

메시지를 사용하기 위한 사용자 지정 작업 executor를 지정할 수 있습니다.

 

TaskExecutor

TimeToLive (producer)

메시지를 보낼 때 메시지의 TTL(밀리초)을 지정합니다.

-1

long

트랜잭션(Transaction acted )

transacted 모드를 사용할지 여부를 지정합니다.

false

boolean

lazyCreateTransaction Manager (transaction)

true인 경우 Camel은 옵션을 transacted=true할 때 삽입된 transactionManager가 없는 경우 JmsTransactionManager를 생성합니다.

true

boolean

TransactionManager (transaction)

사용할 Spring 트랜잭션 관리자입니다.

 

PlatformTransaction Manager

transactionName (transaction)

사용할 트랜잭션의 이름입니다.

 

문자열

TransactionTimeout (transaction)

트랜잭션 모드를 사용하는 경우 트랜잭션의 시간 초과 값(초 단위)입니다.

-1

int

testConnectionOn 시작 (일반)

시작 시 연결을 테스트할지 여부를 지정합니다.Specifies whether to test the connection on startup. 이를 통해 Camel이 모든 JMS 소비자가 JMS 브로커에 대한 유효한 연결을 시작하게 합니다. 연결을 허용할 수 없는 경우 Camel은 시작 시 예외를 throw합니다. 이렇게 하면 Camel이 실패한 연결로 시작되지 않습니다. JMS 생산자도 테스트 중입니다.

false

boolean

asyncStartListener (advanced)

경로를 시작할 때 JmsConsumer 메시지 리스너를 비동기적으로 시작할지 여부입니다. 예를 들어 JmsConsumer가 원격 JMS 브로커에 대한 연결을 가져올 수 없는 경우 재시도 및/또는 페일오버를 시도하는 동안 차단될 수 있습니다. 이로 인해 Camel이 경로를 시작하는 동안 차단됩니다. 이 옵션을 true로 설정하면 JmsConsumer가 비동기 모드에서 전용 스레드를 사용하여 JMS 브로커에 연결하는 동안 시작 경로를 지정할 수 있습니다. 이 옵션을 사용하면 연결을 설정할 수 없는 경우 예외가 WARN 수준에서 기록되고 소비자는 메시지를 수신할 수 없습니다. 그런 다음 다시 시도하도록 경로를 다시 시작할 수 있습니다.

false

boolean

asyncStopListener (advanced)

경로를 중지할 때 JmsConsumer 메시지 리스너를 비동기적으로 중지할지 여부입니다.

false

boolean

forceSendOriginal Message (producer)

mapJmsMessage=false Camel을 사용하면 경로 중 헤더를 만났을 때 새 JMS 대상에 보낼 새 JMS 메시지가 생성됩니다. 수신한 원래 JMS 메시지를 전송하도록 Camel을 강제 적용하려면 이 옵션을 true로 설정합니다.

false

boolean

requestTimeout (producer)

InOut Exchange Pattern(밀리초)을 사용할 때 응답을 기다리는 시간 초과입니다. 기본값은 20초입니다. 이 엔드포인트 구성 시간 값을 재정의하기 위해 CamelJmsRequestTimeout 헤더를 포함할 수 있으므로 메시지당 개별 시간 제한 값이 있습니다. requestTimeoutCheckerInterval 옵션도 참조하십시오.

20000

long

requestTimeoutChecker Interval (advanced)

Camel이 JMS를 통해 요청/반복 시 Exchange 시간 초과를 확인하는 빈도를 설정합니다. 기본적으로 Camel은 초당 한 번 확인합니다. 그러나 시간 초과가 발생할 때 더 빠르게 대응해야 하는 경우 이 간격을 낮추어 더 자주 확인할 수 있습니다. 시간 제한은 옵션 requestTimeout에 따라 결정됩니다.

1000

long

transferExchange (advanced)

당신은 단지 바디와 헤더 대신 전선을 통해 교환을 전송할 수 있습니다. 다음 필드가 전송됩니다. 본문, 외부 본문, Fault 본문, 헤더, 외부 헤더, Fault 헤더, 교환 속성, 교환 예외. 이렇게 하려면 개체가 직렬화 가능 해야 합니다.This requires that the objects are serializable. Camel은 non-serializable 오브젝트를 제외하고 WARN 수준에서 로깅합니다. 제작자와 소비자 측에서 이 옵션을 모두 활성화해야 하므로 Camel은 페이로드가 Exchange이고 일반 페이로드가 아닌 Exchange임을 알고 있습니다.

false

boolean

transferException (advanced)

활성화되고 소비자 측면에서 Request Reply messaging(InOut)을 사용하고 Exchange 실패를 사용하는 경우 원인 Exception이 다시 javax.jms.ObjectMessage로 응답으로 다시 전송됩니다. 클라이언트가 Camel인 경우 반환된 Exception은 rethrown입니다. 이를 통해 라우팅에서 Camel JMS를 브리지로 사용할 수 있습니다. 예를 들어 영구 대기열을 사용하여 강력한 라우팅을 활성화할 수 있습니다. 또한 transferExchange를 사용하도록 설정한 경우 이 옵션이 우선합니다. catch 예외는 직렬화 가능 해야 합니다.The caught exception is required to be serializable. 소비자 측의 원래 예외는 생산자로 반환될 때 org.apache.camel.RuntimeCamelException과 같은 외부 예외로 래핑될 수 있습니다.

false

boolean

transferFault (advanced)

활성화된 경우 Request Reply messaging (InOut)을 사용하고 Exchange가 소비자 측에서 SOAP 오류 ( exception 아님)와 함께 실패한 경우 MessageisFault()의 오류 플래그는 키 org.apache.camel.component.jmsConstel.jms.JmsConstConstantJMS_TRANSTER_FATER_FATER_FATER_FATER_FATER_FATER_FATER_JMST_FATER_FAT 클라이언트가 Camel인 경우 반환된 fault 플래그가 링크 org.apache.camel.MessagesetFault(boolean)에 설정됩니다. Cxf 또는 Spring-ws와 같은 SOAP과 같은 결함을 지원하는 Camel 구성 요소를 사용할 때 이를 활성화할 수 있습니다.

false

boolean

jmsOperations (advanced)

org.springframework.jms.core.JmsOperations 인터페이스의 자체 구현을 사용할 수 있습니다. Camel은 JmsTemplate을 기본값으로 사용합니다. 테스트 목적으로 사용할 수 있지만 스프링 API 문서에 명시된 대로 많이 사용되지는 않습니다.

 

JmsOperations

destinationResolver (advanced)

고유한 확인자를 사용할 수 있는 플러그형 org.springframework.jms.support.DestinationResolver(예: JNDI 레지스트리에서 실제 대상을 조회하기 위해).

 

DestinationResolver

replyToType (producer)

를 사용하면 JMS를 통해 요청/reply를 수행할 때 replyTo 큐에 사용할 유형의 전략을 명시적으로 지정할 수 있습니다. 가능한 값은 임시, 공유 또는 제외입니다. 기본적으로 Camel은 임시 대기열을 사용합니다. 그러나 replyTo가 구성된 경우 기본적으로 Shared가 사용됩니다. 이 옵션을 사용하면 공유 대기열 대신 전용 대기열을 사용할 수 있습니다. 자세한 내용은 Camel JMS 설명서를 참조하십시오. 특히 클러스터형 환경에서 실행 중인 경우 미치는 영향에 대한 참고 사항 및 공유 응답 대기열이 대체 시간 및 필수 값보다 성능이 낮다는 사실에서 참조하십시오.

 

ReplyToType

preserveMessageQos (producer)

JMS 끝점의 QoS 설정이 아니라 메시지에 지정된 QoS 설정을 사용하여 메시지를 보내려면 true로 설정합니다. 다음 세 가지 헤더는 JMSPriority, JMSDeliveryMode 및 JMSExpiration으로 간주됩니다. 전부 또는 일부만 제공할 수 있습니다. 제공되지 않는 경우 Camel은 엔드포인트의 값을 사용하도록 대체합니다. 따라서 이 옵션을 사용하면 헤더가 끝점의 값을 재정의합니다. 반면 explicitQosEnabled 옵션은 메시지 헤더의 값이 아닌 끝점에 설정된 옵션만 사용합니다.

false

boolean

asyncConsumer (Consumer)

JmsConsumer가 Exchange를 비동기적으로 처리하는지 여부입니다. 활성화된 경우 JmsConsumer는 이전 메시지가 비동기적으로(Asynchronous Routing Engine에 의해) 비동기적으로 처리되는 동안 JMS 대기열에서 다음 메시지를 선택할 수 있습니다. 즉, 메시지가 100% 엄격하게 정렬되어 처리되지 않을 수 있습니다. 비활성화된 경우 Exchange는 JmsConsumer가 JMS 대기열에서 다음 메시지를 선택하기 전에 완전히 처리됩니다. 트랜잭션이 활성화된 경우 트랜잭션이 동기적으로 실행되어야 하므로 비동기Consumer=true가 비동기적으로 실행되지 않습니다(Camel 3.0은 비동기 트랜잭션을 지원할 수 있음).

false

boolean

allownullBody (producer)

본문 없이 메시지를 보낼 수 있는지 여부입니다. 이 옵션이 false이고 메시지 본문이 null이면 JMSException이 발생합니다.

true

boolean

includeSentJMS MessageID (producer)

InOnly(예: fire 및 forget)를 사용하여 JMS 대상으로 보낼 때만 적용됩니다. 이 옵션을 사용하면 메시지가 JMS 대상으로 전송될 때 JMS 클라이언트에서 사용하는 실제 JMSMessageID로 Camel Exchange가 강화됩니다.

false

boolean

include allJMSX Properties (advanced)

JMS에서 Camel Message로 매핑할 때 모든 JMSXxxx 속성을 포함할지 여부입니다. 이 값을 true로 설정하면 JMSXAppID 및 JMSXUserID 등과 같은 속성이 포함됩니다. 참고: 사용자 지정 headerFilterStrategy를 사용하는 경우 이 옵션이 적용되지 않습니다.

false

boolean

defaultTaskExecutor 유형 (consumer)

소비자 끝점과 생산자 끝점의 ReplyTo 소비자 모두에 대해 DefaultMessageListenerContainer에서 사용할 기본 TaskExecutor 유형을 지정합니다. 가능한 값: SimpleAsync (SAP의 SimpleAsyncTaskExecutor) 또는 ThreadPool (s Spring의 ThreadPoolTaskExecutor 사용) - 캐시된 threadpool-like입니다. 설정하지 않으면 기본적으로 소비자 엔드포인트에 대해 캐시된 스레드 풀을 사용하고 응답 소비자에게 SimpleAsync를 사용하는 이전 동작으로 설정됩니다. ThreadPool은 동적으로 늘어나고 동시 소비자를 줄이는 탄력적 구성의 스레드 쓰레기를 줄이는 것이 좋습니다.

 

DefaultTaskExecutor Type

jmsKeyFormatStrategy (advanced)

JMS 사양을 준수하는 데 사용할 수 있도록 JMS 키를 인코딩 및 디코딩하는 플러그인 전략입니다. Camel은 기본 및 패스스루의 두 가지 구현을 제공합니다. 기본 전략은 점과 하이픈을 안전하게 마샬링합니다(. 및 -). 통과 전략은 다음과 같이 키를 남겨 둡니다. JMS 헤더 키에 불법 문자가 포함되어 있는지 여부를 고려하지 않는 JMS 브로커에 사용할 수 있습니다. org.apache.camel.component.jms.JmsKeyFormatStrategy의 자체 구현을 제공하고 표기법을 사용하여 참조할 수 있습니다.

 

JmsKeyFormatStrategy

additional Headers(producer) 허용

이 옵션은 JMS 사양에 따라 유효하지 않은 값이 있을 수 있는 추가 헤더를 허용하는 데 사용됩니다. 예를 들어 WMQ와 같은 일부 메시지 시스템은 바이트 배열 또는 기타 잘못된 유형의 값이 포함된 접두사 JMS_IBM_MQMD_를 사용하여 헤더 이름으로 이 작업을 수행합니다. 여러 헤더 이름을 쉼표로 구분하여 지정하고 와일드카드 일치에 접미사로 사용할 수 있습니다.

 

문자열

queueBrowseStrategy (advanced)

큐를 탐색할 때 사용자 정의 QueueBrowseStrategy 사용

 

QueueBrowseStrategy

messageCreatedStrategy (advanced)

Camel이 JMS 메시지를 보낼 때 Camel이 javax.jms.Message 오브젝트의 새 인스턴스를 생성할 때 호출되는 지정된 MessageCreatedStrategy를 사용합니다.

 

MessageCreatedStrategy

waitForrelationToBeUpdated Counter (advanced)

JMS를 통해 요청/응답할 때 및 useMessageIDAsCorrelationID 옵션이 활성화된 경우 provisional correlation id가 실제 상관 관계 ID로 업데이트될 때까지 대기하는 횟수입니다.

50

int

waitForrelationToBeUpdated ThreadSleepingTime (advanced)

프로비저닝 상관 ID가 업데이트될 때까지 기다리는 동안 밀리코어가 잠기지 않는 간격입니다.

100

long

correlationProperty (producer)

이 JMS 속성을 사용하여 JMSCorrelationID 속성 대신 InOut exchange 패턴(request-reply) 메시지의 상관 관계를 유지할 수 있습니다. 이렇게 하면 JMSCorrelationID JMS 속성을 사용하여 메시지의 상관 관계가 없는 시스템과 메시지를 교환할 수 있습니다. 사용된 JMSCorrelationID는 Camel에 의해 사용되거나 설정되지 않습니다. 이 속성의 값은 동일한 이름의 메시지 헤더에 제공되지 않는 경우 생성됩니다.

 

문자열

SubscriptionDurable (consumer)

서브스크립션의 내구성을 유지할지 여부를 설정합니다. 사용할 내구성 서브스크립션 이름은 subscriptionName 속성을 통해 지정할 수 있습니다. 기본값은 false입니다. 일반적으로 subscriptionName 값과 함께 사용 가능한 서브스크립션을 등록하려면 true로 설정합니다(메시지 리스너 클래스 이름이 서브스크립션 이름으로 충분하지 않은 경우). 주제(pub-sub 도메인)를 청취할 때만 의미가 있으므로 이 방법은 pubSubDomain 플래그를 전환합니다.

false

boolean

subscriptionShared (consumer)

서브스크립션을 공유할지 여부를 설정합니다. 사용할 공유 서브스크립션 이름은 subscriptionName 속성을 통해 지정할 수 있습니다. 기본값은 false입니다. 일반적으로 subscriptionName 값과 함께 공유 서브스크립션을 등록하려면 true로 설정합니다(메시지 리스너 클래스 이름이 서브스크립션 이름으로 충분하지 않은 경우). 공유 서브스크립션도 내구성이 있을 수 있으므로 이 플래그도 subscriptionDurable과 결합될 수 있습니다. 주제(pub-sub 도메인)를 청취할 때만 의미가 있으므로 이 방법은 pubSubDomain 플래그를 전환합니다. JMS 2.0 호환 메시지 브로커가 필요합니다.

false

boolean

subscriptionName (consumer)

생성할 서브스크립션의 이름을 설정합니다. 공유 또는 내구성이 있는 주제(pub-sub 도메인)의 경우 적용됩니다. 서브스크립션 이름은 이 클라이언트의 JMS 클라이언트 ID 내에서 고유해야 합니다. 기본값은 지정된 메시지 리스너의 클래스 이름입니다. 참고: JMS 2.0이 필요한 공유 서브스크립션을 제외하고 각 서브스크립션에 대해 1개의 동시 소비자(이 기본값은 이 메시지 리스너 컨테이너)만 허용됩니다.

 

문자열

streamMessageType Enabled (producer)

StreamMessage 유형이 활성화되어 있는지 여부를 설정합니다. 파일, InputStream 등과 같은 스트리밍 종류의 메시지 페이로드는 BytesMessage 또는 StreamMessage로 전송됩니다. 이 옵션은 사용할 유형을 제어합니다. 기본적으로 BytesMessage는 전체 메시지 페이로드를 메모리로 읽어오도록 적용하는 데 사용됩니다. 이 옵션을 활성화하면 메시지 페이로드가 청크의 메모리에 판독되고 각 청크는 더 이상 데이터가 없을 때까지 StreamMessage에 작성됩니다.

false

boolean

formatDateHeadersTo Iso8601 (producer)

ISO 8601 표준에 따라 날짜 헤더를 포맷해야 하는지 여부를 설정합니다.

false

boolean

headerFilterStrategy (filter)

사용자 지정 org.apache.camel.spi.HeaderFilterStrategy를 사용하여 Camel 메시지로 헤더를 필터링하려면 다음을 수행합니다.

 

HeaderFilterStrategy

resolveProperty Placeholders (advanced)

구성 요소가 시작 시 자체적으로 속성 자리 표시자를 확인해야 하는지 여부입니다. String 유형의 속성만 속성 자리 표시자를 사용할 수 있습니다.Only properties which are of String type can use property placeholders.

true

boolean

AMQP 엔드포인트는 URI 구문을 사용하여 구성됩니다.

amqp:destinationType:destinationName

다음 경로 및 쿼리 매개변수를 사용합니다.

5.2.1. 경로 매개 변수(2 매개변수):

Expand
이름설명기본값유형

destinationType

사용할 대상의 종류

queue

문자열

destinationName

대상으로 사용할 큐 또는 항목의 이름입니다.The name of the queue or topic to use as destination

 

문자열

5.2.2. 쿼리 매개변수(91 매개변수):

Expand
이름설명기본값유형

clientID( 일반)

사용할 JMS 클라이언트 ID를 설정합니다. 이 값은 지정된 경우 고유해야 하며 단일 JMS 연결 인스턴스에서만 사용할 수 있습니다. 일반적으로 내구성 주제 서브스크립션에만 필요합니다. Apache ActiveMQ를 사용하는 경우 대신 가상 주제를 사용할 수 있습니다.

 

문자열

ConnectionFactory (일반)

사용할 연결 팩토리입니다. 구성 요소 또는 끝점에서 연결 팩토리를 구성해야 합니다.

 

ConnectionFactory

disableReplyTo (common)

Camel이 메시지의 JMSReplyTo 헤더를 무시할지 여부를 지정합니다. true인 경우 Camel은 JMSReplyTo 헤더에 지정된 대상으로 회신을 다시 보내지 않습니다. Camel을 경로에서 사용하고 Camel이 자동으로 응답 메시지를 처리하므로 응답 메시지를 처리하도록 하려면 이 옵션을 사용할 수 있습니다. Camel을 다른 메시지 브로커 간에 프록시로 사용하고 한 시스템에서 다른 시스템으로 메시지를 라우팅하려는 경우에도 이 옵션을 사용할 수 있습니다.

false

boolean

durableSubscriptionName (common)

내구성 주제 서브스크립션을 지정하기 위한 내구성 있는 구독자 이름입니다. clientId 옵션도 구성해야 합니다.

 

문자열

jmsMessageType (common)

JMS 메시지를 전송하기 위해 특정 javax.jms.Message 구현을 강제로 사용할 수 있습니다. 가능한 값은 Bytes, Map, Object, Stream, Text입니다. 기본적으로 Camel은 본문 유형에서 사용할 JMS 메시지 유형을 결정합니다. 이 옵션을 사용하면 지정할 수 있습니다.

 

JmsMessageType

testConnectionOnStartup (일반)

시작 시 연결을 테스트할지 여부를 지정합니다.Specifies whether to test the connection on startup. 이를 통해 Camel이 모든 JMS 소비자가 JMS 브로커에 대한 유효한 연결을 시작하게 합니다. 연결을 허용할 수 없는 경우 Camel은 시작 시 예외를 throw합니다. 이렇게 하면 Camel이 실패한 연결로 시작되지 않습니다. JMS 생산자도 테스트 중입니다.

false

boolean

acknowledgementModeName (consumer)

SESSION_TRANSACTED, CLIENT_ACKNOWLEDGE, AUTO_ACKNOWLEDGE, DUPS_OK_ACKNOWLEDGE 중 하나인 JMS 승인 이름

AUTO_ ACKNOWLEDGE

문자열

asyncConsumer (Consumer)

JmsConsumer가 Exchange를 비동기적으로 처리하는지 여부입니다. 활성화된 경우 JmsConsumer는 이전 메시지가 비동기적으로(Asynchronous Routing Engine에 의해) 비동기적으로 처리되는 동안 JMS 대기열에서 다음 메시지를 선택할 수 있습니다. 즉, 메시지가 100% 엄격하게 정렬되어 처리되지 않을 수 있습니다. 비활성화된 경우 Exchange는 JmsConsumer가 JMS 대기열에서 다음 메시지를 선택하기 전에 완전히 처리됩니다. 트랜잭션이 활성화된 경우 트랜잭션이 동기적으로 실행되어야 하므로 비동기Consumer=true가 비동기적으로 실행되지 않습니다(Camel 3.0은 비동기 트랜잭션을 지원할 수 있음).

false

boolean

AutoStartup (consumer)

소비자 컨테이너가 자동으로 시작되어야 하는지 여부를 지정합니다.

true

boolean

bridgeErrorHandler (consumer)

소비자를 Camel 라우팅 오류 처리기에 브리징할 수 있습니다. 이는 소비자가 들어오는 메시지를 선택하는 동안 예외가 발생한 것을 의미하며, 이제 메시지로 처리되어 라우팅 오류 처리기에 의해 처리됩니다. 기본적으로 소비자는 org.apache.camel.spi.ExceptionHandler를 사용하여 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

false

boolean

cacheLevel (consumer)

기본 JMS 리소스의 ID별 캐시 수준을 설정합니다. 자세한 내용은 cacheLevelName 옵션을 참조하십시오.

 

int

cacheLevelName (consumer)

기본 JMS 리소스의 이름으로 캐시 수준을 설정합니다. 가능한 값은 CACHE_AUTO, CACHE_CONNECTION, CACHE_CONSUMER, CACHE_NONE 및 CACHE_SESSION입니다. 기본 설정은 CACHE_AUTO입니다. 자세한 내용은 Spring 문서 및 트랜잭션 캐시 수준을 참조하십시오.

CACHE_AUTO

문자열

concurrentConsumers (consumer)

JMS에서 사용할 때 기본 동시 소비자 수를 지정합니다( JMS를 통한 요청/복제용 아님). 스레드의 동적 확장/다운을 제어하려면 maxMessagesPerTask 옵션도 참조하십시오. JMS를 통해 요청/응답 시 replyToConcurrentConsumers 옵션은 응답 메시지 리스너에서 동시 소비자 수를 제어하는 데 사용됩니다.

1

int

maxConcurrentConsumers (Consumer)

JMS에서 사용할 때 최대 동시 소비자 수를 지정합니다( JMS를 통한 요청/복제용 아님). 스레드의 동적 확장/다운을 제어하려면 maxMessagesPerTask 옵션도 참조하십시오. JMS를 통해 요청/응답 시 replyToMaxConcurrentConsumers 옵션은 응답 메시지 리스너에서 동시 소비자 수를 제어하는 데 사용됩니다.

 

int

응답 대상 (consumer)

Message.getJMSReplyTo()의 들어오는 값을 재정의하는 명시적 ReplyTo 대상을 제공합니다.

 

문자열

replyToDeliveryPersistent (consumer)

응답에 대해 기본적으로 영구 전달을 사용할지 여부를 지정합니다.

true

boolean

선택기 (소비자)

사용할 JMS 선택기 설정

 

문자열

SubscriptionDurable (consumer)

서브스크립션의 내구성을 유지할지 여부를 설정합니다. 사용할 내구성 서브스크립션 이름은 subscriptionName 속성을 통해 지정할 수 있습니다. 기본값은 false입니다. 일반적으로 subscriptionName 값과 함께 사용 가능한 서브스크립션을 등록하려면 true로 설정합니다(메시지 리스너 클래스 이름이 서브스크립션 이름으로 충분하지 않은 경우). 주제(pub-sub 도메인)를 청취할 때만 의미가 있으므로 이 방법은 pubSubDomain 플래그를 전환합니다.

false

boolean

subscriptionName (consumer)

생성할 서브스크립션의 이름을 설정합니다. 공유 또는 내구성이 있는 주제(pub-sub 도메인)의 경우 적용됩니다. 서브스크립션 이름은 이 클라이언트의 JMS 클라이언트 ID 내에서 고유해야 합니다. 기본값은 지정된 메시지 리스너의 클래스 이름입니다. 참고: JMS 2.0이 필요한 공유 서브스크립션을 제외하고 각 서브스크립션에 대해 1개의 동시 소비자(이 기본값은 이 메시지 리스너 컨테이너)만 허용됩니다.

 

문자열

subscriptionShared (consumer)

서브스크립션을 공유할지 여부를 설정합니다. 사용할 공유 서브스크립션 이름은 subscriptionName 속성을 통해 지정할 수 있습니다. 기본값은 false입니다. 일반적으로 subscriptionName 값과 함께 공유 서브스크립션을 등록하려면 true로 설정합니다(메시지 리스너 클래스 이름이 서브스크립션 이름으로 충분하지 않은 경우). 공유 서브스크립션도 내구성이 있을 수 있으므로 이 플래그도 subscriptionDurable과 결합될 수 있습니다. 주제(pub-sub 도메인)를 청취할 때만 의미가 있으므로 이 방법은 pubSubDomain 플래그를 전환합니다. JMS 2.0 호환 메시지 브로커가 필요합니다.

false

boolean

acceptMessages whileeStopping (consumer)

소비자가 중지되는 동안 메시지를 수락하는지 여부를 지정합니다. 대기열에 포함된 메시지가 여전히 있는 동안 런타임에 JMS 경로를 시작하고 중지하는 경우 이 옵션을 활성화할 수 있습니다. 이 옵션이 false이고 JMS 경로를 중지하면 메시지가 거부될 수 있으며 JMS 브로커는 재전송을 시도해야 하지만 다시 거부될 수 있으며 결국 메시지가 JMS 브로커의 dead letter 큐에서 이동될 수 있습니다. 이 옵션을 사용하려면 이 옵션을 사용하는 것이 좋습니다.

false

boolean

allowReplyManagerQuickStop (consumer)

요청-reply 메시징에 대해 응답 관리자에게 사용되는 DefaultMessageListenerContainer에서 사용되는지 여부에 따라 JmsConfigurationisAcceptMessagesWhileStopping이 활성화되어 있고 org.apache.camel.CamelContext가 현재 중지되는 경우 DefaultMessageListenerContainer.runningAllowed 플래그를 빠르게 중지할 수 있습니다. 이 빠른 중지 기능은 일반 JMS 소비자에서 기본적으로 활성화되어 있지만 응답 관리자를 위해 이 플래그를 활성화해야 합니다.

false

boolean

consumerType (consumer)

사용할 소비자 유형은 Simple, Default 또는 Custom 중 하나일 수 있습니다. 소비자 유형은 사용할 Spring JMS 리스너를 결정합니다. 기본값은 org.springframework.jms.listener.DefaultMessageListenerContainer를 사용하며 Simple은 org.springframework.jms.listener.SimpleMessageListenerContainer를 사용합니다. Custom이 지정되면 messageListenerContainerFactory 옵션에 의해 정의된 MessageListenerContainerFactory는 사용할 org.springframework.jms.listener.AbstractMessageListenerContainer를 결정합니다.

기본값

ConsumerType

defaultTaskExecutorType (consumer)

소비자 끝점과 생산자 끝점의 ReplyTo 소비자 모두에 대해 DefaultMessageListenerContainer에서 사용할 기본 TaskExecutor 유형을 지정합니다. 가능한 값: SimpleAsync (SAP의 SimpleAsyncTaskExecutor) 또는 ThreadPool (s Spring의 ThreadPoolTaskExecutor 사용) - 캐시된 threadpool-like입니다. 설정하지 않으면 기본적으로 소비자 엔드포인트에 대해 캐시된 스레드 풀을 사용하고 응답 소비자에게 SimpleAsync를 사용하는 이전 동작으로 설정됩니다. ThreadPool은 동적으로 늘어나고 동시 소비자를 줄이는 탄력적 구성의 스레드 쓰레기를 줄이는 것이 좋습니다.

 

DefaultTaskExecutor Type

eagerLoadingOfProperties (consumer)

메시지가 로드되는 즉시 JMS 속성 및 페이로드를 신속하게 로드할 수 있습니다. 이 경우 JMS 속성이 필요하지 않기 때문에 일반적으로 비효율적일 수 있지만 기본 JMS 공급자 및 JMS 속성의 사용 문제를 조기에 포착할 수 있습니다.

false

boolean

예외 처리기 (consumer)

소비자가 사용자 지정 ExceptionHandler를 사용하도록 하려면 다음을 수행합니다. bridgeErrorHandler 옵션이 활성화되어 있는지 확인한 후 이 옵션이 사용되지 않습니다. 기본적으로 소비자는 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

 

ExceptionHandler

exchangePattern (consumer)

소비자가 교환을 생성할 때 교환 패턴을 설정합니다.

 

ExchangePattern

exposeListenerSession (consumer)

메시지를 사용할 때 리스너 세션을 노출해야 하는지 여부를 지정합니다.

false

boolean

replyToSameDestination Allowed (consumer)

JMS 소비자가 소비자가 사용할 때 사용하는 것과 동일한 대상으로 응답 메시지를 보낼 수 있는지 여부입니다. 이를 통해 무한 루프를 사용하지 않도록 하고 동일한 메시지를 자체에 보냅니다.This prevents an endless loop by consuming and sending back the same message to itself.

false

boolean

taskExecutor (consumer)

메시지를 사용하기 위한 사용자 지정 작업 executor를 지정할 수 있습니다.

 

TaskExecutor

deliveryMode (producer)

사용할 전달 모드를 지정합니다. 가능한 값은 javax.jms.DeliveryMode에서 정의한 값입니다. NON_PERSISTENT = 1 및 PERSISTENT = 2.

 

정수

deliveryPersistent (producer)

기본적으로 영구 제공이 사용되는지 여부를 지정합니다.

true

boolean

explicitQosEnabled (producer)

메시지를 보낼 때 서비스의 deliveryMode, 우선순위 또는 timeToLive 특성을 사용해야 하는 경우 설정합니다. 이 옵션은 Spring의 JmsTemplate을 기반으로 합니다. deliveryMode, priority 및 timeToLive 옵션이 현재 엔드포인트에 적용됩니다. 이는 메시지 세분화에서 작동하는 preserveMessageQos 옵션과 달리 Camel In 메시지 헤더에서만 QoS 속성을 읽습니다.

false

부울

formatDateHeadersToIso8601 (producer)

ISO 8601 표준에 따라 JMS 날짜 속성을 포맷해야 하는지 여부를 설정합니다.

false

boolean

preserveMessageQos (producer)

JMS 끝점의 QoS 설정이 아니라 메시지에 지정된 QoS 설정을 사용하여 메시지를 보내려면 true로 설정합니다. 다음 세 가지 헤더는 JMSPriority, JMSDeliveryMode 및 JMSExpiration으로 간주됩니다. 전부 또는 일부만 제공할 수 있습니다. 제공되지 않는 경우 Camel은 엔드포인트의 값을 사용하도록 대체합니다. 따라서 이 옵션을 사용하면 헤더가 끝점의 값을 재정의합니다. 반면 explicitQosEnabled 옵션은 메시지 헤더의 값이 아닌 끝점에 설정된 옵션만 사용합니다.

false

boolean

우선 순위 (producer)

1보다 큰 값은 보낼 때 메시지 우선 순위를 지정합니다(여기서 0이 가장 낮은 우선 순위이고 9가 가장 높은 경우). 이 옵션을 적용하려면 explicitQosEnabled 옵션도 활성화해야 합니다.

4

int

replyToConcurrentConsumers (producer)

JMS를 통해 요청/reply를 수행할 때 기본 동시 소비자 수를 지정합니다. 스레드의 동적 확장/다운을 제어하려면 maxMessagesPerTask 옵션도 참조하십시오.

1

int

replyToMaxConcurrent Consumers (producer)

JMS에서 요청/reply를 사용할 때 최대 동시 소비자 수를 지정합니다. 스레드의 동적 확장/다운을 제어하려면 maxMessagesPerTask 옵션도 참조하십시오.

 

int

replyToOnTimeoutMax ConcurrentConsumers (producer)

JMS를 통해 요청/reply를 사용할 때 시간 초과가 발생한 경우 계속 라우팅할 수 있는 최대 동시 소비자 수를 지정합니다.

1

int

replyToOverride (producer)

JMS 메시지에서 명시적 ReplyTo 대상을 제공하여 replyTo 설정을 재정의합니다. 메시지를 원격 대기열로 전달하고 ReplyTo 대상에서 응답 메시지를 수신하려는 경우 유용합니다.

 

문자열

replyToType (producer)

를 사용하면 JMS를 통해 요청/reply를 수행할 때 replyTo 큐에 사용할 유형의 전략을 명시적으로 지정할 수 있습니다. 가능한 값은 임시, 공유 또는 제외입니다. 기본적으로 Camel은 임시 대기열을 사용합니다. 그러나 replyTo가 구성된 경우 기본적으로 Shared가 사용됩니다. 이 옵션을 사용하면 공유 대기열 대신 전용 대기열을 사용할 수 있습니다. 자세한 내용은 Camel JMS 설명서를 참조하십시오. 특히 클러스터형 환경에서 실행 중인 경우 미치는 영향에 대한 참고 사항 및 공유 응답 대기열이 대체 시간 및 필수 값보다 성능이 낮다는 사실에서 참조하십시오.

 

ReplyToType

requestTimeout (producer)

InOut Exchange Pattern(밀리초)을 사용할 때 응답을 기다리는 시간 초과입니다. 기본값은 20초입니다. 이 엔드포인트 구성 시간 값을 재정의하기 위해 CamelJmsRequestTimeout 헤더를 포함할 수 있으므로 메시지당 개별 시간 제한 값이 있습니다. requestTimeoutCheckerInterval 옵션도 참조하십시오.

20000

long

TimeToLive (producer)

메시지를 보낼 때 메시지의 TTL(밀리초)을 지정합니다.

-1

long

additional Headers(producer) 허용

이 옵션은 JMS 사양에 따라 유효하지 않은 값이 있을 수 있는 추가 헤더를 허용하는 데 사용됩니다. 예를 들어 WMQ와 같은 일부 메시지 시스템은 바이트 배열 또는 기타 잘못된 유형의 값이 포함된 접두사 JMS_IBM_MQMD_를 사용하여 헤더 이름으로 이 작업을 수행합니다. 여러 헤더 이름을 쉼표로 구분하여 지정하고 와일드카드 일치에 접미사로 사용할 수 있습니다.

 

문자열

allownullBody (producer)

본문 없이 메시지를 보낼 수 있는지 여부입니다. 이 옵션이 false이고 메시지 본문이 null이면 JMSException이 발생합니다.

true

boolean

alwaysCopyMessage (producer)

true인 경우 Camel은 전송을 위해 생산자에 전달될 때 항상 메시지의 JMS 메시지 사본을 만듭니다. replyToDestinationSelectorName이 설정된 경우와 같이 메시지를 복사하는 데 필요한 경우 Camel은 replyToDestinationSelectorName이 설정된 경우 alwaysCopyMessage 옵션을 true로 설정합니다.

false

boolean

correlationProperty (producer)

InOut 교환 패턴을 사용하는 경우 JMSCorrelationID JMS 속성 대신 이 JMS 속성을 사용하여 메시지를 서로 연관시킵니다. 설정 메시지가 이 속성의 값에만 상관되는 경우 JMSCorrelationID 속성은 무시되고 Camel에 의해 설정되지 않습니다.

 

문자열

disableTimeToLive (producer)

이 옵션을 사용하여 실행 중인 시간을 강제 비활성화하십시오. 예를 들어 JMS를 요청/재정하는 경우 Camel은 기본적으로 requestTimeout 값을 전송 중인 메시지 라이브 시간으로 사용합니다. 문제는 발신자와 수신자 시스템이 시계를 동기화해야 하므로 시계가 동기화되어 있다는 것입니다. 항상 압축하기가 쉽지는 않습니다. so you can use disableTimeToLive=true to not set a time to live value on the sent message. 그러면 메시지가 수신자 시스템에서 만료되지 않습니다. 자세한 내용은 아래 섹션을 참조하십시오.

false

boolean

forceSendOriginalMessage (producer)

mapJmsMessage=false Camel을 사용하면 경로 중 헤더를 만났을 때 새 JMS 대상에 보낼 새 JMS 메시지가 생성됩니다. 수신한 원래 JMS 메시지를 전송하도록 Camel을 강제 적용하려면 이 옵션을 true로 설정합니다.

false

boolean

includeSentJMSMessageID (producer)

InOnly(예: fire 및 forget)를 사용하여 JMS 대상으로 보낼 때만 적용됩니다. 이 옵션을 사용하면 메시지가 JMS 대상으로 전송될 때 JMS 클라이언트에서 사용하는 실제 JMSMessageID로 Camel Exchange가 강화됩니다.

false

boolean

replyToCacheLevelName (producer)

JMS를 통해 요청/반복을 수행할 때 응답 소비자의 이름으로 캐시 수준을 설정합니다. 이 옵션은 고정 응답 대기열(임시 아님)을 사용하는 경우에만 적용됩니다. Camel은 기본적으로 배타적 또는 공유 w/ replyToSelectorName에 대해 CACHE_CONSUMER를 사용합니다. 그리고 replyToSelectorName 없이 공유의 경우 CACHE_SESSION을 사용합니다. IBM WebSphere와 같은 일부 JMS 브로커는 작동하도록 replyToCacheLevelName=CACHE_NONE을 설정해야 할 수 있습니다. 참고: 임시 대기열을 사용하는 경우 CACHE_NONE이 허용되지 않으며 CACHE_CONSUMER 또는 CACHE_SESSION과 같은 더 높은 값을 사용해야 합니다.

 

문자열

replyToDestinationSelector 이름 (producer)

공유 대기열을 사용할 때(즉, 임시 응답 대기열을 사용하지 않는 경우) 다른 이름에서 자체 응답을 필터링할 수 있도록 사용할 고정 이름을 사용하여 JMS Selector를 설정합니다.

 

문자열

streamMessageTypeEnabled (producer)

StreamMessage 유형이 활성화되어 있는지 여부를 설정합니다. 파일, InputStream 등과 같은 스트리밍 종류의 메시지 페이로드는 BytesMessage 또는 StreamMessage로 전송됩니다. 이 옵션은 사용할 유형을 제어합니다. 기본적으로 BytesMessage는 전체 메시지 페이로드를 메모리로 읽어오도록 적용하는 데 사용됩니다. 이 옵션을 활성화하면 메시지 페이로드가 청크의 메모리에 판독되고 각 청크는 더 이상 데이터가 없을 때까지 StreamMessage에 작성됩니다.

false

boolean

allowSerializedHeaders (advanced)

직렬화된 헤더를 포함할지 여부를 제어합니다. 이는 transferExchange가 true인 경우에만 적용됩니다. 이렇게 하려면 개체가 직렬화 가능 해야 합니다.This requires that the objects are serializable. Camel은 non-serializable 오브젝트를 제외하고 WARN 수준에서 로깅합니다.

false

boolean

asyncStartListener (advanced)

경로를 시작할 때 JmsConsumer 메시지 리스너를 비동기적으로 시작할지 여부입니다. 예를 들어 JmsConsumer가 원격 JMS 브로커에 대한 연결을 가져올 수 없는 경우 재시도 및/또는 페일오버를 시도하는 동안 차단될 수 있습니다. 이로 인해 Camel이 경로를 시작하는 동안 차단됩니다. 이 옵션을 true로 설정하면 JmsConsumer가 비동기 모드에서 전용 스레드를 사용하여 JMS 브로커에 연결하는 동안 시작 경로를 지정할 수 있습니다. 이 옵션을 사용하면 연결을 설정할 수 없는 경우 예외가 WARN 수준에서 기록되고 소비자는 메시지를 수신할 수 없습니다. 그런 다음 다시 시도하도록 경로를 다시 시작할 수 있습니다.

false

boolean

asyncStopListener (advanced)

경로를 중지할 때 JmsConsumer 메시지 리스너를 비동기적으로 중지할지 여부입니다.

false

boolean

destinationResolver (advanced)

고유한 확인자를 사용할 수 있는 플러그형 org.springframework.jms.support.DestinationResolver(예: JNDI 레지스트리에서 실제 대상을 조회하기 위해).

 

DestinationResolver

errorHandler (advanced)

메시지를 처리하는 동안 throw되지 않은 예외의 경우 호출될 org.springframework.util.ErrorHandler를 지정합니다. 기본적으로 이러한 예외는 errorHandler가 구성되지 않은 경우 WARN 수준에서 기록됩니다. 로깅 수준 및 스택 추적을 errorHandlerLoggingLevel 및 errorHandlerLogStackTrace 옵션을 사용하여 기록해야 하는지 여부를 구성할 수 있습니다. 이렇게 하면 사용자 지정 오류 처리기를 코딩하는 것보다 훨씬 쉽게 구성할 수 있습니다.This makes it much easier to configure, than having to code a custom errorHandler.

 

ErrorHandler

exceptionListener (advanced)

기본 JMS 예외에 대해 알림을 받을 JMS Exception Listener를 지정합니다.

 

ExceptionListener

headerFilterStrategy (advanced)

사용자 지정 HeaderFilterStrategy를 사용하여 Camel 메시지와의 헤더를 필터링합니다.

 

HeaderFilterStrategy

idleConsumerLimit (advanced)

언제든지 유휴 상태일 수 있는 소비자 수에 대한 제한을 지정합니다.

1

int

idleTaskExecutionLimit (advanced)

수신 작업의 유휴 실행에 대한 제한을 지정하고 해당 실행 내에 메시지를 받지 못했습니다. 이 제한에 도달하면 작업이 종료되고 다른 실행 작업에 대한 수신을 그대로 둡니다(동적 스케줄링의 경우 maxConcurrentConsumers 설정을 참조). Spring에서 사용할 수 있는 추가 doc가 있습니다.

1

int

includeAllJMSXProperties (advanced)

JMS에서 Camel Message로 매핑할 때 모든 JMSXxxx 속성을 포함할지 여부입니다. 이 값을 true로 설정하면 JMSXAppID 및 JMSXUserID 등과 같은 속성이 포함됩니다. 참고: 사용자 지정 headerFilterStrategy를 사용하는 경우 이 옵션이 적용되지 않습니다.

false

boolean

jmsKeyFormatStrategy (advanced)

JMS 사양을 준수하는 데 사용할 수 있도록 JMS 키를 인코딩 및 디코딩하는 플러그인 전략입니다. Camel은 기본 및 패스스루의 두 가지 구현을 제공합니다. 기본 전략은 점과 하이픈을 안전하게 마샬링합니다(. 및 -). 통과 전략은 다음과 같이 키를 남겨 둡니다. JMS 헤더 키에 불법 문자가 포함되어 있는지 여부를 고려하지 않는 JMS 브로커에 사용할 수 있습니다. org.apache.camel.component.jms.JmsKeyFormatStrategy의 자체 구현을 제공하고 표기법을 사용하여 참조할 수 있습니다.

 

문자열

mapJmsMessage (advanced)

Camel이 수신된 JMS 메시지를 javax.jms.TextMessage와 같은 적절한 페이로드 유형에 자동 매핑해야 하는지 여부를 문자열 등에 지정합니다.

true

boolean

maxMessagesPerTask (advanced)

작업당 메시지 수입니다. -1은 무제한입니다. 동시 소비자에 범위(예: max)를 사용하는 경우 이 옵션을 사용하여 더 적은 작업이 필요할 때 소비자의 속도를 축소하는 방법을 제어하기 위해 값을 100으로 설정할 수 있습니다.

-1

int

messageConverter (advanced)

사용자 지정 Spring org.springframework.jms.support.converter.MessageConverter를 사용하려면 javax.jms.Message에 매핑할 수 있는 방법을 제어할 수 있습니다.

 

MessageConverter

messageCreatedStrategy (advanced)

Camel이 JMS 메시지를 보낼 때 Camel이 javax.jms.Message 오브젝트의 새 인스턴스를 생성할 때 호출되는 지정된 MessageCreatedStrategy를 사용합니다.

 

MessageCreatedStrategy

messageIdEnabled (advanced)

전송할 때 메시지 ID를 추가해야 하는지 여부를 지정합니다. 이는 JMS 브로커에 대한 힌트일 뿐입니다. JMS 공급자가 이 힌트를 수락하는 경우 이러한 메시지에는 메시지 ID가 null로 설정되어야 합니다. 공급자가 힌트를 무시하는 경우 메시지 ID를 일반 고유 값으로 설정해야 합니다.

true

boolean

messageListenerContainer Factory (advanced)

메시지를 사용하는 데 사용할 org.springframework.jms.listener.AbstractMessageListenerContainer를 결정하는 데 사용되는 MessageListenerContainer의 레지스트리 ID입니다. 이를 설정하면 consumerType이 Custom으로 자동 설정됩니다.

 

MessageListener ContainerFactory

messageTimestampEnabled (advanced)

메시지 전송 시 기본적으로 타임스탬프를 활성화할지 여부를 지정합니다. 이는 JMS 브로커에 대한 힌트일 뿐입니다. JMS 공급자가 이 힌트를 수락하는 경우 이러한 메시지에는 타임스탬프가 0으로 설정되어야 합니다. 공급자가 힌트를 무시하면 타임스탬프를 정규 값으로 설정해야 합니다.

true

boolean

pubSubNoLocal (advanced)

자체 연결에서 게시한 메시지 배달을 금지할지 여부를 지정합니다.Specifies whether to inhibit the delivery of messages published by its own connection.

false

boolean

receiveTimeout (advanced)

메시지 수신 시간(밀리초)입니다.

1000

long

복구Interval (advanced)

연결이 새로 고쳐질 때(즉, 밀리초) 복구 시도 사이의 간격을 지정합니다. 기본값은 5000ms, 즉 5초입니다.

5000

long

requestTimeoutChecker Interval (advanced)

Camel이 JMS를 통해 요청/반복 시 Exchange 시간 초과를 확인하는 빈도를 설정합니다. 기본적으로 Camel은 초당 한 번 확인합니다. 그러나 시간 초과가 발생할 때 더 빠르게 대응해야 하는 경우 이 간격을 낮추어 더 자주 확인할 수 있습니다. 시간 제한은 옵션 requestTimeout에 따라 결정됩니다.

1000

long

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

transferException (advanced)

활성화되고 소비자 측면에서 Request Reply messaging(InOut)을 사용하고 Exchange 실패를 사용하는 경우 원인 Exception이 다시 javax.jms.ObjectMessage로 응답으로 다시 전송됩니다. 클라이언트가 Camel인 경우 반환된 Exception은 rethrown입니다. 이를 통해 라우팅에서 Camel JMS를 브리지로 사용할 수 있습니다. 예를 들어 영구 대기열을 사용하여 강력한 라우팅을 활성화할 수 있습니다. 또한 transferExchange를 사용하도록 설정한 경우 이 옵션이 우선합니다. catch 예외는 직렬화 가능 해야 합니다.The caught exception is required to be serializable. 소비자 측의 원래 예외는 생산자로 반환될 때 org.apache.camel.RuntimeCamelException과 같은 외부 예외로 래핑될 수 있습니다.

false

boolean

transferExchange (advanced)

당신은 단지 바디와 헤더 대신 전선을 통해 교환을 전송할 수 있습니다. 다음 필드가 전송됩니다. 본문, 외부 본문, Fault 본문, 헤더, 외부 헤더, Fault 헤더, 교환 속성, 교환 예외. 이렇게 하려면 개체가 직렬화 가능 해야 합니다.This requires that the objects are serializable. Camel은 non-serializable 오브젝트를 제외하고 WARN 수준에서 로깅합니다. 제작자와 소비자 측에서 이 옵션을 모두 활성화해야 하므로 Camel은 페이로드가 Exchange이고 일반 페이로드가 아닌 Exchange임을 알고 있습니다.

false

boolean

transferFault (advanced)

활성화된 경우 Request Reply messaging (InOut)을 사용하고 Exchange가 소비자 측에서 SOAP 오류 ( exception 아님)와 함께 실패한 경우 MessageisFault()의 오류 플래그는 키 org.apache.camel.component.jmsConstel.jms.JmsConstConstantJMS_TRANSTER_FATER_FATER_FATER_FATER_FATER_FATER_FATER_JMST_FATER_FAT 클라이언트가 Camel인 경우 반환된 fault 플래그가 링크 org.apache.camel.MessagesetFault(boolean)에 설정됩니다. Cxf 또는 Spring-ws와 같은 SOAP과 같은 결함을 지원하는 Camel 구성 요소를 사용할 때 이를 활성화할 수 있습니다.

false

boolean

useMessageIDAsCorrelation ID (advanced)

JMSMessageID를 항상 InOut 메시지의 JMSCorrelationID로 사용할지 여부를 지정합니다.

false

boolean

waitForProvisionCorrelation ToBeUpdatedCounter (advanced)

JMS를 통해 요청/응답할 때 및 useMessageIDAsCorrelationID 옵션이 활성화된 경우 provisional correlation id가 실제 상관 관계 ID로 업데이트될 때까지 대기하는 횟수입니다.

50

int

waitForProvisionCorrelation ToBeUpdatedThreadSleeping Time (advanced)

프로비저닝 상관 ID가 업데이트될 때까지 기다리는 동안 밀리코어가 잠기지 않는 간격입니다.

100

long

errorHandlerLoggingLevel (logging)

은 로깅되지 않은 예외에 대해 기본 errorHandler 로깅 수준을 구성할 수 있습니다.

WARN

LoggingLevel

errorHandlerLogStackTrace (logging)

기본 errorHandler로 stacktrace를 기록해야 하는지 여부를 제어할 수 있습니다.

true

boolean

암호 (보안)

ConnectionFactory에 사용할 암호입니다. ConnectionFactory에서 사용자 이름/암호를 직접 구성할 수도 있습니다.

 

문자열

사용자 이름 (보안)

ConnectionFactory와 함께 사용할 사용자 이름입니다. ConnectionFactory에서 사용자 이름/암호를 직접 구성할 수도 있습니다.

 

문자열

트랜잭션(Transaction acted )

transacted 모드를 사용할지 여부를 지정합니다.

false

boolean

lazyCreateTransaction Manager (transaction)

true인 경우 Camel은 옵션을 transacted=true할 때 삽입된 transactionManager가 없는 경우 JmsTransactionManager를 생성합니다.

true

boolean

TransactionManager (transaction)

사용할 Spring 트랜잭션 관리자입니다.

 

PlatformTransaction Manager

transactionName (transaction)

사용할 트랜잭션의 이름입니다.

 

문자열

TransactionTimeout (transaction)

트랜잭션 모드를 사용하는 경우 트랜잭션의 시간 초과 값(초 단위)입니다.

-1

int

5.3. 사용법

AMQP 구성 요소가 JMS 구성 요소에서 상속되므로 전자 사용은 후자의 사용과 거의 동일합니다.

AMQP 구성 요소 사용

// Consuming from AMQP queue
from("amqp:queue:incoming").
  to(...);
 
// Sending message to the AMQP topic
from(...).
  to("amqp:topic:notify");

5.4. AMQP 구성 요소 구성

Camel 2.16.1부터 AMQPComponent#amqp10Component(String connectionURI) 팩토리 메서드를 사용하여 사전 구성된 주제 접두사가 있는 AMQP 1.0 구성 요소를 반환할 수도 있습니다. 

AMQP 1.0 구성 요소 생성

 AMQPComponent amqp = AMQPComponent.amqp10Component("amqp://guest:guest@localhost:5672");

Camel 2.17부터 AMQPComponent#amqp10Component(String connectionURI) 팩토리 방법(String connectionURI)의 경우 AMQPComponent#amqpComponent(String connectionURI) 를 대신하여 더 이상 사용되지 않습니다. 

AMQP 1.0 구성 요소 생성

AMQPComponent amqp = AMQPComponent.amqpComponent("amqp://localhost:5672");
 
AMQPComponent authorizedAmqp = AMQPComponent.amqpComponent("amqp://localhost:5672", "user", "password");

AMQP 구성 요소를 자동으로 구성하기 위해 Camel 2.17부터 레지스트리에 org.apache.camel.component.amqp.AMQPConnectionDetails 인스턴스를 추가할 수도 있습니다. 예를 들어 Spring Boot의 경우 빈을 정의해야 합니다.

AMQP 연결 세부 정보 자동 구성

@Bean
AMQPConnectionDetails amqpConnection() {
  return new AMQPConnectionDetails("amqp://localhost:5672");
}
 
@Bean
AMQPConnectionDetails securedAmqpConnection() {
  return new AMQPConnectionDetails("amqp://lcoalhost:5672", "username", "password");
}

마찬가지로 Camel-CDI를 사용할 때 CDI 생산자 방법을 사용할 수도 있습니다.

AMQP 연결 세부 정보 CDI의 자동 구성

@Produces
AMQPConnectionDetails amqpConnection() {
  return new AMQPConnectionDetails("amqp://localhost:5672");
}

Camel 속성 을 사용하여 AMQP 연결 세부 정보를 읽을 수도 있습니다. 팩토리 방법 AMQPConnectionDetails.discoverAMQP() 는 아래 스니펫에서와 같이 Kubernetes와 유사한 규칙에서 Camel 속성을 읽으려고 합니다.

AMQP 연결 세부 정보 자동 구성

export AMQP_SERVICE_HOST = "mybroker.com"
export AMQP_SERVICE_PORT = "6666"
export AMQP_SERVICE_USERNAME = "username"
export AMQP_SERVICE_PASSWORD = "password"
 
...
 
@Bean
AMQPConnectionDetails amqpConnection() {
  return AMQPConnectionDetails.discoverAMQP();
}

AMQP 관련 옵션 활성화

예를 들어, 다음 예제 와 같이 옵션을 URI에 추가하여mqp.traceFrames 를 활성화해야 합니다.

AMQPComponent amqp = AMQPComponent.amqpComponent("amqp://localhost:5672?amqp.traceFrames=true");

참조는 QPID JMS 클라이언트 구성을 참조하십시오.

5.5. 주제 사용

camel-amqp 로 작업하는 주제를 사용하려면 다음과 같이 topic:// 를 주제 접두사로 사용하도록 구성 요소를 구성해야 합니다.

 <bean id="amqp" class="org.apache.camel.component.amqp.AmqpComponent">
   <property name="connectionFactory">
     <bean class="org.apache.qpid.jms.JmsConnectionFactory" factory-method="createFromURL">
       <property name="remoteURI" value="amqp://localhost:5672" />
       <property name="topicPrefix" value="topic://" />  <!-- only necessary when connecting to ActiveMQ over AMQP 1.0 -->
     </bean>
   </property>
 </bean>

AMQPComponent#amqpComponent() 메서드와 AMQPConnectionDetails 둘 다 주제 접두사로 구성 요소를 미리 구성하므로 이를 명시적으로 구성할 필요가 없습니다.

5.6. 예를 들면 다음과 같습니다.

  • Camel 구성
  • 구성 요소
  • 끝점
  • 시작하기

6장. APNS 구성 요소

Camel 버전 2.8에서 사용 가능

apns 구성 요소는 iOS 장치에 알림을 보내는 데 사용됩니다. apns 구성 요소는 javapns 라이브러리를 사용합니다.
구성 요소는 Apple Push Notification Servers(APNS)에 알림을 보내고 서버에서 피드백을 사용할 수 있도록 지원합니다.

소비자는 Apple Push Notification Servers에서 때때로 피드백 스트림을 사용하는 것이 최상의 관행이기 때문에 기본적으로 3600초로 구성됩니다. 예를 들어, 서버 홍수를 방지하기 위해 1시간마다.

피드백 스트림은 비활성 장치에 대한 정보를 제공합니다. 모바일 애플리케이션이 크게 사용되지 않은 경우에만 몇 시간마다 이 정보를 얻을 수 있습니다.

Maven 사용자는 이 구성 요소를 위해 다음 종속성을 pom.xml 에 추가해야 합니다.

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-apns</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>

6.1. URI 형식

알림을 보내려면 다음을 수행합니다.

apns:notify[?options]

피드백을 사용하려면 다음을 수행합니다.

apns:consumer[?options]

6.2. 옵션

APNS 구성 요소는 아래 나열된 두 가지 옵션을 지원합니다.

Expand
이름설명기본값유형

apnsService (일반)

사용할 ApnsService가 필요합니다. org.apache.camel.component.apns.factory.ApnsServiceFactory를 사용하여 ApnsService를 빌드할 수 있습니다.

 

ApnsService

resolveProperty Placeholders (advanced)

구성 요소가 시작 시 자체적으로 속성 자리 표시자를 확인해야 하는지 여부입니다. String 유형의 속성만 속성 자리 표시자를 사용할 수 있습니다.Only properties which are of String type can use property placeholders.

true

boolean

APNS 끝점은 URI 구문을 사용하여 구성됩니다.

apns:name

다음 경로 및 쿼리 매개변수를 사용합니다.

6.2.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

name

끝점의 이름입니다.

 

문자열

6.2.2. 쿼리 매개변수 (20 매개변수):

Expand
이름설명기본값유형

토큰 (공용)

알림하려는 장치와 관련된 토큰을 정적으로 선언하려는 경우 이 속성을 구성합니다. 토큰은 쉼표로 구분됩니다.

 

문자열

bridgeErrorHandler (consumer)

소비자를 Camel 라우팅 오류 처리기에 브리징할 수 있습니다. 이는 소비자가 들어오는 메시지를 선택하는 동안 예외가 발생한 것을 의미하며, 이제 메시지로 처리되어 라우팅 오류 처리기에 의해 처리됩니다. 기본적으로 소비자는 org.apache.camel.spi.ExceptionHandler를 사용하여 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

false

boolean

sendEmptyMessageWhenIdle (consumer)

폴링 소비자가 파일을 폴링하지 않은 경우 이 옵션을 활성화하여 빈 메시지( 본문 없음)를 대신 보낼 수 있습니다.

false

boolean

예외 처리기 (consumer)

소비자가 사용자 지정 ExceptionHandler를 사용하도록 하려면 다음을 수행합니다. bridgeErrorHandler 옵션이 활성화되어 있는지 확인한 후 이 옵션이 사용되지 않습니다. 기본적으로 소비자는 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

 

ExceptionHandler

exchangePattern (consumer)

소비자가 교환을 생성할 때 교환 패턴을 설정합니다.

 

ExchangePattern

pollStrategy (consumer)

플러그형 org.apache.camel.PollingConsumerPollingStrategy를 사용하면 Camel에서 Exchange를 생성하고 라우팅하기 전에 폴링 작업 중에 일반적으로 발생한 오류 처리를 제어하는 사용자 정의 구현을 제공할 수 있습니다.

 

PollingConsumerPoll Strategy

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

backoffErrorThreshold (scheduler)

백오프Multipler를 시작하기 전에 발생해야 하는 후속 오류 폴링(일부 오류 발생) 수입니다.

 

int

backoffIdleThreshold (scheduler)

백오프Multipler를 시작하기 전에 발생해야 하는 후속 유휴 폴링 수입니다.

 

int

backoffMultiplier (scheduler)

예약된 폴링 소비자 백오프가 연속된 여러 개의 유휴/errors가 있는 경우 해당 행에 사용할 수 있습니다. multiplier는 다음 실제 시도가 다시 발생하기 전에 건너뛸 폴링 수입니다. 이 옵션을 사용하는 경우 backoffIdleThreshold 및/또는 backoffErrorThreshold도 구성해야 합니다.

 

int

지연 (scheduler)

다음 폴링보다 밀리초입니다. 60초(60초), 5m30초(5분 및 30초) 및 1h(1시간)와 같은 단위를 사용하여 시간 값을 지정할 수도 있습니다.

500

long

greedy (scheduler)

greedy가 활성화된 경우 ScheduledPollConsumer는 이전 실행이 1개 이상의 메시지를 폴링하면 즉시 다시 실행됩니다.

false

boolean

initialDelay (scheduler)

첫 번째 폴링이 시작되기 전까지의 밀리초입니다. 60초(60초), 5m30초(5분 및 30초) 및 1h(1시간)와 같은 단위를 사용하여 시간 값을 지정할 수도 있습니다.

1000

long

runLoggingLevel (scheduler)

소비자는 폴링할 때 시작/완료 로그 행을 기록합니다. 이 옵션을 사용하면 로깅 수준을 구성할 수 있습니다.

TRACE

LoggingLevel

scheduledExecutorService (scheduler)

소비자에 사용할 사용자 지정/공유 스레드 풀을 구성할 수 있습니다. 기본적으로 각 소비자는 자체 스레드 스레드 풀이 있습니다.

 

ScheduledExecutor Service

스케줄러 (scheduler)

camel-spring 또는 camel-quartz2 구성 요소에서 cron 스케줄러를 사용하려면

none

ScheduledPollConsumer Scheduler

스케줄러 속성 (scheduler)

사용자 지정 스케줄러 또는 Quartz2, Spring 기반 스케줄러를 사용할 때 추가 속성을 구성하려면 다음을 수행합니다.

 

map

StartScheduler (scheduler)

스케줄러가 자동으로 시작되어야 하는지 여부입니다.

true

boolean

timeUnit (scheduler)

initialDelay 및 지연 옵션의 시간 단위입니다.

밀리초

TimeUnit

UseFixedDelay (scheduler)

고정 지연 또는 고정 속도가 사용되는 경우 제어합니다. 자세한 내용은 JDK의 ScheduledExecutorService를 참조하십시오.

true

boolean

다음 형식 ?option=value&option=value&…​로 URI에 쿼리 옵션을 추가할 수 있습니다.

6.2.3. 구성 요소

ApnsComponentcom.notnoop.apns.ApnsService 로 구성해야 합니다. 서비스는 org.apache.camel.component.apns.factory.ApnsServiceFactory 를 사용하여 생성하고 구성할 수 있습니다. 예제는 아래를 참조하십시오. 또한 테스트 소스 코드에서 도 마찬가지입니다.

6.2.3.1. SSL 설정

보안 연결을 사용하려면 구성 요소를 구성하는 데 사용되는 org.apache.camel.jsse.jsse.SSLContextParameters 의 인스턴스를 org.apache.camel.component.apns.factory.ApnsServiceFactory 에 삽입해야 합니다. 예제는 테스트 리소스를 참조하십시오. SSL 예

6.3. 교환 데이터 형식

Camel이 비활성 장치에 해당하는 피드백 데이터를 가져오면 InactiveDevice 오브젝트 목록을 검색합니다. 검색된 목록의 각 InactiveDevice 오브젝트는 본문으로 설정된 다음 소비자 끝점에서 처리합니다.

6.4. 메시지 헤더

Camel Apns는 이러한 헤더를 사용합니다.

Expand
속성기본값설명

CamelApnsTokens

 

기본적으로 비어 있습니다.

CamelApnsMessageType

STRING, PAYLOAD, APNS_NOTIFICATION 

메시지 유형에 대해 PAYLOAD를 선택하는 경우, 메시지가 APNS 페이로드로 간주되고 그대로 전송됩니다. STRING을 선택하면 메시지가 APNS 페이로드로 변환됩니다. Camel 2.16 에서 APNS_NOTIFICATION은 메시지 본문을 com.notnoop.apns.ApnsNotification 유형으로 보내는 데 사용됩니다.

6.5. ApnsServiceFactory 빌더 콜백

ApnsServiceFactory 에는 기본 ApnsServiceBuilder 인스턴스를 구성(또는 대체)하는 데 사용할 수 있는 빈 콜백 메서드가 제공됩니다. 메서드의 서명은 다음과 같이 나타날 수 있습니다.

protected ApnsServiceBuilder configureServiceBuilder(ApnsServiceBuilder serviceBuilder);

다음과 같이 사용할 수 있습니다.

ApnsServiceFactory proxiedApnsServiceFactory = new ApnsServiceFactory(){
  
  @Override
  protected ApnsServiceBuilder configureServiceBuilder(ApnsServiceBuilder serviceBuilder) {
    return serviceBuilder.withSocksProxy("my.proxy.com", 6666);
  }

};

6.6. 샘플

6.6.1. Camel Xml 경로

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:camel="http://camel.apache.org/schema/spring"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
        http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">

    <!-- Replace by desired values -->
    <bean id="apnsServiceFactory" class="org.apache.camel.component.apns.factory.ApnsServiceFactory">

        <!-- Optional configuration of feedback host and port -->
        <!-- <property name="feedbackHost" value="localhost" /> -->
        <!-- <property name="feedbackPort" value="7843" /> -->

        <!-- Optional configuration of gateway host and port -->
        <!-- <property name="gatewayHost" value="localhost" /> -->
        <!-- <property name="gatewayPort" value="7654" /> -->

        <!-- Declaration of certificate used -->
                <!-- from Camel 2.11 onwards you can use prefix: classpath:, file: to refer to load the certificate from classpath or file. Default it classpath -->
        <property name="certificatePath" value="certificate.p12" />
        <property name="certificatePassword" value="MyCertPassword" />

        <!-- Optional connection strategy - By Default: No need to configure -->
        <!-- Possible options: NON_BLOCKING, QUEUE, POOL or Nothing -->
        <!-- <property name="connectionStrategy" value="POOL" /> -->
        <!-- Optional pool size -->
        <!-- <property name="poolSize" value="15" /> -->

        <!-- Optional connection strategy - By Default: No need to configure -->
        <!-- Possible options: EVERY_HALF_HOUR, EVERY_NOTIFICATION or Nothing (Corresponds to NEVER javapns option) -->
        <!-- <property name="reconnectionPolicy" value="EVERY_HALF_HOUR" /> -->
    </bean>

    <bean id="apnsService" factory-bean="apnsServiceFactory" factory-method="getApnsService" />

    <!-- Replace this declaration by wanted configuration -->
    <bean id="apns" class="org.apache.camel.component.apns.ApnsComponent">
        <property name="apnsService" ref="apnsService" />
    </bean>

    <camelContext id="camel-apns-test" xmlns="http://camel.apache.org/schema/spring">
            <route id="apns-test">
                    <from uri="apns:consumer?initialDelay=10&amp;delay=3600&amp;timeUnit=SECONDS" />
                    <to uri="log:org.apache.camel.component.apns?showAll=true&amp;multiline=true" />
                    <to uri="mock:result" />
            </route>
    </camelContext>

</beans>

6.6.2. Camel Java 경로

camel 컨텍스트 생성 및 프로그래밍 방식으로 apns 구성 요소 선언

    protected CamelContext createCamelContext() throws Exception {
        CamelContext camelContext = super.createCamelContext();

        ApnsServiceFactory apnsServiceFactory = new ApnsServiceFactory();
        apnsServiceFactory.setCertificatePath("classpath:/certificate.p12");
        apnsServiceFactory.setCertificatePassword("MyCertPassword");

        ApnsService apnsService = apnsServiceFactory.getApnsService(camelContext);

        ApnsComponent apnsComponent = new ApnsComponent(apnsService);
        camelContext.addComponent("apns", apnsComponent);

        return camelContext;
    }

[[APNS-ApnsProducer-iOStargetdevicedynamicallyconfiguredviaheader:"CamelApnsTokens"] 헤더를 통해 동적으로 구성된 ApnsProducer - iOS 대상 장치: "CamelApnsTokens""

    protected RouteBuilder createRouteBuilder() throws Exception {
        return new RouteBuilder() {
            public void configure() throws Exception {
                from("direct:test")
                    .setHeader(ApnsConstants.HEADER_TOKENS, constant(IOS_DEVICE_TOKEN))
                    .to("apns:notify");
                }
        }
    }

ApnsProducer - iOS 대상 장치는 uri을 통해 정적으로 구성

    protected RouteBuilder createRouteBuilder() throws Exception {
        return new RouteBuilder() {
            public void configure() throws Exception {
                from("direct:test").
                to("apns:notify?tokens=" + IOS_DEVICE_TOKEN);
            }
        };
    }

ApnsConsumer

from("apns:consumer?initialDelay=10&delay=3600&timeUnit=SECONDS")
    .to("log:com.apache.camel.component.apns?showAll=true&multiline=true")
    .to("mock:result");

6.7. 예를 들면 다음과 같습니다.

7장. ASN.1 파일 데이터 형식

Camel 버전 2.20에서 사용 가능

ASN.1 Data Format Data Format [Intoduction to ASN.1](https://www.itu.int/en/ITU-T/asn1/Pages/introduction.aspx는 Bouncy Castle의 bcprov-jdk15on 라이브러리 및 jASN-jdk15on 라이브러리 및 jASN.1의 Java 컴파일러를 기반으로 하는 Camel 프레임워크의 데이터 형식 구현입니다. 메시지는 unmarshalled(단순 Java POJO에 대한 버전)에서 일반 Java 오브젝트에 적용할 수 있습니다. Camel의 라우팅 엔진 및 데이터 변환의 도움으로 POJO를 사용하여 사용자 지정 포맷을 적용하고 다른 Camel 구성 요소를 호출하여 메시지를 업스트림 시스템으로 변환 및 전송할 수 있습니다.

7.1. ASN.1 데이터 형식 옵션

ASN.1 File dataformat은 아래 나열된 세 가지 옵션을 지원합니다.

Expand
이름기본값Java Type설명

usingIterator

false

부울

asn1 파일에 하나 이상의 항목이 있는 경우 이 옵션을 true로 설정하면 splitter EIP로 작업할 수 있으며 스트리밍 모드에서 반복기를 사용하여 데이터를 분할할 수 있습니다.

clazzName

 

문자열

unmarshalling할 때 사용할 클래스의 이름

contentTypeHeader

false

부울

데이터 형식이 데이터 형식에서 수행할 수 있는 경우 데이터 형식의 유형으로 Content-Type 헤더를 설정해야 하는지 여부입니다. 예를 들어 데이터 형식을 XML로 마샬링하거나, JSon으로 마샬링되는 데이터 형식에 대한 application/json 등이 있습니다.

7.2. unmarshal

해상 ASN.1 구조화된 메시지를 압축 해제하는 방법에는 세 가지가 있습니다. (일반적으로 바이너리 파일)

이 첫 번째 예제에서는 OutputStream에 대한marshal BER 파일 페이로드를 생략하고 mock 엔드포인트로 보냅니다.

from("direct:unmarshal").unmarshal(asn1).to("mock:unmarshal");

두 번째 예제에서는 Split EIP를 사용하여 바이트 배열에 대한marshal BER 파일 페이로드를 해제합니다. Split EIP를 적용하는 이유는 일반적으로 각 BER 파일 또는 (ASN.1 구조화된 파일)에 처리 할 여러 레코드가 포함되어 있으며 Split EIP는 실제로 ASN1Primitive의 인스턴스 (Bunastle의 ASN 사용)인 바이트 배열로 파일의 각 레코드를 가져오는 데 도움이 되기 때문입니다. 1 bcprov-jdk15on 라이브러리의 지원) Byte 배열은 (ASN1Primitive.fromByteArray)의 공용 정적 메서드의 도움으로 ASN1Primitive로 변환될 수 있습니다. Iter ator=true를 사용하여설정해야 합니다.

from("direct:unmarshal").unmarshal(asn1).split(body(Iterator.class)).streaming().to("mock:unmarshal");

마지막 예제에서는 Split EIP를 사용하는 기존 Java 객체에 대한marshal BER 파일 페이로드를 해제합니다. Split EIP를 적용하는 이유는 이미 이전 예제에서 언급되어 있습니다. 그 이유를 염두에 두십시오. 이 예제에서는 또한 클래스의 정규화된 이름 또는 데이터 형식을 통해 <YourObject>.class 참조를 설정해야 합니다. 여기서 주의해야 할 중요한 사항은 ASN.1 구조의 Java 개체 표현을 생성하는 유용한 도구인 jasn1 컴파일러에 의해 개체가 생성되어야 한다는 것입니다. jasn1 컴파일러의 참조 사용은 [JASN.1 Project Page](https://www.openmuc.org/asn1/)를 참조하고 maven의 exec 플러그인과 함께 컴파일러를 호출하는 방법도 참조하십시오. 예를 들어, 이 데이터 형식의 단위에서는 예제 ASN.1 구조(TestSMSBerCdr.asn1)가 src/test/resources/asn1_structure. jasn1 컴파일러에 추가되고 java 오브젝트의 표현이 호출되고 java 오브젝트의 표현은 ${basedir}/target/generated/src/src/test/java 에 생성됩니다.

from("direct:unmarshaldsl")
         .unmarshal()
         .asn1("org.apache.camel.dataformat.asn1.model.testsmscbercdr.SmsCdr")
         .split(body(Iterator.class)).streaming()
.to("mock:unmarshaldsl");

7.3. 종속 항목

camel 경로에서 ASN.1 데이터 형식을 사용하려면 이 데이터 형식을 구현하는 camel-asn1 에 종속성을 추가해야 합니다.

Maven을 사용하는 경우 pom.xml 에 다음을 추가할 수 있으며 최신 및 가장 큰 릴리스의 버전 번호를 대체합니다(최신 버전의 다운로드 페이지 참조).

<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-asn1</artifactId>
  <version>x.x.x</version>
  <!-- use the same version as your Camel core version -->
</dependency>

8장. AS2 구성 요소

중요

Karaf의 camel-as2 구성 요소는 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다.

이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다. Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 https://access.redhat.com/support/offerings/techpreview 에서 참조하십시오.

Camel 버전 2.22에서 사용 가능

AS2 구성 요소는 RFC4130 에 지정된 대로 HTTP 전송 프로토콜을 사용하여 EDI 메시지의 전송을 제공합니다.

참고

이 구성 요소는 현재 진행 중인 작업입니다. URI 옵션 및 경로 및 쿼리 매개 변수가 이 구성 요소의 향후 버전에서 변경될 수 있습니다.

Maven 사용자는 이 구성 요소를 위해 다음 종속성을 pom.xml에 추가해야 합니다.

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-as2</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>

8.1. URI 형식

as2://apiName/methodName

apiName은 다음 중 하나일 수 있습니다.

  • 클라이언트
  • server

8.2. AS2 옵션

AS2 구성 요소는 아래 나열된 두 가지 옵션을 지원합니다.

Expand
이름설명기본값유형

구성 (일반)

공유 구성을 사용하려면To use the shared configuration

 

AS2Configuration

resolveProperty Placeholders (advanced)

구성 요소가 시작 시 자체적으로 속성 자리 표시자를 확인해야 하는지 여부입니다. String 유형의 속성만 속성 자리 표시자를 사용할 수 있습니다.Only properties which are of String type can use property placeholders.

true

boolean

AS2 끝점은 URI 구문을 사용하여 구성됩니다.

as2:apiName

다음 경로 및 쿼리 매개변수를 사용합니다.

8.2.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

apiName

떤 종류의 작업을 수행해야 합니까?

 

AS2ApiName

8.2.2. 쿼리 매개변수(30 매개변수):

Expand
이름설명기본값유형

as2From (일반)

AS2 메시지의 AS2From 헤더 값입니다.

 

문자열

as2MessageStructure (일반)

AS2 Message의 구조입니다. PLAIN - 암호화 없음, 서명 없음, SIGNED - 암호화 없음, 서명, ENCRYPTED - 암호화, 서명 없음, 서명

 

AS2MessageStructure

as2To (일반)

AS2 메시지의 AS2To 헤더 값입니다.

 

문자열

as2Version (일반)

AS2 프로토콜의 버전입니다.

1.1

문자열

clientFqdn (일반)

클라이언트 정규화된 도메인 이름(FQDN)입니다. 끝점에서 보낸 메시지 ID에서 사용됩니다.

camel.apache.org

문자열

dispositionNotificationTo (common)

Disposition-Notification-To 헤더의 값입니다. 이 매개 변수에 값을 할당하면 AS2 메시지에 대한 message disposition notification(MDN)이 요청됩니다.

 

문자열

ediMessageTransferEncoding (일반)

EDI 메시지의 전송 인코딩입니다.

 

문자열

ediMessageType (일반)

EDI 메시지의 콘텐츠 유형입니다. application/edifact, application/edi-x12 중 하나, application/edi-consent

 

ContentType

encryptingAlgorithm (common)

EDI 메시지를 암호화하는 데 사용되는 알고리즘입니다.

 

AS2EncryptionAlgorithm

인증서 체인 암호화 (일반)

EDI 메시지를 암호화하는 데 사용되는 인증서 체인입니다.

 

certificate[]

privateKey 암호화 ( 일반)

EDI 메시지를 암호화하는 데 사용되는 키입니다.

 

PrivateKey

에서 (일반)

AS2 메시지의 From 헤더의 값입니다.

 

문자열

InBody (일반)

교환 In Body에서 전달할 매개 변수의 이름을 설정합니다.

 

문자열

methodName (common)

선택한 작업에 사용할 하위 작업 필요

 

문자열

requestUri (common)

EDI 메시지의 요청 URI입니다.

/

문자열

서버 (공용)

AS2 서버를 식별하는 서버 메시지 헤더에 포함된 값입니다.

Camel AS2 Server Endpoint

문자열

serverFqdn (common)

서버의 정규화된 도메인 이름(FQDN)입니다. 끝점에서 보낸 메시지 ID에서 사용됩니다.

camel.apache.org

문자열

serverPortNumber (일반)

서버 포트 번호입니다.

 

정수

signedReceiptMicAlgorithms (일반적으로)

MDN(Message dispostion notification)에서 반환된 MIC(메시지 무결성 검사)를 생성하도록 요청된 알고리즘 목록입니다.

 

string[]

signingAlgorithm (일반)

EDI 메시지에 서명하는 데 사용되는 알고리즘입니다.

 

AS2SignatureAlgorithm

signingCertificateChain (일반)

EDI 메시지에 서명하는 데 사용되는 인증서 체인입니다.

 

certificate[]

signingPrivateKey (common)

EDI 메시지에 서명하는 데 사용되는 키입니다.

 

PrivateKey

제목 (일반)

AS2 메시지의 주체 헤더 값입니다.

 

문자열

targetHostname (일반)

대상 호스트의 호스트 이름(IP 또는 DNS 이름)입니다.

 

문자열

targetPortNumber (일반)

대상 호스트의 포트 수입니다. -1은 스키마의 기본 포트를 나타냅니다.

 

정수

userAgent (일반)

AS2 사용자 에이전트를 식별하는 User-Agent 메시지 헤더에 포함된 값입니다.

Camel AS2 클라이언트 끝점

문자열

bridgeErrorHandler (consumer)

소비자를 Camel 라우팅 오류 처리기에 브리징할 수 있습니다. 이는 소비자가 들어오는 메시지를 선택하는 동안 예외가 발생한 것을 의미하며, 이제 메시지로 처리되어 라우팅 오류 처리기에 의해 처리됩니다. 기본적으로 소비자는 org.apache.camel.spi.ExceptionHandler를 사용하여 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

false

boolean

예외 처리기 (consumer)

소비자가 사용자 지정 ExceptionHandler를 사용하도록 하려면 다음을 수행합니다. bridgeErrorHandler 옵션이 활성화되어 있는지 확인한 후 이 옵션은 사용되지 않습니다. 기본적으로 소비자는 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

 

ExceptionHandler

exchangePattern (consumer)

소비자가 교환을 생성할 때 교환 패턴을 설정합니다.

 

ExchangePattern

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

8.3. Spring Boot Auto-Configuration

구성 요소는 아래에 나열된 28 가지 옵션을 지원합니다.

Expand
이름설명기본값유형

camel.component.as2.configuration.api-name

어떤 종류의 작업을 수행합니까?

 

AS2ApiName

camel.component.as2.configuration.as2-from

AS2 메시지의 AS2From 헤더 값입니다.

 

문자열

camel.component.as2.configuration.as2-message-structure

AS2 Message의 구조입니다. PLAIN - 암호화 없음, 서명 없음, SIGNED - 암호화 없음, 서명, ENCRYPTED - 암호화, 서명 없음, 서명

 

AS2MessageStructure

camel.component.as2.configuration.as2-to

AS2 메시지의 AS2To 헤더 값입니다.

 

문자열

camel.component.as2.configuration.as2-version

AS2 프로토콜의 버전입니다.

1.1

문자열

camel.component.as2.configuration.client-fqdn

클라이언트 정규화된 도메인 이름(FQDN)입니다. 끝점에서 보낸 메시지 ID에서 사용됩니다.

camel.apache.org

문자열

camel.component.as2.configuration.disposition-notification-to

Disposition-Notification-To 헤더의 값입니다. 이 매개 변수에 값을 할당하면 AS2 메시지에 대한 message disposition notification(MDN)이 요청됩니다.

 

문자열

camel.component.as2.configuration.edi-message-transfer-encoding

EDI 메시지의 전송 인코딩입니다.

 

문자열

camel.component.as2.configuration.edi-message-type

EDI 메시지의 콘텐츠 유형입니다. application/edifact, application/edi-x12 중 하나, application/edi-consent

 

ContentType

camel.component.as2.configuration.encrypting-algorithm

EDI 메시지를 암호화하는 데 사용되는 알고리즘입니다.

 

AS2EncryptionAlgorithm

camel.component.as2.configuration.encrypting-certificate-chain

EDI 메시지를 암호화하는 데 사용되는 인증서 체인입니다.

 

certificate[]

camel.component.as2.configuration.encrypting-private-key

EDI 메시지를 암호화하는 데 사용되는 키입니다.

 

PrivateKey

camel.component.as2.configuration.from

AS2 메시지의 From 헤더의 값입니다.

 

문자열

camel.component.as2.configuration.method-name

선택한 작업에 사용할 하위 작업

 

문자열

camel.component.as2.configuration.request-uri

EDI 메시지의 요청 URI입니다.

/

문자열

camel.component.as2.configuration.server

AS2 서버를 식별하는 서버 메시지 헤더에 포함된 값입니다.

Camel AS2 Server Endpoint

문자열

camel.component.as2.configuration.server-fqdn

서버의 정규화된 도메인 이름(FQDN)입니다. 끝점에서 보낸 메시지 ID에서 사용됩니다.

camel.apache.org

문자열

camel.component.as2.configuration.server-port-number

서버 포트 번호입니다.

 

정수

camel.component.as2.configuration.signed-receipt-mic-algorithms

MDN(Message dispostion notification)에서 반환된 MIC(메시지 무결성 검사)를 생성하도록 요청된 알고리즘 목록입니다.

 

string[]

camel.component.as2.configuration.signing-algorithm

EDI 메시지에 서명하는 데 사용되는 알고리즘입니다.

 

AS2SignatureAlgorithm

camel.component.as2.configuration.signing-certificate-chain

EDI 메시지에 서명하는 데 사용되는 인증서 체인입니다.

 

certificate[]

camel.component.as2.configuration.signing-private-key

EDI 메시지에 서명하는 데 사용되는 키입니다.

 

PrivateKey

camel.component.as2.configuration.subject

AS2 메시지의 주체 헤더 값입니다.

 

문자열

camel.component.as2.configuration.target-hostname

대상 호스트의 호스트 이름(IP 또는 DNS 이름)입니다.

 

문자열

camel.component.as2.configuration.target-port-number

대상 호스트의 포트 수입니다. -1은 스키마의 기본 포트를 나타냅니다.

 

정수

camel.component.as2.configuration.user-agent

AS2 사용자 에이전트를 식별하는 User-Agent 메시지 헤더에 포함된 값입니다.

Camel AS2 클라이언트 끝점

문자열

camel.component.as2.enabled

as2 구성 요소의 자동 구성을 활성화할지 여부입니다. 이는 기본적으로 활성화되어 있습니다.

 

부울

camel.component.as2.resolve-property-placeholders

구성 요소가 시작 시 자체적으로 속성 자리 표시자를 확인해야 하는지 여부입니다. String 유형의 속성만 속성 자리 표시자를 사용할 수 있습니다.Only properties which are of String type can use property placeholders.

true

부울

8.4. 클라이언트 끝점:

클라이언트 끝점은 엔드포인트 접두사 클라이언트 뒤에 메서드의 이름과 다음에 설명된 관련 옵션을 사용합니다. 엔드포인트 URI에는 접두사 클라이언트 가 있어야 합니다.

as2://client/method?[options]

필수가 아닌 엔드포인트 옵션은 [] 로 표시됩니다. 끝점에 대한 필수 옵션이 없는 경우 [] 옵션 세트 중 하나를 제공해야 합니다. 생산자 엔드포인트는 Camel Exchange In 메시지에 포함된 엔드포인트 옵션의 이름을 포함해야 하는 특수 옵션 inBody 를 사용할 수도 있습니다.

끝점 URI에서 또는 메시지 헤더에서 동적으로 끝점 옵션을 제공할 수 있습니다. 메시지 헤더 이름은 CamelAS2.<option> 형식이어야 합니다. inBody 옵션은 메시지 헤더를 덮어씁니다. 즉 inBody=option 의 endpoint 옵션은 CamelAS2.option 헤더를 재정의합니다.

끝점 URI 또는 메시지 헤더에 있는 옵션 defaultRequest에 대해 값이 제공되지 않으면 null 로 간주됩니다. null 값은 다른 옵션이 일치하는 엔드 포인트를 충족하지 않는 경우에만 사용됩니다.

AS2 API 오류가 발생하는 경우 끝점은 org.apache.http.HttpException 파생 예외를 사용하여 RuntimeCamelException을 throw합니다.

Expand
방법옵션결과 본문 유형

send

ediMessage, requestUri, subject, from, as2From, as2To, as2Message structureure, ediMessageContentType, ediMessageTransferEncoding, dispositionNotificationTo, signedReceiptMicAlgorithms

org.apache.http.protocol.HttpCoreContext

클라이언트의 URI 옵션

Expand
이름유형

ediMessage

문자열

requestUri

문자열

제목

문자열

from

문자열

as2From

문자열

as2To

문자열

as2MessageStructure

org.apache.camel.component.as2.api.AS2MessageStructure

ediMessageContentType

문자열

ediMessageTransferEncoding

문자열

dispositionNotificationTo

문자열

signedReceiptMicAlgorithms

string[]

8.5. 서버 끝점:

서버 끝점은 엔드포인트 접두사 서버 다음에 방법의 이름과 다음에 설명된 관련 옵션을 사용합니다. 엔드포인트 URI에는 접두사 서버 가 포함되어야 합니다.

as2://server/method?[options]

필수가 아닌 엔드포인트 옵션은 [] 로 표시됩니다. 끝점에 대한 필수 옵션이 없는 경우 [] 옵션 세트 중 하나를 제공해야 합니다. 생산자 엔드포인트는 Camel Exchange In 메시지에 포함된 엔드포인트 옵션의 이름을 포함해야 하는 특수 옵션 inBody 를 사용할 수도 있습니다.

끝점 URI에서 또는 메시지 헤더에서 동적으로 끝점 옵션을 제공할 수 있습니다. 메시지 헤더 이름은 CamelAS2.<option> 형식이어야 합니다. inBody 옵션은 메시지 헤더를 덮어씁니다. 즉 inBody=option 의 endpoint 옵션은 CamelAS2.option 헤더를 재정의합니다.

끝점 URI 또는 메시지 헤더에 있는 옵션 defaultRequest에 대해 값이 제공되지 않으면 null 로 간주됩니다. null 값은 다른 옵션이 일치하는 엔드 포인트를 충족하지 않는 경우에만 사용됩니다.

AS2 API 오류가 발생하는 경우 끝점은 org.apache.http.HttpException 파생 예외를 사용하여 RuntimeCamelException을 throw합니다.

Expand
방법옵션결과 본문 유형

listen

requestUriPattern

org.apache.http.protocol.HttpCoreContext

서버의 URI 옵션

Expand
이름유형

requestUriPattern

문자열

9장. 별표 구성 요소

Camel 버전 2.18로 사용 가능

별표 : 구성 요소를 사용하면 별표 -java를 사용하여 Asterisk PBX Server http://www.asterisk.org/ 를사용하여 쉽게 작업할 수 있습니다.

이 구성 요소는 Asterisk Manager Interface와 상호 작용하는 데 도움이 됩니다.

Maven 사용자는 이 구성 요소를 위해 다음 종속성을 pom.xml 에 추가해야 합니다.

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-asterisk</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>

9.1. URI 형식

asterisk:name[?options]

9.2. 옵션

Asterisk 구성 요소에는 옵션이 없습니다.

Asterisk 엔드포인트는 URI 구문을 사용하여 구성됩니다.

asterisk:name

다음 경로 및 쿼리 매개변수를 사용합니다.

9.2.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

name

필수 논리 이름

 

문자열

9.2.2. 쿼리 매개변수 (8 매개변수:

Expand
이름설명기본값유형

호스트 이름 (일반)

필수 별표 서버의 호스트 이름

 

문자열

암호 (공용)

필수 로그인 암호

 

문자열

사용자 이름 (공용)

필수 로그인 사용자 이름

 

문자열

bridgeErrorHandler (consumer)

소비자를 Camel 라우팅 오류 처리기에 브리징할 수 있습니다. 이는 소비자가 들어오는 메시지를 선택하는 동안 예외가 발생한 것을 의미하며, 이제 메시지로 처리되어 라우팅 오류 처리기에 의해 처리됩니다. 기본적으로 소비자는 org.apache.camel.spi.ExceptionHandler를 사용하여 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

false

boolean

예외 처리기 (consumer)

소비자가 사용자 지정 ExceptionHandler를 사용하도록 하려면 다음을 수행합니다. bridgeErrorHandler 옵션이 활성화되어 있는지 확인한 후 이 옵션이 사용되지 않습니다. 기본적으로 소비자는 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

 

ExceptionHandler

exchangePattern (consumer)

소비자가 교환을 생성할 때 교환 패턴을 설정합니다.

 

ExchangePattern

작업 (producer)

대기열 상태, sip 피어 또는 확장 상태 등 수행할 작업.

 

AsteriskAction

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

9.3. 동작

지원되는 동작은 다음과 같습니다.

  • QUEUE_STATUS, 대기열 상태
  • SIP_PEERS, List SIP Peers
  • EXTENSION_STATE, Check Extension Status

10장. Atmos 구성 요소

Camel 버전 2.15에서 사용 가능

Camel-AtmosApache Camel 구성 요소로, Atmos Client 를 사용하여 ViPR 개체 데이터 서비스로 작업할 수 있습니다.

from("atmos:foo/get?remotePath=/path").to("mock:test");

10.1. 옵션

Atmos 구성 요소는 아래 나열된 5 가지 옵션을 지원합니다.

Expand
이름설명기본값유형

fullTokenId (security)

Atmos 클라이언트에 전달할 토큰 ID

 

문자열

secretKey (security)

Atmos 클라이언트에 전달할 비밀 키

 

문자열

URI (advanced)

Atmos 클라이언트에서 연결할 서버의 URI입니다.

 

문자열

sslValidation (security)

Atmos 클라이언트가 SSL 검증을 수행해야 하는지 여부

false

boolean

resolveProperty Placeholders (advanced)

구성 요소가 시작 시 자체적으로 속성 자리 표시자를 확인해야 하는지 여부입니다. String 유형의 속성만 속성 자리 표시자를 사용할 수 있습니다.Only properties which are of String type can use property placeholders.

true

boolean

Atmos 엔드포인트는 URI 구문을 사용하여 구성됩니다.

atmos:name/operation

다음 경로 및 쿼리 매개변수를 사용합니다.

10.1.1. 경로 매개 변수(2 매개변수):

Expand
이름설명기본값유형

name

Atmos 이름

 

문자열

작업

수행해야 하는 작업

 

AtmosOperation

10.1.2. 쿼리 매개변수(12 매개변수):

Expand
이름설명기본값유형

enableSslValidation (일반)

Atmos SSL 검증

false

boolean

fullTokenId (일반)

Atmos 클라이언트 fullTokenId

 

문자열

localPath (common)

파일 배치를 위한 로컬 경로

 

문자열

newRemotePath (common)

파일을 이동할 때 Atmos의 새 경로

 

문자열

쿼리 (일반)

Atmos에 대한 검색 쿼리

 

문자열

remotePath (common)

Atmos에 파일을 배치할 위치

 

문자열

secretKey (common)

Atmos 공유 보안

 

문자열

URI (공용)

Atomos 서버 uri

 

문자열

bridgeErrorHandler (consumer)

소비자를 Camel 라우팅 오류 처리기에 브리징할 수 있습니다. 이는 소비자가 들어오는 메시지를 선택하는 동안 예외가 발생한 것을 의미하며, 이제 메시지로 처리되어 라우팅 오류 처리기에 의해 처리됩니다. 기본적으로 소비자는 org.apache.camel.spi.ExceptionHandler를 사용하여 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

false

boolean

예외 처리기 (consumer)

소비자가 사용자 지정 ExceptionHandler를 사용하도록 하려면 다음을 수행합니다. bridgeErrorHandler 옵션이 활성화되어 있는지 확인한 후 이 옵션이 사용되지 않습니다. 기본적으로 소비자는 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

 

ExceptionHandler

exchangePattern (consumer)

소비자가 교환을 생성할 때 교환 패턴을 설정합니다.

 

ExchangePattern

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

10.2. 종속 항목

camel 경로에서 Atmos를 사용하려면 이 데이터 형식을 구현하는 camel-atmos 에 종속성을 추가해야 합니다.

maven을 사용하는 경우 pom.xml에 다음을 추가하면 최신 및 가장 큰 릴리스의 버전 번호를 대체합니다(최신 버전의 다운로드 페이지 참조).

<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-atmos</artifactId>
  <version>x.x.x</version>
  <!-- use the same version as your Camel core version -->
</dependency>

10.3. 통합

atmos 통합을 볼 때 하나의 유형의 소비자, GetConsumer가 있으며 이는 ScheduledPollConsumer 유형입니다.

  • Get

반면, 4 가지 유형의 생산자가 있습니다.

  • Get
  • Del
  • move
  • put

10.4. 예제

다음 예제는 테스트에서 가져옵니다.

from("atmos:foo/get?remotePath=/path").to("mock:test");

다음은 소비자 예입니다.Here is a consumer example. remotePath 는 데이터를 읽고 제작자 Underneath와 관련하여 camel exchange를 읽을 수있는 경로를 나타냅니다. 이 구성 요소는 이 구성 요소 및 기타 모든 작업에 대해 atmos 클라이언트 API를 사용합니다.

from("direct:start")
.to("atmos://get?remotePath=/dummy/dummy.txt")
.to("mock:result");

이 샘플은 Producer 샘플입니다. remotePath 는 ViPR 오브젝트 데이터 서비스에서 작업이 발생하는 경로를 나타냅니다. 생산자에서 작업(Get,Del,Move,Put)은 ViPR 오브젝트 데이터 서비스에서 실행되며 결과는 camel exchange 헤더에 설정됩니다.

작업에 대해 다음 헤더가 camel exhange에 설정되어 있습니다.

DOWNLOADED_FILE, DOWNLOADED_FILES, UPLOADED_FILE, UPLOADED_FILES, FOUND_FILES, DELETED_PATH, MOVED_PATH;

10.5. 예를 들면 다음과 같습니다.

  • Camel 구성
  • 구성 요소
  • 끝점
  • 시작하기

11장. 대기 웹 소켓 구성 요소

Camel 버전 2.14로 사용 가능

대기 시간: 구성 요소는 Websocket을 통해 외부 클라이언트와 통신하는 서블릿에 대해 Websocket 기반 엔드포인트를 제공합니다(외부 클라이언트의 웹 소켓 연결을 수락하는 서블릿).
구성 요소는 SERVLET 구성 요소를 사용하며 Atmosphere 라이브러리를 사용하여 다양한 서블릿 컨테이너(예: Jetty, Tomcat, …​에서 Websocket 전송)를 지원합니다.

포함된 Jetty 서버를 시작하는 Websocket 구성 요소와 달리 이 구성 요소는 컨테이너의 서블릿 공급자를 사용합니다.

Maven 사용자는 이 구성 요소를 위해 다음 종속성을 pom.xml 에 추가해야 합니다.

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-atmosphere-websocket</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>

11.1. 대기 시간-웹 소켓 옵션

Atmosphere Websocket 구성 요소는 아래 나열된 8 가지 옵션을 지원합니다.

Expand
이름설명기본값유형

서블릿 이름 (공용)

사용할 서블릿의 기본 이름입니다. 기본 이름은 CamelServlet입니다.

 

문자열

httpRegistry (일반)

사용자 지정 org.apache.camel.component.servlet.HttpRegistry를 사용합니다.

 

HttpRegistry

attachmentMultipart Binding (일반)

Camel Exchange의 첨부 파일로 multipart/form-data를 자동 바인딩할지 여부입니다. attachment attachmentMultipartBinding=true 및 disableStreamCache=false 옵션이 함께 작동할 수 없습니다. AttachmentMultipartBinding을 사용하려면 disableStreamCache를 제거합니다. Servlet을 사용할 때 이를 활성화하려면 서블릿별 구성이 필요할 수 있으므로 기본적으로 이 기능이 꺼집니다.

false

boolean

httpBinding (advanced)

사용자 지정 HttpBinding을 사용하여 Camel 메시지와 HttpClient 간의 매핑을 제어합니다.

 

HttpBinding

httpConfiguration (advanced)

공유 HttpConfiguration을 기본 구성으로 사용하려면 다음을 수행합니다.

 

HttpConfiguration

JavaSerialized Object (advanced) 허용

요청이 context-type=application/x-java-serialized-object를 사용할 때 java serialization을 허용할지 여부입니다. 이 설정은 기본적으로 꺼져 있습니다. 이를 활성화하면 Java가 요청에서 Java로 들어오는 데이터를 역직렬화하고 잠재적인 보안 위험이 될 수 있다는 점에 유의하십시오.

false

boolean

headerFilterStrategy (filter)

사용자 지정 org.apache.camel.spi.HeaderFilterStrategy를 사용하여 Camel 메시지로 헤더를 필터링하려면 다음을 수행합니다.

 

HeaderFilterStrategy

resolveProperty Placeholders (advanced)

구성 요소가 시작 시 자체적으로 속성 자리 표시자를 확인해야 하는지 여부입니다. String 유형의 속성만 속성 자리 표시자를 사용할 수 있습니다.Only properties which are of String type can use property placeholders.

true

boolean

Atmosphere Websocket 끝점은 URI 구문을 사용하여 구성됩니다.

atmosphere-websocket:servicePath

다음 경로 및 쿼리 매개변수를 사용합니다.

11.1.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

servicePath

필수 websocket 엔드 포인트 이름

 

문자열

11.1.2. 쿼리 매개변수(37 매개변수):

Expand
이름설명기본값유형

청크됨 (공용)

이 옵션이 false이면 Servlet은 HTTP 스트리밍을 비활성화하고 응답에 Content-length 헤더를 설정합니다.

true

boolean

disableStreamCache (common)

Servlet의 원시 입력 스트림이 캐시되었거나 그렇지 않은지 여부를 결정합니다. (Camel은 스트림을 메모리/오버 흐름에서 파일, 스트림 캐싱) 캐시로 스트림을 읽습니다. 기본적으로 Camel은 Servlet 입력 스트림을 캐시하여 Camel이 스트림에서 모든 데이터를 검색할 수 있도록 여러 번 읽을 수 있도록 지원합니다. 그러나 예를 들어 파일 또는 기타 영구 저장소로 직접 스트리밍하는 것과 같은 원시 스트림에 액세스해야 할 때 이 옵션을 true로 설정할 수 있습니다. DefaultHttpBinding은 요청 입력 스트림을 스트림 캐시에 복사하고 스트림을 여러 번 읽는 것을 지원하기 위해 이 옵션이 false인 경우 메시지 본문에 배치합니다. Servlet을 사용하여 끝점을 프록시하는 경우 메시지 페이로드를 여러 번 읽을 필요가 없는 경우 이 옵션을 사용하여 성능을 향상시킬 수 있습니다. http/http4 생산자는 기본적으로 응답 본문 스트림을 캐시합니다. 이 옵션을 true로 설정하면 생산자가 응답 본문 스트림을 캐시하지 않지만 응답 스트림을 메시지 본문으로 사용합니다.

false

boolean

headerFilterStrategy (common)

사용자 지정 HeaderFilterStrategy를 사용하여 Camel 메시지와의 헤더를 필터링합니다.

 

HeaderFilterStrategy

sendToAll (일반)

모든 (브로드캐스트)로 보내거나 단일 수신자에게 보낼지 여부입니다.

false

boolean

transferException (일반)

활성화된 경우 소비자 측에서 Exchange 실패 처리 및 원인 Exception이 다시 직렬화 된 응답에서 응답에서 애플리케이션/x-java-serialized-object 콘텐츠 유형으로 다시 전송되었습니다. 생산자 측에서 예외는 HttpOperationFailedException 대신 is로 deserialize되고 throw됩니다. 원인된 예외는 직렬화해야 합니다. 이 설정은 기본적으로 꺼져 있습니다. 이를 활성화하면 Java가 요청에서 Java로 들어오는 데이터를 역직렬화하고 잠재적인 보안 위험이 될 수 있다는 점에 유의하십시오.

false

boolean

UseStreaming (common)

스트리밍이 여러 개의 텍스트 조각으로 데이터를 보낼 수 있도록 합니다.

false

boolean

httpBinding (일반)

사용자 지정 HttpBinding을 사용하여 Camel 메시지와 HttpClient 간의 매핑을 제어합니다.

 

HttpBinding

async (consumer)

비동기 모드에서 작동하도록 소비자 구성

false

boolean

bridgeErrorHandler (consumer)

소비자를 Camel 라우팅 오류 처리기에 브리징할 수 있습니다. 이는 소비자가 들어오는 메시지를 선택하는 동안 예외가 발생한 것을 의미하며, 이제 메시지로 처리되어 라우팅 오류 처리기에 의해 처리됩니다. 기본적으로 소비자는 org.apache.camel.spi.ExceptionHandler를 사용하여 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

false

boolean

httpMethodRestrict (consumer)

HttpMethod가 GET/POST/PUT 등과 같은 경우에만 사용할 수 있도록 하는 데 사용됩니다. 여러 메서드를 쉼표로 구분하여 지정할 수 있습니다.

 

문자열

matchOnUriPrefix (consumer)

정확한 일치 항목이 없는 경우 소비자가 URI 접두사와 일치하여 대상 소비자를 찾아야 하는지 여부입니다.

false

boolean

responseBufferSize (consumer)

javax.servlet.ServletResponse에서 사용자 정의 버퍼 크기를 사용하려면 다음을 수행합니다.

 

정수

서블릿 이름 (consumer)

사용할 서블릿의 이름입니다.

CamelServlet

문자열

attachmentMultipartBinding (consumer)

Camel Exchange의 첨부 파일로 multipart/form-data를 자동 바인딩할지 여부입니다. attachment attachmentMultipartBinding=true 및 disableStreamCache=false 옵션이 함께 작동할 수 없습니다. AttachmentMultipartBinding을 사용하려면 disableStreamCache를 제거합니다. Servlet을 사용할 때 이를 활성화하려면 서블릿별 구성이 필요할 수 있으므로 기본적으로 이 기능이 꺼집니다.

false

boolean

eagerCheckContentAvailable (consumer)

content-length 헤더가 0인지 아니면 존재하지 않는 경우 HTTP 요청에 콘텐츠가 있는지 확인할 수 있습니다. HTTP 클라이언트가 스트리밍된 데이터를 전송하지 않는 경우 이 기능을 설정할 수 있습니다.

false

boolean

예외 처리기 (consumer)

소비자가 사용자 지정 ExceptionHandler를 사용하도록 하려면 다음을 수행합니다. bridgeErrorHandler 옵션이 활성화되어 있는지 확인한 후 이 옵션이 사용되지 않습니다. 기본적으로 소비자는 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

 

ExceptionHandler

exchangePattern (consumer)

소비자가 교환을 생성할 때 교환 패턴을 설정합니다.

 

ExchangePattern

optionsEnabled (consumer)

Servlet 소비자에 대해 HTTP 옵션 사용 여부를 지정합니다.Specifies whether to enable HTTP OPTIONS for this Servlet consumer. 기본적으로 옵션 설정은 해제되어 있습니다.By default, OPTIONS is turned off.

false

boolean

traceEnabled (consumer)

이 서블릿 소비자에 대해 HTTP TRACE를 활성화할지 여부를 지정합니다.Specifies whether to enable HTTP TRACE for this Servlet consumer. 기본적으로 TRACE가 해제됩니다.By default, TRACE is turned off.

false

boolean

bridgeEndpoint (producer)

옵션이 true인 경우 HttpProducer는 Exchange.HTTP_URI 헤더를 무시하고 요청 끝점의 URI를 사용합니다. 또한 causesExceptionOnFailure 옵션을 false로 설정하여 HttpProducer가 모든 오류 응답을 다시 보낼 수 있습니다.

false

boolean

connectionClose (producer)

Connection Close 헤더를 HTTP 요청에 추가해야 하는지 여부를 지정합니다. 기본적으로 연결 Close는 false입니다.

false

boolean

copyHeaders (producer)

이 옵션이 true이면 IN 교환 헤더가 복사 전략에 따라 OUT 교환 헤더에 복사됩니다. 이를 false로 설정하면 HTTP 응답의 헤더만 포함할 수 있습니다( IN 헤더를 전파하지 않음).

true

boolean

httpMethod (producer)

사용할 HTTP 메서드를 구성합니다. HttpMethod 헤더가 설정된 경우 이 옵션을 재정의할 수 없습니다.

 

HttpMethods

ignoreResponseBody (producer)

이 옵션이 true이면 http 생산자가 응답 본문을 읽지 않고 입력 스트림을 캐시합니다.

false

boolean

preserveHostHeader (producer)

옵션이 true인 경우 HttpProducer는 현재 교환 호스트 헤더에 포함된 값으로 Host 헤더를 설정합니다. 다운스트림 서버에서 수신한 Host 헤더가 업스트림 클라이언트에서 호출한 URL을 반영하려는 역방향 프록시 애플리케이션에서 유용한 경우 호스트 헤더를 사용하여 프록시된 서비스에 대한 정확한 URL을 생성할 수 있습니다.

false

boolean

throwExceptionOnFailure (producer)

원격 서버에서 응답이 실패한 경우 HttpOperationFailedException throw를 비활성화하는 옵션입니다. 이를 통해 HTTP 상태 코드와 관계없이 모든 응답을 얻을 수 있습니다.

true

boolean

cookieHandler (producer)

HTTP 세션을 유지 관리하도록 쿠키 처리기 구성

 

CookieHandler

okStatusCodeRange (producer)

상태 코드는 성공 응답으로 간주됩니다. 값이 포함됩니다. 여러 범위를 쉼표로 구분하여 정의할 수 있습니다(예: 200-204,209,301-304). 각 범위는 단일 숫자 또는 대시가 포함된 from-to여야 합니다.

200-299

문자열

urlRewrite (producer)

더 이상 사용되지 않는 사용자 지정 org.apache.camel.component.http.UrlRewrite를 통해 URL을 브리지/proxy 엔드포인트에서 다시 작성할 수 있습니다. 자세한 내용은 http://camel.apache.org/urlrewrite.html에서 참조하십시오.

 

UrlRewrite

mapHttpMessageBody (advanced)

이 옵션이 true이면 교환의 IN 교환 본문이 HTTP 본문에 매핑됩니다. 이를 false로 설정하면 HTTP 매핑이 발생하지 않습니다.

true

boolean

mapHttpMessageFormUrl EncodedBody (advanced)

이 옵션이 true이면 교환의 양식 코딩된 본문이 HTTP에 매핑됩니다.If this option is true, IN exchange Form Encoded body of the exchange will be mapped to HTTP. 이를 false로 설정하면 HTTP 양식 Encoded 본문 매핑이 발생하지 않습니다.

true

boolean

mapHttpMessageHeaders (advanced)

이 옵션이 true이면 교환의 IN 교환 헤더가 HTTP 헤더에 매핑됩니다. 이를 false로 설정하면 HTTP 헤더 매핑이 발생하지 않습니다.

true

boolean

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

proxyAuthScheme (proxy)

사용할 프록시 인증 스키마

 

문자열

proxyHost (proxy)

사용할 프록시 호스트 이름

 

문자열

proxyPort (proxy)

사용할 프록시 포트

 

int

authHost (security)

NTML에서 사용할 인증 호스트

 

문자열

11.2. URI 형식

atmosphere-websocket:///relative path[?options]

11.3. Websocket을 통해 데이터 읽기 및 쓰기

atmopshere-websocket 끝점은 끝점이 생산자 또는 소비자로 구성되어 있는지 여부에 따라 소켓에 데이터를 쓰거나 소켓에서 읽을 수 있습니다.

11.4. 데이터 읽기 또는 쓰기를 위한 URI 구성

아래 경로에서 Camel은 지정된 websocket 연결에서 읽습니다.

from("atmosphere-websocket:///servicepath")
        .to("direct:next");

다음과 같은 Spring 샘플이 있습니다.

<camelContext xmlns="http://camel.apache.org/schema/spring">
  <route>
    <from uri="atmosphere-websocket:///servicepath"/>
    <to uri="direct:next"/>
  </route>
</camelContext>

아래 경로에서 Camel은 지정된 websocket 연결에서 읽습니다.

from("direct:next")
        .to("atmosphere-websocket:///servicepath");

다음과 같은 Spring 샘플이 있습니다.

<camelContext xmlns="http://camel.apache.org/schema/spring">
  <route>
    <from uri="direct:next"/>
    <to uri="atmosphere-websocket:///servicepath"/>
  </route>
</camelContext>

 

11.5. 예를 들면 다음과 같습니다.

12장. atom 구성 요소

Camel 버전 1.2로 사용 가능

atom: 구성 요소는 Atom 피드를 폴링하는 데 사용됩니다.

Camel은 기본적으로 60초마다 피드를 폴링합니다.
참고: 현재 구성 요소는 폴링(시간) 피드만 지원합니다.

Maven 사용자는 이 구성 요소를 위해 다음 종속성을 pom.xml 에 추가해야 합니다.

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-atom</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>

12.1. URI 형식

atom://atomUri[?options]

여기서 atomUri 는 폴링할 Atom 피드에 대한 URI입니다.

12.2. 옵션

Atom 구성 요소에는 옵션이 없습니다.

Atom 끝점은 URI 구문을 사용하여 구성됩니다.

atom:feedUri

다음 경로 및 쿼리 매개변수를 사용합니다.

12.2.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

feedUri

폴링할 피드에 대한 URI입니다.

 

문자열

12.2.2. 쿼리 매개변수(27 매개변수):

Expand
이름설명기본값유형

bridgeErrorHandler (consumer)

소비자를 Camel 라우팅 오류 처리기에 브리징할 수 있습니다. 이는 소비자가 들어오는 메시지를 선택하는 동안 예외가 발생한 것을 의미하며, 이제 메시지로 처리되어 라우팅 오류 처리기에 의해 처리됩니다. 기본적으로 소비자는 org.apache.camel.spi.ExceptionHandler를 사용하여 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

false

boolean

feedHeader (consumer)

feed 오브젝트를 헤더로 추가할지 여부를 설정합니다.

true

boolean

필터 (consumer)

필터링을 사용할지 아니면 항목 중 사용할지 여부를 설정합니다.Sets whether to use filtering or not of the entries.

true

boolean

lastUpdate (consumer)

원자 피드의 항목을 필터링하는 데 사용할 타임스탬프를 설정합니다. 이 옵션은 splitEntries와 함께 사용할 수 있습니다.

 

날짜

암호 (consumer)

HTTP 피드에서 폴링할 때 기본 인증에 사용할 암호를 설정합니다.

 

문자열

sendEmptyMessageWhenIdle (consumer)

폴링 소비자가 파일을 폴링하지 않은 경우 이 옵션을 활성화하여 빈 메시지( 본문 없음)를 대신 보낼 수 있습니다.

false

boolean

sortEntries (consumer)

게시된 날짜별로 항목을 정렬할지 여부를 설정합니다. splitEntries = true일 때만 작동합니다.

false

boolean

splitEntries (consumer)

항목을 개별적으로 보내거나 전체 피드를 단일 메시지로 보내야 하는지 여부를 설정합니다.

true

boolean

throttleEntries (consumer)

단일 피드 폴링에서 식별된 모든 항목을 즉시 전달해야 하는지 여부를 설정합니다. true인 경우 consumer.delay마다 하나의 항목만 처리됩니다. splitEntries = true인 경우에만 적용됩니다.

true

boolean

사용자 이름 (consumer)

HTTP 피드에서 폴링할 때 기본 인증에 사용할 사용자 이름을 설정합니다.

 

문자열

예외 처리기 (consumer)

소비자가 사용자 지정 ExceptionHandler를 사용하도록 하려면 다음을 수행합니다. bridgeErrorHandler 옵션이 활성화되어 있는지 확인한 후 이 옵션이 사용되지 않습니다. 기본적으로 소비자는 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

 

ExceptionHandler

exchangePattern (consumer)

소비자가 교환을 생성할 때 교환 패턴을 설정합니다.

 

ExchangePattern

pollStrategy (consumer)

플러그형 org.apache.camel.PollingConsumerPollingStrategy를 사용하면 Camel에서 Exchange를 생성하고 라우팅하기 전에 폴링 작업 중에 일반적으로 발생한 오류 처리를 제어하는 사용자 정의 구현을 제공할 수 있습니다.

 

PollingConsumerPoll Strategy

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

backoffErrorThreshold (scheduler)

백오프Multipler를 시작하기 전에 발생해야 하는 후속 오류 폴링(일부 오류 발생) 수입니다.

 

int

backoffIdleThreshold (scheduler)

백오프Multipler를 시작하기 전에 발생해야 하는 후속 유휴 폴링 수입니다.

 

int

backoffMultiplier (scheduler)

예약된 폴링 소비자 백오프가 연속된 여러 개의 유휴/errors가 있는 경우 해당 행에 사용할 수 있습니다. multiplier는 다음 실제 시도가 다시 발생하기 전에 건너뛸 폴링 수입니다. 이 옵션을 사용하는 경우 backoffIdleThreshold 및/또는 backoffErrorThreshold도 구성해야 합니다.

 

int

지연 (scheduler)

다음 폴링보다 밀리초입니다. 60초(60초), 5m30초(5분 및 30초) 및 1h(1시간)와 같은 단위를 사용하여 시간 값을 지정할 수도 있습니다.

500

long

greedy (scheduler)

greedy가 활성화된 경우 ScheduledPollConsumer는 이전 실행이 1개 이상의 메시지를 폴링하면 즉시 다시 실행됩니다.

false

boolean

initialDelay (scheduler)

첫 번째 폴링이 시작되기 전까지의 밀리초입니다. 60초(60초), 5m30초(5분 및 30초) 및 1h(1시간)와 같은 단위를 사용하여 시간 값을 지정할 수도 있습니다.

1000

long

runLoggingLevel (scheduler)

소비자는 폴링할 때 시작/완료 로그 행을 기록합니다. 이 옵션을 사용하면 로깅 수준을 구성할 수 있습니다.

TRACE

LoggingLevel

scheduledExecutorService (scheduler)

소비자에 사용할 사용자 지정/공유 스레드 풀을 구성할 수 있습니다. 기본적으로 각 소비자는 자체 스레드 스레드 풀이 있습니다.

 

ScheduledExecutor Service

스케줄러 (scheduler)

camel-spring 또는 camel-quartz2 구성 요소에서 cron 스케줄러를 사용하려면

none

ScheduledPollConsumer Scheduler

스케줄러 속성 (scheduler)

사용자 지정 스케줄러 또는 Quartz2, Spring 기반 스케줄러를 사용할 때 추가 속성을 구성하려면 다음을 수행합니다.

 

map

StartScheduler (scheduler)

스케줄러가 자동으로 시작되어야 하는지 여부입니다.

true

boolean

timeUnit (scheduler)

initialDelay 및 지연 옵션의 시간 단위입니다.

밀리초

TimeUnit

UseFixedDelay (scheduler)

고정 지연 또는 고정 속도가 사용되는 경우 제어합니다. 자세한 내용은 JDK의 ScheduledExecutorService를 참조하십시오.

true

boolean

다음 형식 ?option=value&option=value&…​로 URI에 쿼리 옵션을 추가할 수 있습니다.

12.3. 교환 데이터 형식

Camel은 반환된 Exchange 의 In body를 항목으로 설정합니다. splitEntries 플래그에 따라 Camel은 하나의 Entry 또는 List<Entry>를 반환합니다.

Expand
옵션동작

splitEntries

true

현재 처리 중인 피드의 단일 항목만 exchange.in.body(Entry)로 설정됩니다.

splitEntries

false

피드의 전체 항목 목록 set: exchange.in.body(List<Entry>)

Camel은 In 헤더에 feed 오브젝트 설정할 수 있습니다(이를 비활성화하려면 feedHeader 옵션 참조):

12.4. 메시지 헤더

Camel atom은 이러한 헤더를 사용합니다.

Expand
header설명

CamelAtomFeed

org.apache.abdera.model.Feed 오브젝트를 사용하는 경우 이 헤더로 설정됩니다.

12.5. 샘플

이 샘플에서는 James Strachan의 블로그를 폴링합니다.

from("atom://http://macstrac.blogspot.com/feeds/posts/default").to("seda:feeds");

이 샘플에서는 SEDA 큐로 우리가 원하는 좋은 블로그만 필터링하려고 합니다. 샘플은 또한 Camel 독립 실행형 설정, 컨테이너 내에서 실행되지 않거나 Spring을 사용하는 방법을 보여줍니다.

12.6. 예를 들면 다음과 같습니다.

  • Camel 구성
  • 구성 요소
  • 끝점
  • 시작하기
  • RSS

13장. Atomix Map 구성 요소

Camel 버전 2.20에서 사용 가능

camel atomix-map 구성 요소를 사용하면 Atomix의 분산 맵 컬렉션을 사용할 수 있습니다.

Maven 사용자는 이 구성 요소를 위해 다음 종속성을 pom.xml에 추가해야 합니다.

    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-atomix</artifactId>
        <version>${camel-version}</version>
    </dependency>

13.1. URI 형식

    atomix-map:mapName

13.2. 옵션

Atomix Map 구성 요소는 아래에 나열된 5 가지 옵션을 지원합니다.

Expand
이름설명기본값유형

구성 (일반)

공유 구성 요소 구성

 

AtomixMapConfiguration

Atomix (common)

공유 AtomixClient 인스턴스

 

AtomixClient

노드 (공용)

AtomixClient가 연결해야 하는 노드

 

list

configurationUri (common)

AtomixClient 설정 경로

 

문자열

resolveProperty Placeholders (advanced)

구성 요소가 시작 시 자체적으로 속성 자리 표시자를 확인해야 하는지 여부입니다. String 유형의 속성만 속성 자리 표시자를 사용할 수 있습니다.Only properties which are of String type can use property placeholders.

true

boolean

Atomix Map 끝점은 URI 구문을 사용하여 구성됩니다.

atomix-map:resourceName

다음 경로 및 쿼리 매개변수를 사용합니다.

13.2.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

resourceName

필수 리소스 이름

 

문자열

13.2.2. 쿼리 매개변수(18 매개변수):

Expand
이름설명기본값유형

Atomix (common)

사용할 Atomix 인스턴스

 

Atomix

configurationUri (common)

Atomix 구성 uri입니다.

 

문자열

defaultAction (common)

기본 동작입니다.

PUT

동작

(일반)

헤더에 설정되지 않거나 특정 키에 대한 이벤트를 수신 대기하는 경우 사용할 키입니다.

 

개체

노드 (공용)

클러스터를 구성하는 노드의 주소입니다.

 

문자열

resultHeader (일반)

wil이 결과를 전달하는 헤더입니다.

 

문자열

전송 (일반)

Atomix 전송을 설정합니다.

io.atomix.catalyst.transport.netty.NettyTransport

전송

TTL ( 일반)

리소스 ttl.

 

long

bridgeErrorHandler (consumer)

소비자를 Camel 라우팅 오류 처리기에 브리징할 수 있습니다. 이는 소비자가 들어오는 메시지를 선택하는 동안 예외가 발생한 것을 의미하며, 이제 메시지로 처리되어 라우팅 오류 처리기에 의해 처리됩니다. 기본적으로 소비자는 org.apache.camel.spi.ExceptionHandler를 사용하여 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

false

boolean

예외 처리기 (consumer)

소비자가 사용자 지정 ExceptionHandler를 사용하도록 하려면 다음을 수행합니다. bridgeErrorHandler 옵션이 활성화되어 있는지 확인한 후 이 옵션이 사용되지 않습니다. 기본적으로 소비자는 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

 

ExceptionHandler

exchangePattern (consumer)

소비자가 교환을 생성할 때 교환 패턴을 설정합니다.

 

ExchangePattern

defaultResourceConfig (고급)

클러스터의 기본 리소스 구성입니다.

 

속성

defaultResourceOptions (고급)

로컬 기본 리소스 옵션입니다.

 

속성

임시 (advanced)

로컬 멤버가 그룹을 PersistentMember로 조인해야 하는지 여부를 설정합니다. ephemeral로 설정하면 로컬 멤버가 자동 생성된 ID를 수신하므로 로컬 멤버는 무시됩니다.

false

boolean

ReadConsistency (advanced)

읽기 일관성 수준입니다.

 

ReadConsistency

resourceConfigs (고급)

클러스터 전체 리소스 구성.

 

map

resourceOptions (고급)

로컬 리소스 구성

 

map

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

13.3. headers

Expand
이름유형설명

CamelAtomixResourceAction

AtomixMap.Action

  • PUT
  • PUT_IF_ABSENT
  • GET
  • CLEAR
  • SIZE
  • CONTAINS_KEY
  • CONTAINS_VALUE
  • IS_EMPTY
  • ENTRY_SET
  • REMOVE
  • REPLACE

수행할 작업

CamelAtomixResourceKey

개체

-

작업할 키

CamelAtomixResourceValue

개체

-

값이 없는 경우 In Body를 사용합니다.

CamelAtomixResourceOldValue

개체

-

이전 값

CamelAtomixResourceTTL

문자열 / long

-

항목 TTL

CamelAtomixResourceReadConsistency

ReadConsistency

  • ATOMIC
  • ATOMIC_LEASE
  • 순차
  • LOCAL

읽기 일관성 수준

13.4. Atomix 클러스터에 연결하도록 구성 요소 구성

참여할 Atomix 클러스터의 노드는 몇 가지 예와 같이 끝점 또는 구성 요소 수준 (권장)에서 se가 될 수 있습니다.

  • endpoint:

    <beans xmlns="...">
        <camelContext xmlns="http://camel.apache.org/schema/spring">
            <from uri="direct:start"/>
                <to uri="atomix-map:myMap?nodes=node-1.atomix.cluster:8700,node-2.atomix.cluster:8700"/>
            </route>
        </camelContext>
    </beans>
  • 구성 요소:

    <beans xmlns="...">
        <bean id="atomix-map" class="org.apache.camel.component.atomix.client.map.AtomixMapComponent">
            <property name="nodes" value="nodes=node-1.atomix.cluster:8700,node-2.atomix.cluster:8700"/>
        </bean>
    
        <camelContext xmlns="http://camel.apache.org/schema/spring">
            <from uri="direct:start"/>
                <to uri="atomix-map:myMap"/>
            </route>
        </camelContext>
    </beans>

13.5. 사용 예:

  • PUT 1초의 TTL이 있는 요소:

    FluentProducerTemplate.on(context)
        .withHeader(AtomixClientConstants.RESOURCE_ACTION, AtomixMap.Action.PUT)
        .withHeader(AtomixClientConstants.RESOURCE_KEY, key)
        .withHeader(AtomixClientConstants.RESOURCE_TTL, "1s")
        .withBody(val)
        .to("direct:start")
        .send();

14장. Atomix Messaging 구성 요소

Camel 버전 2.20에서 사용 가능

camel atomix-messaging 구성 요소를 사용하면 Atomix의 그룹 메시징을 사용할 수 있습니다.

Maven 사용자는 이 구성 요소를 위해 다음 종속성을 pom.xml에 추가해야 합니다.

    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-atomix</artifactId>
        <version>${camel-version}</version>
    </dependency>

14.1. URI 형식

    atomix-messaging:group

Atomix Messaging 구성 요소는 아래에 나열된 5 가지 옵션을 지원합니다.

Expand
이름설명기본값유형

구성 (일반)

공유 구성 요소 구성

 

AtomixMessaging 구성

Atomix (common)

공유 AtomixClient 인스턴스

 

AtomixClient

노드 (공용)

AtomixClient가 연결해야 하는 노드

 

list

configurationUri (common)

AtomixClient 설정 경로

 

문자열

resolveProperty Placeholders (advanced)

구성 요소가 시작 시 자체적으로 속성 자리 표시자를 확인해야 하는지 여부입니다. String 유형의 속성만 속성 자리 표시자를 사용할 수 있습니다.Only properties which are of String type can use property placeholders.

true

boolean

Atomix Messaging 끝점은 URI 구문을 사용하여 구성됩니다.

atomix-messaging:resourceName

다음 경로 및 쿼리 매개변수를 사용합니다.

14.1.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

resourceName

필수 리소스 이름

 

문자열

14.1.2. 쿼리 매개변수(19 매개변수):

Expand
이름설명기본값유형

Atomix (common)

사용할 Atomix 인스턴스

 

Atomix

broadcastType (일반)

broadcast type입니다.

ALL

BroadcastType

channelName (common)

메시징 채널 이름

 

문자열

configurationUri (common)

Atomix 구성 uri입니다.

 

문자열

defaultAction (common)

기본 동작입니다.

DIRECT

동작

memberName (common)

Atomix 그룹 멤버 이름

 

문자열

노드 (공용)

클러스터를 구성하는 노드의 주소입니다.

 

문자열

resultHeader (일반)

wil이 결과를 전달하는 헤더입니다.

 

문자열

전송 (일반)

Atomix 전송을 설정합니다.

io.atomix.catalyst.transport.netty.NettyTransport

전송

bridgeErrorHandler (consumer)

소비자를 Camel 라우팅 오류 처리기에 브리징할 수 있습니다. 이는 소비자가 들어오는 메시지를 선택하는 동안 예외가 발생한 것을 의미하며, 이제 메시지로 처리되어 라우팅 오류 처리기에 의해 처리됩니다. 기본적으로 소비자는 org.apache.camel.spi.ExceptionHandler를 사용하여 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

false

boolean

예외 처리기 (consumer)

소비자가 사용자 지정 ExceptionHandler를 사용하도록 하려면 다음을 수행합니다. bridgeErrorHandler 옵션이 활성화되어 있는지 확인한 후 이 옵션이 사용되지 않습니다. 기본적으로 소비자는 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

 

ExceptionHandler

exchangePattern (consumer)

소비자가 교환을 생성할 때 교환 패턴을 설정합니다.

 

ExchangePattern

defaultResourceConfig (고급)

클러스터의 기본 리소스 구성입니다.

 

속성

defaultResourceOptions (고급)

로컬 기본 리소스 옵션입니다.

 

속성

임시 (advanced)

로컬 멤버가 그룹을 PersistentMember로 조인해야 하는지 여부를 설정합니다. ephemeral로 설정하면 로컬 멤버가 자동 생성된 ID를 수신하므로 로컬 멤버는 무시됩니다.

false

boolean

ReadConsistency (advanced)

읽기 일관성 수준입니다.

 

ReadConsistency

resourceConfigs (고급)

클러스터 전체 리소스 구성.

 

map

resourceOptions (고급)

로컬 리소스 구성

 

map

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

15장. Atomix MultiMap 구성 요소

Camel 버전 2.20에서 사용 가능

camel atomix-multimap 구성 요소를 사용하면 Atomix의 Distributed MultiMap 컬렉션을 사용할 수 있습니다.

Maven 사용자는 이 구성 요소를 위해 다음 종속성을 pom.xml에 추가해야 합니다.

    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-atomix</artifactId>
        <version>${camel-version}</version>
    </dependency>

15.1. URI 형식

    atomix-multimap:multiMapName

Atomix MultiMap 구성 요소는 아래에 나열된 5 가지 옵션을 지원합니다.

Expand
이름설명기본값유형

구성 (consumer)

공유 구성 요소 구성

 

AtomixMultiMap 구성

Atomix (consumer)

공유 AtomixClient 인스턴스

 

AtomixClient

노드 (consumer)

AtomixClient가 연결해야 하는 노드

 

list

configurationUri (consumer)

AtomixClient 설정 경로

 

문자열

resolveProperty Placeholders (advanced)

구성 요소가 시작 시 자체적으로 속성 자리 표시자를 확인해야 하는지 여부입니다. String 유형의 속성만 속성 자리 표시자를 사용할 수 있습니다.Only properties which are of String type can use property placeholders.

true

boolean

Atomix MultiMap 끝점은 URI 구문을 사용하여 구성됩니다.

atomix-multimap:resourceName

다음 경로 및 쿼리 매개변수를 사용합니다.

15.1.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

resourceName

필수 리소스 이름

 

문자열

15.1.2. 쿼리 매개변수(18 매개변수):

Expand
이름설명기본값유형

Atomix (consumer)

사용할 Atomix 인스턴스

 

Atomix

bridgeErrorHandler (consumer)

소비자를 Camel 라우팅 오류 처리기에 브리징할 수 있습니다. 이는 소비자가 들어오는 메시지를 선택하는 동안 예외가 발생한 것을 의미하며, 이제 메시지로 처리되어 라우팅 오류 처리기에 의해 처리됩니다. 기본적으로 소비자는 org.apache.camel.spi.ExceptionHandler를 사용하여 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

false

boolean

configurationUri (consumer)

Atomix 구성 uri입니다.

 

문자열

defaultAction (consumer)

기본 동작입니다.

PUT

동작

(consumer)

헤더에 설정되지 않거나 특정 키에 대한 이벤트를 수신 대기하는 경우 사용할 키입니다.

 

개체

노드 (consumer)

클러스터를 구성하는 노드의 주소입니다.

 

문자열

resultHeader (consumer)

wil이 결과를 전달하는 헤더입니다.

 

문자열

전송 (consumer)

Atomix 전송을 설정합니다.

io.atomix.catalyst.transport.netty.NettyTransport

전송

TTL ( consumer)

리소스 ttl.

 

long

예외 처리기 (consumer)

소비자가 사용자 지정 ExceptionHandler를 사용하도록 하려면 다음을 수행합니다. bridgeErrorHandler 옵션이 활성화되어 있는지 확인한 후 이 옵션이 사용되지 않습니다. 기본적으로 소비자는 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

 

ExceptionHandler

exchangePattern (consumer)

소비자가 교환을 생성할 때 교환 패턴을 설정합니다.

 

ExchangePattern

defaultResourceConfig (고급)

클러스터의 기본 리소스 구성입니다.

 

속성

defaultResourceOptions (고급)

로컬 기본 리소스 옵션입니다.

 

속성

임시 (advanced)

로컬 멤버가 그룹을 PersistentMember로 조인해야 하는지 여부를 설정합니다. ephemeral로 설정하면 로컬 멤버가 자동 생성된 ID를 수신하므로 로컬 멤버는 무시됩니다.

false

boolean

ReadConsistency (advanced)

읽기 일관성 수준입니다.

 

ReadConsistency

resourceConfigs (고급)

클러스터 전체 리소스 구성.

 

map

resourceOptions (고급)

로컬 리소스 구성

 

map

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

16장. Atomix Queue 구성 요소

Camel 버전 2.20에서 사용 가능

camel atomix-queue 구성 요소를 사용하면 Atomix의 분산 대기열 컬렉션을 사용할 수 있습니다.

Maven 사용자는 이 구성 요소를 위해 다음 종속성을 pom.xml에 추가해야 합니다.

    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-atomix</artifactId>
        <version>${camel-version}</version>
    </dependency>

16.1. URI 형식

    atomix-queue:queueName

Atomix Queue 구성 요소는 아래에 나열된 5 가지 옵션을 지원합니다.

Expand
이름설명기본값유형

구성 (일반)

공유 구성 요소 구성

 

AtomixQueue 구성

Atomix (common)

공유 AtomixClient 인스턴스

 

AtomixClient

노드 (공용)

AtomixClient가 연결해야 하는 노드

 

list

configurationUri (common)

AtomixClient 설정 경로

 

문자열

resolveProperty Placeholders (advanced)

구성 요소가 시작 시 자체적으로 속성 자리 표시자를 확인해야 하는지 여부입니다. String 유형의 속성만 속성 자리 표시자를 사용할 수 있습니다.Only properties which are of String type can use property placeholders.

true

boolean

Atomix Queue 끝점은 URI 구문을 사용하여 구성됩니다.

atomix-queue:resourceName

다음 경로 및 쿼리 매개변수를 사용합니다.

16.1.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

resourceName

필수 리소스 이름

 

문자열

16.1.2. 쿼리 매개변수(16 매개변수):

Expand
이름설명기본값유형

Atomix (common)

사용할 Atomix 인스턴스

 

Atomix

configurationUri (common)

Atomix 구성 uri입니다.

 

문자열

defaultAction (common)

기본 동작입니다.

ADD

동작

노드 (공용)

클러스터를 구성하는 노드의 주소입니다.

 

문자열

resultHeader (일반)

wil이 결과를 전달하는 헤더입니다.

 

문자열

전송 (일반)

Atomix 전송을 설정합니다.

io.atomix.catalyst.transport.netty.NettyTransport

전송

bridgeErrorHandler (consumer)

소비자를 Camel 라우팅 오류 처리기에 브리징할 수 있습니다. 이는 소비자가 들어오는 메시지를 선택하는 동안 예외가 발생한 것을 의미하며, 이제 메시지로 처리되어 라우팅 오류 처리기에 의해 처리됩니다. 기본적으로 소비자는 org.apache.camel.spi.ExceptionHandler를 사용하여 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

false

boolean

예외 처리기 (consumer)

소비자가 사용자 지정 ExceptionHandler를 사용하도록 하려면 다음을 수행합니다. bridgeErrorHandler 옵션이 활성화되어 있는지 확인한 후 이 옵션이 사용되지 않습니다. 기본적으로 소비자는 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

 

ExceptionHandler

exchangePattern (consumer)

소비자가 교환을 생성할 때 교환 패턴을 설정합니다.

 

ExchangePattern

defaultResourceConfig (고급)

클러스터의 기본 리소스 구성입니다.

 

속성

defaultResourceOptions (고급)

로컬 기본 리소스 옵션입니다.

 

속성

임시 (advanced)

로컬 멤버가 그룹을 PersistentMember로 조인해야 하는지 여부를 설정합니다. ephemeral로 설정하면 로컬 멤버가 자동 생성된 ID를 수신하므로 로컬 멤버는 무시됩니다.

false

boolean

ReadConsistency (advanced)

읽기 일관성 수준입니다.

 

ReadConsistency

resourceConfigs (고급)

클러스터 전체 리소스 구성.

 

map

resourceOptions (고급)

로컬 리소스 구성

 

map

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

17장. Atomix 설정 구성 요소

Camel 버전 2.20에서 사용 가능

camel atomix-set 구성 요소를 사용하면 Atomix의 분산 세트 컬렉션을 사용할 수 있습니다.

Maven 사용자는 이 구성 요소를 위해 다음 종속성을 pom.xml에 추가해야 합니다.

    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-atomix</artifactId>
        <version>${camel-version}</version>
    </dependency>

17.1. URI 형식

    atomix-set:setName

Atomix Set 구성 요소는 아래에 나열된 5 가지 옵션을 지원합니다.

Expand
이름설명기본값유형

구성 (일반)

공유 구성 요소 구성

 

AtomixSetConfiguration

Atomix (common)

공유 AtomixClient 인스턴스

 

AtomixClient

노드 (공용)

AtomixClient가 연결해야 하는 노드

 

list

configurationUri (common)

AtomixClient 설정 경로

 

문자열

resolveProperty Placeholders (advanced)

구성 요소가 시작 시 자체적으로 속성 자리 표시자를 확인해야 하는지 여부입니다. String 유형의 속성만 속성 자리 표시자를 사용할 수 있습니다.Only properties which are of String type can use property placeholders.

true

boolean

Atomix Set 끝점은 URI 구문을 사용하여 구성됩니다.

atomix-set:resourceName

다음 경로 및 쿼리 매개변수를 사용합니다.

17.1.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

resourceName

필수 리소스 이름

 

문자열

17.1.2. 쿼리 매개변수(17 매개변수):

Expand
이름설명기본값유형

Atomix (common)

사용할 Atomix 인스턴스

 

Atomix

configurationUri (common)

Atomix 구성 uri입니다.

 

문자열

defaultAction (common)

기본 동작입니다.

ADD

동작

노드 (공용)

클러스터를 구성하는 노드의 주소입니다.

 

문자열

resultHeader (일반)

wil이 결과를 전달하는 헤더입니다.

 

문자열

전송 (일반)

Atomix 전송을 설정합니다.

io.atomix.catalyst.transport.netty.NettyTransport

전송

TTL ( 일반)

리소스 ttl.

 

long

bridgeErrorHandler (consumer)

소비자를 Camel 라우팅 오류 처리기에 브리징할 수 있습니다. 이는 소비자가 들어오는 메시지를 선택하는 동안 예외가 발생한 것을 의미하며, 이제 메시지로 처리되어 라우팅 오류 처리기에 의해 처리됩니다. 기본적으로 소비자는 org.apache.camel.spi.ExceptionHandler를 사용하여 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

false

boolean

예외 처리기 (consumer)

소비자가 사용자 지정 ExceptionHandler를 사용하도록 하려면 다음을 수행합니다. bridgeErrorHandler 옵션이 활성화되어 있는지 확인한 후 이 옵션이 사용되지 않습니다. 기본적으로 소비자는 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

 

ExceptionHandler

exchangePattern (consumer)

소비자가 교환을 생성할 때 교환 패턴을 설정합니다.

 

ExchangePattern

defaultResourceConfig (고급)

클러스터의 기본 리소스 구성입니다.

 

속성

defaultResourceOptions (고급)

로컬 기본 리소스 옵션입니다.

 

속성

임시 (advanced)

로컬 멤버가 그룹을 PersistentMember로 조인해야 하는지 여부를 설정합니다. ephemeral로 설정하면 로컬 멤버가 자동 생성된 ID를 수신하므로 로컬 멤버는 무시됩니다.

false

boolean

ReadConsistency (advanced)

읽기 일관성 수준입니다.

 

ReadConsistency

resourceConfigs (고급)

클러스터 전체 리소스 구성.

 

map

resourceOptions (고급)

로컬 리소스 구성

 

map

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

18장. Atomix 값 구성 요소

Camel 버전 2.20에서 사용 가능

camel atomix-value 구성 요소를 사용하면 Atomix의 분산 가치 와 함께 작업 할 수 있습니다.

Maven 사용자는 이 구성 요소를 위해 다음 종속성을 pom.xml에 추가해야 합니다.

    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-atomix</artifactId>
        <version>${camel-version}</version>
    </dependency>

18.1. URI 형식

    atomix-value:valueName

Atomix Value 구성 요소는 아래에 나열된 5 가지 옵션을 지원합니다.

Expand
이름설명기본값유형

구성 (일반)

공유 구성 요소 구성

 

AtomixValue 구성

Atomix (common)

공유 AtomixClient 인스턴스

 

AtomixClient

노드 (공용)

AtomixClient가 연결해야 하는 노드

 

list

configurationUri (common)

AtomixClient 설정 경로

 

문자열

resolveProperty Placeholders (advanced)

구성 요소가 시작 시 자체적으로 속성 자리 표시자를 확인해야 하는지 여부입니다. String 유형의 속성만 속성 자리 표시자를 사용할 수 있습니다.Only properties which are of String type can use property placeholders.

true

boolean

Atomix Value 끝점은 URI 구문을 사용하여 구성됩니다.

atomix-value:resourceName

다음 경로 및 쿼리 매개변수를 사용합니다.

18.1.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

resourceName

필수 리소스 이름

 

문자열

18.1.2. 쿼리 매개변수(17 매개변수):

Expand
이름설명기본값유형

Atomix (common)

사용할 Atomix 인스턴스

 

Atomix

configurationUri (common)

Atomix 구성 uri입니다.

 

문자열

defaultAction (common)

기본 동작입니다.

SET

동작

노드 (공용)

클러스터를 구성하는 노드의 주소입니다.

 

문자열

resultHeader (일반)

wil이 결과를 전달하는 헤더입니다.

 

문자열

전송 (일반)

Atomix 전송을 설정합니다.

io.atomix.catalyst.transport.netty.NettyTransport

전송

TTL ( 일반)

리소스 ttl.

 

long

bridgeErrorHandler (consumer)

소비자를 Camel 라우팅 오류 처리기에 브리징할 수 있습니다. 이는 소비자가 들어오는 메시지를 선택하는 동안 예외가 발생한 것을 의미하며, 이제 메시지로 처리되어 라우팅 오류 처리기에 의해 처리됩니다. 기본적으로 소비자는 org.apache.camel.spi.ExceptionHandler를 사용하여 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

false

boolean

예외 처리기 (consumer)

소비자가 사용자 지정 ExceptionHandler를 사용하도록 하려면 다음을 수행합니다. bridgeErrorHandler 옵션이 활성화되어 있는지 확인한 후 이 옵션이 사용되지 않습니다. 기본적으로 소비자는 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

 

ExceptionHandler

exchangePattern (consumer)

소비자가 교환을 생성할 때 교환 패턴을 설정합니다.

 

ExchangePattern

defaultResourceConfig (고급)

클러스터의 기본 리소스 구성입니다.

 

속성

defaultResourceOptions (고급)

로컬 기본 리소스 옵션입니다.

 

속성

임시 (advanced)

로컬 멤버가 그룹을 PersistentMember로 조인해야 하는지 여부를 설정합니다. ephemeral로 설정하면 로컬 멤버가 자동 생성된 ID를 수신하므로 로컬 멤버는 무시됩니다.

false

boolean

ReadConsistency (advanced)

읽기 일관성 수준입니다.

 

ReadConsistency

resourceConfigs (고급)

클러스터 전체 리소스 구성.

 

map

resourceOptions (고급)

로컬 리소스 구성

 

map

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

19장. Avro 구성 요소

Camel 버전 2.10에서 사용 가능

이 구성 요소는 Apache Avro의 바이너리 데이터 형식을 사용하여 메시지를 직렬화하고 역직렬화할 수 있도록 하는 avro의 dataformat을 제공합니다. 또한 netty 또는 http를 통해 avro 및 consumers 끝점을 사용하도록 생산자 및 소비자 끝점을 제공하여 Apache Avro의 rpc를 지원합니다.

Maven 사용자는 이 구성 요소를 위해 다음 종속성을 pom.xml 에 추가해야 합니다.

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-avro</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>

19.1. Apache Avro 개요

Avro를 사용하면 json과 같은 형식을 사용하여 메시지 유형과 프로토콜을 정의한 다음 지정된 유형 및 메시지에 대해 java 코드를 생성할 수 있습니다. 스키마가 어떻게 보이는지의 예는 다음과 같습니다.

{"namespace": "org.apache.camel.avro.generated",
 "protocol": "KeyValueProtocol",

 "types": [
     {"name": "Key", "type": "record",
      "fields": [
          {"name": "key",   "type": "string"}
      ]
     },
     {"name": "Value", "type": "record",
      "fields": [
          {"name": "value",   "type": "string"}
      ]
     }
 ],

 "messages": {
     "put": {
         "request": [{"name": "key", "type": "Key"}, {"name": "value", "type": "Value"} ],
         "response": "null"
     },
     "get": {
         "request": [{"name": "key", "type": "Key"}],
         "response": "Value"
     }
 }
}

maven, ant 등을 사용하여 스키마에서 클래스를 쉽게 생성할 수 있습니다. 자세한 내용은 Apache Avro 설명서에서 확인할 수 있습니다.

그러나 스키마를 첫 번째 접근 방식은 적용하지 않으며 기존 클래스에 대한 스키마를 만들 수 있습니다.However, it doesn't enforce a schema first approach and you can create schema for your existing classes. 2.12부터 기존 프로토콜 인터페이스를 사용하여 RCP 호출을 수행할 수 있습니다. 프로토콜 자체에 인터페이스를 사용하고 매개 변수 및 결과 유형에 대해 POJO 빈 또는 기본/문자열 클래스를 사용해야 합니다. 위의 스키마에 해당하는 클래스의 예는 다음과 같습니다.Here is an example of the class that corresponds to schema above:

package org.apache.camel.avro.reflection;

public interface KeyValueProtocol {
    void put(String key, Value value);
    Value get(String key);
}

class Value {
    private String value;
    public String getValue() { return value; }
    public void setValue(String value) { this.value = value; }
}

참고: 기존 클래스는 데이터 형식이 아닌 RPC(아래 참조)에만 사용할 수 있습니다.

19.2. Avro 데이터 형식 사용

avro 데이터 형식을 사용하는 것은 라우팅에서 마샬링하거나 마샬링할 클래스를 지정하는 것만큼 쉽습니다.

    <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
        <route>
            <from uri="direct:in"/>
            <marshal>
                <avro instanceClass="org.apache.camel.dataformat.avro.Message"/>
            </marshal>
            <to uri="log:out"/>
        </route>
    </camelContext>

대안은 컨텍스트 내에서 dataformat을 지정하고 경로에서 참조할 수 있습니다.

    <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
         <dataFormats>
            <avro id="avro" instanceClass="org.apache.camel.dataformat.avro.Message"/>
        </dataFormats>
        <route>
            <from uri="direct:in"/>
            <marshal ref="avro"/>
            <to uri="log:out"/>
        </route>
    </camelContext>

같은 방식으로 avro 데이터 형식을 사용하여 umarshal을 사용할 수 있습니다.

19.3. Camel에서 Avro RPC 사용

위에서 언급한 바와 같이 Avro는 http 및 netty와 같은 여러 전송에 대한 RPC 지원도 제공합니다. Camel은 이 두 가지 전송에 대한 소비자와 생산자를 제공합니다.

avro:[transport]:[host]:[port][?options]

지원되는 전송 값은 현재 http 또는 netty입니다.

2.12 이후에는 URI에 메시지 이름을 바로 지정할 수 있습니다.

avro:[transport]:[host]:[port][/messageName][?options]

소비자의 경우 이를 통해 동일한 소켓에 여러 개의 경로가 연결됩니다. 올바른 경로로 디스패치하는 것은 avro 구성 요소에서 자동으로 수행됩니다. messageName이 지정되지 않은 경로(있는 경우)는 기본값으로 사용됩니다.

avro ipc에 대한 camel 생산자를 사용할 때 "인" 메시지 본문에는 avro 프로토콜에 지정된 작업의 매개 변수가 포함되어야 합니다. "out" 메시지의 본문에 응답이 추가됩니다.

avro ipc에 camel avro 소비자를 사용하는 것과 유사한 방식으로, 요청 매개 변수는 생성된 교환의 "인" 메시지 본문에 배치되고 교환이 "out" 메시지의 본문을 처리하면 응답이 전송됩니다.

참고: 기본 소비자 매개변수는 배열로 래핑됩니다. If you've only one parameter, since 2.12 you can use singleParameter URI option to receive it direcly in the "in" message body without array wrapping.

19.4. Avro RPC URI 옵션

Avro 구성 요소는 아래 나열된 두 가지 옵션을 지원합니다.

Expand
이름설명기본값유형

구성 (고급)

공유 AvroConfiguration을 사용하여 옵션을 한 번 구성

 

AvroConfiguration

resolveProperty Placeholders (advanced)

구성 요소가 시작 시 자체적으로 속성 자리 표시자를 확인해야 하는지 여부입니다. String 유형의 속성만 속성 자리 표시자를 사용할 수 있습니다.Only properties which are of String type can use property placeholders.

true

boolean

Avro 엔드포인트는 URI 구문을 사용하여 구성됩니다.

avro:transport:host:port/messageName

다음 경로 및 쿼리 매개변수를 사용합니다.

19.4.1. 경로 매개 변수 (4 매개변수):

Expand
이름설명기본값유형

전송

자주 묻는 질문

 

AvroTransport

port

사용할 필수 포트 번호

 

int

host

사용하는 데 필요한 호스트 이름

 

문자열

messageName

보낼 메시지의 이름입니다.

 

문자열

19.4.2. 쿼리 매개 변수(10 매개변수:

Expand
이름설명기본값유형

프로토콜 (일반)

사용할 Avro 프로토콜

 

프로토콜

protocolClassName (common)

FQN 클래스 이름으로 정의된 Avro 프로토콜

 

문자열

protocolLocation (공용)

Avro 프로토콜 위치

 

문자열

reflectionProtocol (common)

제공되는 protocol 오브젝트가 리플렉션 프로토콜입니다. protocolClassName 프로토콜 유형에서 자동으로 감지되므로 protocol 매개 변수에서만 사용해야 합니다.

false

boolean

singleParameter (common)

true인 경우 consumer 매개변수는 배열로 래핑되지 않습니다. protocol이 메시지에 대해 1개의 매개 변수를 더 많이 지정하는 경우 실패합니다.

false

boolean

uriAuthority (일반)

사용 권한(사용자 이름 및 암호)

 

문자열

bridgeErrorHandler (consumer)

소비자를 Camel 라우팅 오류 처리기에 브리징할 수 있습니다. 이는 소비자가 들어오는 메시지를 선택하는 동안 예외가 발생한 것을 의미하며, 이제 메시지로 처리되어 라우팅 오류 처리기에 의해 처리됩니다. 기본적으로 소비자는 org.apache.camel.spi.ExceptionHandler를 사용하여 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

false

boolean

예외 처리기 (consumer)

소비자가 사용자 지정 ExceptionHandler를 사용하도록 하려면 다음을 수행합니다. bridgeErrorHandler 옵션이 활성화되어 있는지 확인한 후 이 옵션이 사용되지 않습니다. 기본적으로 소비자는 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

 

ExceptionHandler

exchangePattern (consumer)

소비자가 교환을 생성할 때 교환 패턴을 설정합니다.

 

ExchangePattern

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

19.5. avro RPC 헤더

Expand
이름설명

CamelAvroMessageName

보낼 메시지의 이름입니다. in consumer는 URI에서 메시지 이름을 재정의합니다(있는 경우)

19.6. 예제

http를 통한 camel avro 생산자 사용 예:

        <route>
            <from uri="direct:start"/>
            <to uri="avro:http:localhost:{{avroport}}?protocolClassName=org.apache.camel.avro.generated.KeyValueProtocol"/>
            <to uri="log:avro"/>
        </route>

위의 예에서는 CamelAvroMessageName 헤더를 채워야 합니다. 2.12 이후 다음 구문을 사용하여 일정한 메시지를 호출할 수 있습니다.

        <route>
            <from uri="direct:start"/>
            <to uri="avro:http:localhost:{{avroport}}/put?protocolClassName=org.apache.camel.avro.generated.KeyValueProtocol"/>
            <to uri="log:avro"/>
        </route>

netty를 통해 camel avro 소비자를 사용하여 메시지를 사용하는 예:

        <route>
            <from uri="avro:netty:localhost:{{avroport}}?protocolClassName=org.apache.camel.avro.generated.KeyValueProtocol"/>
            <choice>
                <when>
                    <el>${in.headers.CamelAvroMessageName == 'put'}</el>
                    <process ref="putProcessor"/>
                </when>
                <when>
                    <el>${in.headers.CamelAvroMessageName == 'get'}</el>
                    <process ref="getProcessor"/>
                </when>
            </choice>
        </route>

2.12부터 동일한 작업을 수행하도록 두 개의 다른 경로를 설정할 수 있습니다.

        <route>
            <from uri="avro:netty:localhost:{{avroport}}/put?protocolClassName=org.apache.camel.avro.generated.KeyValueProtocol">
            <process ref="putProcessor"/>
        </route>
        <route>
            <from uri="avro:netty:localhost:{{avroport}}/get?protocolClassName=org.apache.camel.avro.generated.KeyValueProtocol&singleParameter=true"/>
            <process ref="getProcessor"/>
        </route>

위의 예제에서 get은 하나의 매개 변수만 사용하므로 singleParameter 가 사용되므로 getProcessor 는 본문에서 Value 클래스를 직접 수신하지만 putProcessor 는 String 키와 Value 값이 배열 콘텐츠로 입력된 크기 2의 배열을 수신합니다.

20장. Avro DataFormat

Camel 버전 2.14로 사용 가능

이 구성 요소는 Apache Avro의 바이너리 데이터 형식을 사용하여 메시지를 직렬화하고 역직렬화할 수 있도록 하는 avro의 dataformat을 제공합니다. 또한 netty 또는 http를 통해 avro 및 consumers 끝점을 사용하도록 생산자 및 소비자 끝점을 제공하여 Apache Avro의 rpc를 지원합니다.

Maven 사용자는 이 구성 요소를 위해 다음 종속성을 pom.xml 에 추가해야 합니다.

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-avro</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>

20.1. Apache Avro 개요

Avro를 사용하면 json과 같은 형식을 사용하여 메시지 유형과 프로토콜을 정의한 다음 지정된 유형 및 메시지에 대해 java 코드를 생성할 수 있습니다. 스키마가 어떻게 보이는지의 예는 다음과 같습니다.

{"namespace": "org.apache.camel.avro.generated",
 "protocol": "KeyValueProtocol",

 "types": [
     {"name": "Key", "type": "record",
      "fields": [
          {"name": "key",   "type": "string"}
      ]
     },
     {"name": "Value", "type": "record",
      "fields": [
          {"name": "value",   "type": "string"}
      ]
     }
 ],

 "messages": {
     "put": {
         "request": [{"name": "key", "type": "Key"}, {"name": "value", "type": "Value"} ],
         "response": "null"
     },
     "get": {
         "request": [{"name": "key", "type": "Key"}],
         "response": "Value"
     }
 }
}

maven, ant 등을 사용하여 스키마에서 클래스를 쉽게 생성할 수 있습니다. 자세한 내용은 Apache Avro 설명서에서 확인할 수 있습니다.

그러나 스키마를 첫 번째 접근 방식은 적용하지 않으며 기존 클래스에 대한 스키마를 만들 수 있습니다.However, it doesn't enforce a schema first approach and you can create schema for your existing classes. 2.12부터 기존 프로토콜 인터페이스를 사용하여 RCP 호출을 수행할 수 있습니다. 프로토콜 자체에 인터페이스를 사용하고 매개 변수 및 결과 유형에 대해 POJO 빈 또는 기본/문자열 클래스를 사용해야 합니다. 위의 스키마에 해당하는 클래스의 예는 다음과 같습니다.Here is an example of the class that corresponds to schema above:

package org.apache.camel.avro.reflection;

public interface KeyValueProtocol {
    void put(String key, Value value);
    Value get(String key);
}

class Value {
    private String value;
    public String getValue() { return value; }
    public void setValue(String value) { this.value = value; }
}

참고: 기존 클래스는 데이터 형식이 아닌 RPC(아래 참조)에만 사용할 수 있습니다.

20.2. Avro 데이터 형식 사용

avro 데이터 형식을 사용하는 것은 라우팅에서 마샬링하거나 마샬링할 클래스를 지정하는 것만큼 쉽습니다.

    <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
        <route>
            <from uri="direct:in"/>
            <marshal>
                <avro instanceClass="org.apache.camel.dataformat.avro.Message"/>
            </marshal>
            <to uri="log:out"/>
        </route>
    </camelContext>

대안은 컨텍스트 내에서 dataformat을 지정하고 경로에서 참조할 수 있습니다.

    <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
         <dataFormats>
            <avro id="avro" instanceClass="org.apache.camel.dataformat.avro.Message"/>
        </dataFormats>
        <route>
            <from uri="direct:in"/>
            <marshal ref="avro"/>
            <to uri="log:out"/>
        </route>
    </camelContext>

같은 방식으로 avro 데이터 형식을 사용하여 umarshal을 사용할 수 있습니다.

20.3. Avro Dataformat 옵션

Avro dataformat은 아래 나열된 두 가지 옵션을 지원합니다.

Expand
이름기본값Java Type설명

instanceClassName

 

문자열

마샬링 및 unmarshalling에 사용할 클래스 이름

contentTypeHeader

false

부울

데이터 형식이 데이터 형식에서 수행할 수 있는 경우 데이터 형식의 유형으로 Content-Type 헤더를 설정해야 하는지 여부입니다. 예를 들어 데이터 형식을 XML로 마샬링하거나, JSon으로 마샬링되는 데이터 형식에 대한 application/json 등이 있습니다.

21장. AWS CloudWatch Component

Camel 버전 2.11로 사용 가능

CW 구성 요소를 사용하면 메시지를 Amazon CloudWatch 지표로 보낼 수 있습니다. Amazon API 구현은 AWS SDK 에서 제공합니다.

사전 요구 사항

유효한 Amazon Web Services 개발자 계정이 있어야 하며 Amazon CloudWatch를 사용하려면 등록해야 합니다. 자세한 내용은 Amazon CloudWatch 에서 확인할 수 있습니다.

21.1. URI 형식

aws-cw://namespace[?options]

메트릭이 아직 없는 경우 생성됩니다.
다음 형식 ?options=value&option2=value&…​로 URI에 쿼리 옵션을 추가할 수 있습니다.

21.2. URI 옵션

AWS CloudWatch 구성 요소는 아래에 나열된 5 가지 옵션을 지원합니다.

Expand
이름설명기본값유형

구성 (고급)

AWS CW 기본 구성

 

CwConfiguration

accesskey (producer)

Amazon AWS Access Key

 

문자열

secretKey (producer)

Amazon AWS Secret Key

 

문자열

리전 (producer)

CW 클라이언트가 작업해야 하는 지역

 

문자열

resolveProperty Placeholders (advanced)

구성 요소가 시작 시 자체적으로 속성 자리 표시자를 확인해야 하는지 여부입니다. String 유형의 속성만 속성 자리 표시자를 사용할 수 있습니다.Only properties which are of String type can use property placeholders.

true

boolean

AWS CloudWatch 끝점은 URI 구문을 사용하여 구성됩니다.

aws-cw:namespace

다음 경로 및 쿼리 매개변수를 사용합니다.

21.2.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

namespace

필수 지표 네임스페이스

 

문자열

21.2.2. 쿼리 매개변수(11 매개변수):

Expand
이름설명기본값유형

AmazonCwClient (producer)

AmazonCloudWatch를 클라이언트로 사용

 

AmazonCloudWatch

이름 (producer)

메트릭 이름

 

문자열

proxyHost (producer)

CW 클라이언트를 인스턴스화할 때 프록시 호스트를 정의하기 위해

 

문자열

proxyPort (producer)

CW 클라이언트를 인스턴스화할 때 프록시 포트 정의

 

정수

리전 (producer)

CW 클라이언트가 작업해야 하는 지역

 

문자열

타임 스탬프 (producer)

메트릭 타임스탬프

 

날짜

단위 (producer)

메트릭 단위

 

문자열

(producer)

메트릭 값

 

double

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

accesskey (보안)

Amazon AWS Access Key

 

문자열

secretKey (security)

Amazon AWS Secret Key

 

문자열

필수 CW 구성 요소 옵션

Amazon의 CloudWatch에 액세스하려면 레지스트리 또는 accessKey 및 secretKey에 amazonCwClient를 제공해야 합니다.

21.3. 사용법

21.3.1. CW 생산자가 평가한 메시지 헤더

Expand
header유형설명

CamelAwsCwMetricName

문자열

Amazon CW 지표 이름입니다.

CamelAwsCwMetricValue

double

Amazon CW 지표 값입니다.

CamelAwsCwMetricUnit

문자열

Amazon CW 지표 단위입니다.

CamelAwsCwMetricNamespace

문자열

Amazon CW 지표 네임스페이스입니다.

CamelAwsCwMetricTimestamp

날짜

Amazon CW 지표 타임 스탬프입니다.

CamelAwsCwMetricDimensionName

문자열

Camel 2.12: Amazon CW 지표 크기 이름입니다.

CamelAwsCwMetricDimensionValue

문자열

Camel 2.12: Amazon CW 지표 크기 값.

CamelAwsCwMetricDimensions

Map<String, String>

Camel 2.12: 차원 이름 및 차원 값의 맵입니다.

21.3.2. 고급 AmazonCloudWatch 구성

AmazonCloudWatch 인스턴스 구성을 더 많이 제어해야 하는 경우 고유한 인스턴스를 만들고 URI에서 참조할 수 있습니다.

from("direct:start")
.to("aws-cw://namepsace?amazonCwClient=#client");

#client 는 레지스트리에서 AmazonCloudWatch 를 나타냅니다.

예를 들어 Camel 애플리케이션이 방화벽 뒤에서 실행 중인 경우입니다.

AWSCredentials awsCredentials = new BasicAWSCredentials("myAccessKey", "mySecretKey");
ClientConfiguration clientConfiguration = new ClientConfiguration();
clientConfiguration.setProxyHost("http://myProxyHost");
clientConfiguration.setProxyPort(8080);

AmazonCloudWatch client = new AmazonCloudWatchClient(awsCredentials, clientConfiguration);

registry.bind("client", client);

21.4. 종속 항목

Maven 사용자는 다음 종속성을 pom.xml에 추가해야 합니다.

pom.xml

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-aws</artifactId>
    <version>${camel-version}</version>
</dependency>

여기서 ${camel-version}은 Camel의 실제 버전(2.10 이상)으로 교체해야 합니다.

21.5. 예를 들면 다음과 같습니다.

  • Camel 구성
  • 구성 요소
  • 끝점
  • 시작하기
  • AWS 구성 요소

22장. AWS DynamoDB Component

Camel 버전 2.10에서 사용 가능

DynamoDB 구성 요소는 Amazon의 DynamoDB 서비스에서 데이터를 저장하고 검색할 수 있도록 지원합니다.

사전 요구 사항

유효한 Amazon Web Services 개발자 계정이 있어야 하며 Amazon DynamoDB를 사용하려면 가입해야 합니다. 자세한 내용은 Amazon DynamoDB 에서 확인할 수 있습니다.

22.1. URI 형식

aws-ddb://domainName[?options]

다음 형식 ?options=value&option2=value&…​로 URI에 쿼리 옵션을 추가할 수 있습니다.

22.2. URI 옵션

AWS DynamoDB 구성 요소는 아래에 나열된 5 가지 옵션을 지원합니다.

Expand
이름설명기본값유형

구성 (고급)

AWS DDB 기본 구성

 

DdbConfiguration

accesskey (producer)

Amazon AWS Access Key

 

문자열

secretKey (producer)

Amazon AWS Secret Key

 

문자열

리전 (producer)

DDB 클라이언트가 작업해야 하는 리전

 

문자열

resolveProperty Placeholders (advanced)

구성 요소가 시작 시 자체적으로 속성 자리 표시자를 확인해야 하는지 여부입니다. String 유형의 속성만 속성 자리 표시자를 사용할 수 있습니다.Only properties which are of String type can use property placeholders.

true

boolean

AWS DynamoDB 끝점은 URI 구문을 사용하여 구성됩니다.

aws-ddb:tableName

다음 경로 및 쿼리 매개변수를 사용합니다.

22.2.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

tableName

필수 필수 현재 작업 중인 테이블의 이름입니다.

 

문자열

22.2.2. 쿼리 매개변수(13 매개변수):

Expand
이름설명기본값유형

AmazonDDBClient (producer)

AmazonDynamoDB를 클라이언트로 사용하기

 

AmazonDynamoDB

ConsistentRead (producer)

데이터를 읽을 때 강력한 일관성을 강제 적용할지 여부를 결정합니다.Determines whether or not strong consistency should be enforced when data is read.

false

boolean

keyAttributeName (producer)

테이블 생성 시 특성 이름

 

문자열

keyAttributeType (producer)

테이블을 만들 때 특성 유형

 

문자열

작업 (producer)

수행할 작업

PutItem

DdbOperations

proxyHost (producer)

DDB 클라이언트를 인스턴스화할 때 프록시 호스트를 정의하기 위해

 

문자열

proxyPort (producer)

DDB 클라이언트를 인스턴스화할 때 프록시 포트 정의

 

정수

readCapacity (producer)

표에서 리소스를 읽기 위해 예약하는 프로비저닝된 처리량

 

long

리전 (producer)

DDB 클라이언트가 작업해야 하는 리전

 

문자열

writeCapacity (producer)

테이블에 리소스를 작성하기 위해 예약된 예약된 처리량

 

long

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

accesskey (보안)

Amazon AWS Access Key

 

문자열

secretKey (security)

Amazon AWS Secret Key

 

문자열

필수 DDB 구성 요소 옵션

Amazon의 DynamoDB에 액세스하려면 레지스트리 또는 accessKey 및 secretKey에 amazonDDBClient를 제공해야 합니다.

22.3. 사용법

22.3.1. DDB 생산자가 평가한 메시지 헤더

Expand
header유형설명

CamelAwsDdbBatchItems

Map<String, KeysAndAttributes>

기본 키로 가져올 테이블 이름 및 해당 항목의 맵입니다.

CamelAwsDdbTableName

문자열

이 작업의 테이블 이름입니다.

CamelAwsDdbKey

테이블의 각 항목을 고유하게 식별하는 기본 키입니다. Camel 2.16.0에서 이 헤더의 유형은 Map<String, AttributeValue>이며 키가 아닙니다.

CamelAwsDdbReturnValues

문자열

수정되거나 이후에 속성 이름-값 쌍을 가져오려면 이 매개변수를 사용합니다(NONE, ALL_OLD, UPDATED_OLD, ALL_NEW, UPDATED_NEW).

CamelAwsDdbUpdateCondition

Map<String, ExpectedAttributeValue>

조건부 수정에 대한 특성을 지정합니다.Specifies an attribute for a conditional modification.

CamelAwsDdbAttributeNames

collection<String>

특성 이름을 지정하지 않으면 모든 속성이 반환됩니다.

CamelAwsDdbConsistentRead

부울

true로 설정하면 일관된 읽기가 발행되고, 그렇지 않으면 결국 일관성이 유지됩니다.

CamelAwsDdbIndexName

문자열

설정된 경우 쿼리 작업의 보조 인덱스로 사용됩니다.If set will be used as Secondary Index for Query operation.

CamelAwsDdbItem

Map<String, AttributeValue>

항목의 특성 맵이며 항목을 정의하는 기본 키 값을 포함해야 합니다.

CamelAwsDdbExactCount

부울

true로 설정하면 Amazon DynamoDB에서 일치하는 항목 목록과 해당 속성 목록 대신 쿼리 매개변수와 일치하는 총 항목 수를 반환합니다. Camel 2.16.0에서 이 헤더는 더 이상 존재하지 않습니다.

CamelAwsDdbKeyConditions

map<String, Condition>

Camel 2.16.0에서. 이 헤더는 쿼리에 대한 선택 기준을 지정하고 두 개의 기존 헤더 CamelAwsDdbHashKeyValueCamelAwsDdbScanRangeKeyCondition을 병합합니다.

CamelAwsDdbStartKey

이전 쿼리를 계속할 항목의 기본 키입니다.Primary key of the item from which to continue an earlier query.

CamelAwsDdbHashKeyValue

AttributeValue

복합 기본 키의 해시 구성 요소 값입니다. Camel 2.16.0에서 이 헤더는 더 이상 존재하지 않습니다.

CamelAwsDdbLimit

정수

반환할 최대 항목 수입니다.

CamelAwsDdbScanRangeKeyCondition

상태

쿼리에 사용할 특성 값 및 비교 연산자의 컨테이너입니다.Camel 2.16.0에서 이 헤더는 더 이상 존재하지 않습니다.

CamelAwsDdbScanIndexForward

부울

인덱스의 정방향 또는 후방향 traversal을 지정합니다.

CamelAwsDdbScanFilter

map<String, Condition>

검사 결과를 평가하고 원하는 값만 반환합니다.

CamelAwsDdbUpdateValues

Map<String, AttributeValueUpdate>

특성 이름을 새 값에 매핑하고 업데이트에 대한 작업.

22.3.2. BatchGetItems 작업 중 설정된 메시지 헤더

Expand
header유형설명

CamelAwsDdbBatchResponse

Map<String,BatchResponse>

테이블 이름 및 테이블의 각 항목 속성.

CamelAwsDdbUnprocessedKeys

Map<String,KeysAndAttributes>

현재 응답으로 처리되지 않은 테이블 및 해당 키의 맵을 포함합니다.

22.3.3. DeleteItem 작업 중 메시지 헤더 설정

Expand
header유형설명

CamelAwsDdbAttributes

Map<String, AttributeValue>

작업에서 반환된 속성 목록입니다.

22.3.4. DeleteTable 작업 중 메시지 헤더 설정

Expand
header유형설명

CamelAwsDdbProvisionedThroughput

  

ProvisionedThroughputDescription

 

이 테이블에 대한 ProvisionedThroughput 속성의 값입니다.

CamelAwsDdbCreationDate

날짜

이 테이블의 DateTime입니다.

CamelAwsDdbTableItemCount

long

이 테이블에 대한 항목 수입니다.

CamelAwsDdbKeySchema

KeySchema

이 테이블의 기본 키를 식별하는 KeySchema입니다. Camel 2.16.0에서 이 헤더의 유형은 KeySchema가 아닌 List<KeySchemaElement>입니다.

CamelAwsDdbTableName

문자열

테이블 이름입니다.

CamelAwsDdbTableSize

long

테이블 크기(바이트)입니다.

CamelAwsDdbTableStatus

문자열

표의 상태: CREATING, UPDATING, DELETING, ACTIVE

22.3.5. DescribeTable 작업 중 메시지 헤더 설정

Expand
header유형설명

CamelAwsDdbProvisionedThroughput

{{ProvisionedThroughputDescription}}

이 테이블에 대한 ProvisionedThroughput 속성의 값입니다.

CamelAwsDdbCreationDate

날짜

이 테이블의 DateTime입니다.

CamelAwsDdbTableItemCount

long

이 테이블에 대한 항목 수입니다.

CamelAwsDdbKeySchema

{{KeySchema}}

이 테이블의 기본 키를 식별하는 KeySchema입니다. Camel 2.16.0에서 이 헤더의 유형은 KeySchema가 아닌 List<KeySchemaElement>입니다.

CamelAwsDdbTableName

문자열

테이블 이름입니다.

CamelAwsDdbTableSize

long

테이블 크기(바이트)입니다.

CamelAwsDdbTableStatus

문자열

표의 상태: CREATING, UPDATING, DELETING, ACTIVE

CamelAwsDdbReadCapacity

long

이 테이블의 ReadCapacityUnits 속성입니다.

CamelAwsDdbWriteCapacity

long

이 테이블의 WriteCapacityUnits 속성입니다.

22.3.6. GetItem 작업 중 메시지 헤더 설정

Expand
header유형설명

CamelAwsDdbAttributes

Map<String, AttributeValue>

작업에서 반환된 속성 목록입니다.

22.3.7. PutItem 작업 중 설정된 메시지 헤더

Expand
header유형설명

CamelAwsDdbAttributes

Map<String, AttributeValue>

작업에서 반환된 속성 목록입니다.

22.3.8. 쿼리 작업 중 메시지 헤더 설정

Expand
header유형설명

CamelAwsDdbItems

List<java.util.Map<String,AttributeValue>>

작업에서 반환된 속성 목록입니다.

CamelAwsDdbLastEvaluatedKey

이전 결과 집합을 포함하여 쿼리 작업이 중지된 항목의 기본 키입니다.

CamelAwsDdbConsumedCapacity

double

작업 중 사용되는 테이블의 프로비저닝된 처리량의 용량 단위 수입니다.

CamelAwsDdbCount

정수

응답의 항목 수입니다.

22.3.9. Scan 작업 중 메시지 헤더 설정

Expand
header유형설명

CamelAwsDdbItems

List<java.util.Map<String,AttributeValue>>

작업에서 반환된 속성 목록입니다.

CamelAwsDdbLastEvaluatedKey

이전 결과 집합을 포함하여 쿼리 작업이 중지된 항목의 기본 키입니다.

CamelAwsDdbConsumedCapacity

double

작업 중 사용되는 테이블의 프로비저닝된 처리량의 용량 단위 수입니다.

CamelAwsDdbCount

정수

응답의 항목 수입니다.

CamelAwsDdbScannedCount

정수

필터를 적용하기 전에 전체 검사의 항목 수입니다.

22.3.10. UpdateItem 작업 중 메시지 헤더 설정

Expand
header유형설명

CamelAwsDdbAttributes

Map<String, AttributeValue>

작업에서 반환된 속성 목록입니다.

22.3.11. 고급 AmazonDynamoDB 구성

AmazonDynamoDB 인스턴스 구성을 더 많이 제어해야 하는 경우 고유한 인스턴스를 생성하고 URI에서 해당 인스턴스를 참조할 수 있습니다.

from("direct:start")
.to("aws-ddb://domainName?amazonDDBClient=#client");

#client 는 레지스트리의 AmazonDynamoDB 를 나타냅니다.

예를 들어 Camel 애플리케이션이 방화벽 뒤에서 실행 중인 경우입니다.

AWSCredentials awsCredentials = new BasicAWSCredentials("myAccessKey", "mySecretKey");
ClientConfiguration clientConfiguration = new ClientConfiguration();
clientConfiguration.setProxyHost("http://myProxyHost");
clientConfiguration.setProxyPort(8080);

AmazonDynamoDB client = new AmazonDynamoDBClient(awsCredentials, clientConfiguration);

registry.bind("client", client);

22.4. 종속 항목

Maven 사용자는 다음 종속성을 pom.xml에 추가해야 합니다.

pom.xml

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-aws</artifactId>
    <version>${camel-version}</version>
</dependency>

여기서 ${camel-version}은 Camel의 실제 버전(2.10 이상)으로 교체해야 합니다.

22.5. 예를 들면 다음과 같습니다.

  • Camel 구성
  • 구성 요소
  • 끝점
  • 시작하기
  • AWS 구성 요소

23장. AWS DynamoDB Streams Component

Camel 버전 2.17로 사용 가능

DynamoDB Stream 구성 요소는 Amazon DynamoDB Stream 서비스에서 제공하는 메시지 수신을 지원합니다.

사전 요구 사항

유효한 Amazon Web Services 개발자 계정이 있어야 하며 Amazon DynamoDB Streams를 사용하려면 가입해야 합니다. 자세한 내용은 AWS DynamoDB에서 확인할 수 있습니다.

23.1. URI 형식

aws-ddbstream://table-name[?options]

스트림을 사용하기 전에 생성해야 합니다.
다음 형식 ?options=value&option2=value&…​로 URI에 쿼리 옵션을 추가할 수 있습니다.

23.2. URI 옵션

AWS DynamoDB Streams 구성 요소는 아래 나열된 5 가지 옵션을 지원합니다.

Expand
이름설명기본값유형

구성 (고급)

AWS DDB 스트림 기본 구성

 

DdbStreamConfiguration

액세스 키 (consumer)

Amazon AWS Access Key

 

문자열

secretKey (consumer)

Amazon AWS Secret Key

 

문자열

리전 (consumer)

Amazon AWS Region

 

문자열

resolveProperty Placeholders (advanced)

구성 요소가 시작 시 자체적으로 속성 자리 표시자를 확인해야 하는지 여부입니다. String 유형의 속성만 속성 자리 표시자를 사용할 수 있습니다.Only properties which are of String type can use property placeholders.

true

boolean

AWS DynamoDB Streams 엔드포인트는 URI 구문을 사용하여 구성됩니다.

aws-ddbstream:tableName

다음 경로 및 쿼리 매개변수를 사용합니다.

23.2.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

tableName

필수 dynamodb 테이블의 이름

 

문자열

23.2.2. 쿼리 매개변수(28 매개변수):

Expand
이름설명기본값유형

AmazonDynamoDbStreams 클라이언트 (consumer)

이 끝점에 대한 모든 요청에 사용하는 Amazon DynamoDB 클라이언트

 

AmazonDynamoDBStreams

bridgeErrorHandler (consumer)

소비자를 Camel 라우팅 오류 처리기에 브리징할 수 있습니다. 이는 소비자가 들어오는 메시지를 선택하는 동안 예외가 발생한 것을 의미하며, 이제 메시지로 처리되어 라우팅 오류 처리기에 의해 처리됩니다. 기본적으로 소비자는 org.apache.camel.spi.ExceptionHandler를 사용하여 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

false

boolean

iteratorType (consumer)

DynaboDB 스트림에서 레코드 가져오기를 시작하는 위치를 정의합니다. TRIM_HORIZON을 사용하면 스트림이 실시간으로 감지되기 전에 상당한 지연을 일으킬 수 있습니다. AT,AFTER_SEQUENCE_NUMBER를 사용하는 경우 sequenceNumberProvider를 제공해야 합니다.

최신

ShardIteratorType

maxResultsPerRequest (consumer)

각 폴링에서 가져올 최대 레코드 수

 

int

proxyHost (consumer)

DDBStreams 클라이언트를 인스턴스화할 때 프록시 호스트를 정의하기 위해

 

문자열

proxyPort (consumer)

DDBStreams 클라이언트를 인스턴스화할 때 프록시 포트를 정의하려면To define a proxy port when instantiating the DDBStreams client

 

정수

리전 (consumer)

DDBStreams 클라이언트가 작동해야 하는 리전

 

문자열

sendEmptyMessageWhenIdle (consumer)

폴링 소비자가 파일을 폴링하지 않은 경우 이 옵션을 활성화하여 빈 메시지( 본문 없음)를 대신 보낼 수 있습니다.

false

boolean

sequenceNumberProvider (consumer)

두 ShardIteratorType.AT,AFTER_SEQUENCE_NUMBER iterator 유형 중 하나를 사용할 때 시퀀스 번호 공급자입니다. 레지스트리 참조 또는 리터럴 시퀀스 번호일 수 있습니다.

 

SequenceNumberProvider

예외 처리기 (consumer)

소비자가 사용자 지정 ExceptionHandler를 사용하도록 하려면 다음을 수행합니다. bridgeErrorHandler 옵션이 활성화되어 있는지 확인한 후 이 옵션이 사용되지 않습니다. 기본적으로 소비자는 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

 

ExceptionHandler

exchangePattern (consumer)

소비자가 교환을 생성할 때 교환 패턴을 설정합니다.

 

ExchangePattern

pollStrategy (consumer)

플러그형 org.apache.camel.PollingConsumerPollingStrategy를 사용하면 Camel에서 Exchange를 생성하고 라우팅하기 전에 폴링 작업 중에 일반적으로 발생한 오류 처리를 제어하는 사용자 정의 구현을 제공할 수 있습니다.

 

PollingConsumerPoll Strategy

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

backoffErrorThreshold (scheduler)

백오프Multipler를 시작하기 전에 발생해야 하는 후속 오류 폴링(일부 오류 발생) 수입니다.

 

int

backoffIdleThreshold (scheduler)

백오프Multipler를 시작하기 전에 발생해야 하는 후속 유휴 폴링 수입니다.

 

int

backoffMultiplier (scheduler)

예약된 폴링 소비자 백오프가 연속된 여러 개의 유휴/errors가 있는 경우 해당 행에 사용할 수 있습니다. multiplier는 다음 실제 시도가 다시 발생하기 전에 건너뛸 폴링 수입니다. 이 옵션을 사용하는 경우 backoffIdleThreshold 및/또는 backoffErrorThreshold도 구성해야 합니다.

 

int

지연 (scheduler)

다음 폴링보다 밀리초입니다. 60초(60초), 5m30초(5분 및 30초) 및 1h(1시간)와 같은 단위를 사용하여 시간 값을 지정할 수도 있습니다.

500

long

greedy (scheduler)

greedy가 활성화된 경우 ScheduledPollConsumer는 이전 실행이 1개 이상의 메시지를 폴링하면 즉시 다시 실행됩니다.

false

boolean

initialDelay (scheduler)

첫 번째 폴링이 시작되기 전까지의 밀리초입니다. 60초(60초), 5m30초(5분 및 30초) 및 1h(1시간)와 같은 단위를 사용하여 시간 값을 지정할 수도 있습니다.

1000

long

runLoggingLevel (scheduler)

소비자는 폴링할 때 시작/완료 로그 행을 기록합니다. 이 옵션을 사용하면 로깅 수준을 구성할 수 있습니다.

TRACE

LoggingLevel

scheduledExecutorService (scheduler)

소비자에 사용할 사용자 지정/공유 스레드 풀을 구성할 수 있습니다. 기본적으로 각 소비자는 자체 스레드 스레드 풀이 있습니다.

 

ScheduledExecutor Service

스케줄러 (scheduler)

camel-spring 또는 camel-quartz2 구성 요소에서 cron 스케줄러를 사용하려면

none

ScheduledPollConsumer Scheduler

스케줄러 속성 (scheduler)

사용자 지정 스케줄러 또는 Quartz2, Spring 기반 스케줄러를 사용할 때 추가 속성을 구성하려면 다음을 수행합니다.

 

map

StartScheduler (scheduler)

스케줄러가 자동으로 시작되어야 하는지 여부입니다.

true

boolean

timeUnit (scheduler)

initialDelay 및 지연 옵션의 시간 단위입니다.

밀리초

TimeUnit

UseFixedDelay (scheduler)

고정 지연 또는 고정 속도가 사용되는 경우 제어합니다. 자세한 내용은 JDK의 ScheduledExecutorService를 참조하십시오.

true

boolean

accesskey (보안)

Amazon AWS Access Key

 

문자열

secretKey (security)

Amazon AWS Secret Key

 

문자열

필수 DynampDBStream 구성 요소 옵션

레지스트리에 프록시 및 관련 자격 증명이 구성된 AmazonDynamoDbStreamsClient를 제공해야 합니다.

23.3. 시퀀스 번호

리터럴 문자열을 시퀀스 번호로 제공하거나 레지스트리에 빈을 제공할 수 있습니다. 빈을 사용하는 예는 현재 위치를 변경 피드에 저장하고 Camel 시작 시 복원하는 예입니다.

describe-streams 결과에서 가장 큰 시퀀스 수보다 큰 시퀀스 번호를 제공하는 것은 AWS 호출이 HTTP 400을 반환하므로 오류입니다.

23.4. batch Consumer

이 구성 요소는 배치 소비자를 구현합니다.

예를 들어 이 배치에 있는 메시지 수를 알 수 있으며, 예를 들어 집계에서 이 메시지 수를 집계할 수 있습니다.

23.5. 사용법

23.5.1. AmazonDynamoDBStreamsClient configuration

AmazonDynamoDBStreamsClient 인스턴스를 생성하고 레지스트리에 바인딩해야 합니다.

ClientConfiguration clientConfiguration = new ClientConfiguration();
clientConfiguration.setProxyHost("http://myProxyHost");
clientConfiguration.setProxyPort(8080);

Region region = Region.getRegion(Regions.fromName(region));
region.createClient(AmazonDynamoDBStreamsClient.class, null, clientConfiguration);
// the 'null' here is the AWSCredentialsProvider which defaults to an instance of DefaultAWSCredentialsProviderChain

registry.bind("kinesisClient", client);

23.5.2. AWS 자격 증명 제공

새 ClientConfiguration 인스턴스를 생성할 때 기본값인 DefaultAWSCredentialsProviderChain 을 사용하여 인증 정보를 가져오는 것이 좋지만, createClient(…​)를 호출할 때 다른 AWSCredentialsProvider 를 지정할 수 있습니다.

23.6. Downtime으로 속일 수 있습니다.

23.6.1. AWS DynamoDB Streams 중단 24시간 미만

소비자는 마지막으로 표시된 시퀀스 번호( CAMEL-9515용으로 구현됨)에서 다시 시작되므로, 서비스 중단에 innovation 자체도 포함되지 않은 한 빠른 연속으로 이벤트 홍수를 받아야 합니다.

23.6.2. AWS DynamoDB Streams의 24시간 이상 중단

AWS는 변경 사항의 24 시간 가치만 유지한다는 점을 감안할 때 어떤 완화 조치가 있는지에 관계없이 변경 이벤트가 누락됩니다.

23.7. 종속 항목

Maven 사용자는 다음 종속성을 pom.xml에 추가해야 합니다.

pom.xml

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-aws</artifactId>
    <version>${camel-version}</version>
</dependency>

여기서 ${camel-version}은 Camel의 실제 버전(2.7 이상)으로 교체해야 합니다.

23.8. 예를 들면 다음과 같습니다.

  • Camel 구성
  • 구성 요소
  • 끝점
  • 시작하기
  • AWS Component
    +

24장. AWS EC2 Component

Camel 버전 2.16에서 사용 가능

EC2 구성 요소는 AWS EC2 인스턴스를 생성, 실행, 시작, 중지 및 종료합니다.

사전 요구 사항

유효한 Amazon Web Services 개발자 계정이 있어야 하며 Amazon EC2를 사용하려면 가입해야 합니다. 자세한 내용은 Amazon EC2 에서 확인할 수 있습니다.

24.1. URI 형식

aws-ec2://label[?options]

다음 형식 ?options=value&option2=value&…​로 URI에 쿼리 옵션을 추가할 수 있습니다.

24.2. URI 옵션

AWS EC2 구성 요소는 아래에 나열된 5 가지 옵션을 지원합니다.

Expand
이름설명기본값유형

구성 (고급)

AWS EC2 기본 구성

 

EC2Configuration

리전 (producer)

EC2 클라이언트가 작업해야 하는 리전

 

문자열

accesskey (producer)

Amazon AWS Access Key

 

문자열

secretKey (producer)

Amazon AWS Secret Key

 

문자열

resolveProperty Placeholders (advanced)

구성 요소가 시작 시 자체적으로 속성 자리 표시자를 확인해야 하는지 여부입니다. String 유형의 속성만 속성 자리 표시자를 사용할 수 있습니다.Only properties which are of String type can use property placeholders.

true

boolean

AWS EC2 엔드 포인트는 URI 구문을 사용하여 구성됩니다.

aws-ec2:label

다음 경로 및 쿼리 매개변수를 사용합니다.

24.2.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

label

필수 논리 이름

 

문자열

24.2.2. 쿼리 매개변수 (8 매개변수:

Expand
이름설명기본값유형

accesskey (producer)

Amazon AWS Access Key

 

문자열

AmazonEc2Client (producer)

기존 구성된 AmazonEC2Client를 클라이언트로 사용하려면

 

AmazonEC2Client

작업 (producer)

수행해야 하는 작업입니다.The operation to perform. createAndRunInstances, startInstances, stopInstances, terminateInstances, describeInstances, describeInstances, rebootInstances, monitorInstances, unmonitorInstances, createTags 또는 deleteTags일 수 있습니다.

 

EC2Operations

proxyHost (producer)

EC2 클라이언트를 인스턴스화할 때 프록시 호스트를 정의하기 위해

 

문자열

proxyPort (producer)

EC2 클라이언트를 인스턴스화할 때 프록시 포트 정의

 

정수

리전 (producer)

EC2 클라이언트가 작업해야 하는 리전

 

문자열

secretKey (producer)

Amazon AWS Secret Key

 

문자열

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

필수 EC2 구성 요소 옵션

Amazon EC2 서비스에 액세스하려면 레지스트리 또는 accessKey 및 secretKey에 amazonEc2Client를 제공해야 합니다.

24.3. 사용법

24.3.1. EC2 생산자가 평가한 메시지 헤더

Expand
header유형설명

CamelAwsEC2ImageId

문자열

AWS Marketplace의 이미지 ID

CamelAwsEC2InstanceType

com.amazonaws.services.ec2.model.InstanceType

만들고 실행하려는 인스턴스 유형입니다.

CamelAwsEC2Operation

문자열

수행하려는 작업

CamelAwsEC2InstanceMinCount

int

실행하려는 최소 인스턴스 수입니다.

CamelAwsEC2InstanceMaxCount

int

실행할 최대 인스턴스 수입니다.

CamelAwsEC2InstanceMonitoring

부울

실행 중인 인스턴스를 모니터링하려면 정의

CamelAwsEC2InstanceEbsOptimized

부울

생성 인스턴스가 EBS I/O에 최적화되었는지 여부를 정의합니다.

CamelAwsEC2InstanceSecurityGroups

소프트웨어 컬렉션

인스턴스에 연결할 보안 그룹

CamelAwsEC2InstancesIds

소프트웨어 컬렉션

시작, 중지, 설명 및 종료 작업을 실행할 인스턴스 IDS 컬렉션입니다.

CamelAwsEC2InstancesTags

소프트웨어 컬렉션

EC2 리소스에서 추가하거나 제거할 태그 컬렉션입니다.

종속 항목

Maven 사용자는 다음 종속성을 pom.xml에 추가해야 합니다.

pom.xml

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-aws</artifactId>
    <version>${camel-version}</version>
</dependency>

여기서 ${camel-version}은 Camel의 실제 버전(2.16 이상)으로 교체해야 합니다.

24.4. 예를 들면 다음과 같습니다.

  • Camel 구성
  • 구성 요소
  • 끝점
  • 시작하기
  • AWS 구성 요소

25장. AWS IAM 구성 요소

Camel 버전 2.23에서 사용 가능

KMS 구성 요소는 AWS IAM 인스턴스를 생성, 실행, 시작, 중지 및 종료합니다.

사전 요구 사항

유효한 Amazon Web Services 개발자 계정이 있고 Amazon IAM을 사용하려면 가입해야 합니다. 자세한 내용은 Amazon IAM 에서 확인할 수 있습니다.

25.1. URI 형식

aws-kms://label[?options]

다음 형식 ?options=value&option2=value&…​로 URI에 쿼리 옵션을 추가할 수 있습니다.

25.2. URI 옵션

AWS IAM 구성 요소는 아래에 나열된 5 가지 옵션을 지원합니다.

Expand
이름설명기본값유형

구성 (고급)

AWS IAM 기본 구성

 

iamConfiguration

accesskey (producer)

Amazon AWS Access Key

 

문자열

secretKey (producer)

Amazon AWS Secret Key

 

문자열

리전 (producer)

IAM 클라이언트가 작동해야 하는 리전

 

문자열

resolveProperty Placeholders (advanced)

구성 요소가 시작 시 자체적으로 속성 자리 표시자를 확인해야 하는지 여부입니다. String 유형의 속성만 속성 자리 표시자를 사용할 수 있습니다.Only properties which are of String type can use property placeholders.

true

boolean

AWS IAM 끝점은 URI 구문을 사용하여 구성됩니다.

aws-iam:label

다음 경로 및 쿼리 매개변수를 사용합니다.

25.2.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

label

필수 논리 이름

 

문자열

25.2.2. 쿼리 매개변수 (8 매개변수:

Expand
이름설명기본값유형

accesskey (producer)

Amazon AWS Access Key

 

문자열

iamClient (producer)

기존 구성된 AWS IAM을 클라이언트로 사용하려면

 

AmazonIdentity ManagementClient

작업 (producer)

필수 작업 수행

 

IAMOperations

proxyHost (producer)

KMS 클라이언트를 인스턴스화할 때 프록시 호스트를 정의하기 위해

 

문자열

proxyPort (producer)

KMS 클라이언트를 인스턴스화할 때 프록시 포트를 정의하려면

 

정수

리전 (producer)

KMS 클라이언트가 작업해야 하는 리전

 

문자열

secretKey (producer)

Amazon AWS Secret Key

 

문자열

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

25.3. Spring Boot Auto-Configuration

구성 요소는 아래 나열된 12 가지 옵션을 지원합니다.

Expand
이름설명기본값유형

camel.component.aws-iam.access-key

Amazon AWS Access Key

 

문자열

camel.component.aws-iam.configuration.access-key

Amazon AWS Access Key

 

문자열

camel.component.aws-iam.configuration.iam-client

기존 구성된 AWS IAM을 클라이언트로 사용하려면

 

AmazonIdentity ManagementClient

camel.component.aws-iam.configuration.operation

수행할 작업

 

IAMOperations

camel.component.aws-iam.configuration.proxy-host

KMS 클라이언트를 인스턴스화할 때 프록시 호스트를 정의하기 위해

 

문자열

camel.component.aws-iam.configuration.proxy-port

KMS 클라이언트를 인스턴스화할 때 프록시 포트를 정의하려면

 

정수

camel.component.aws-iam.configuration.region

KMS 클라이언트가 작업해야 하는 리전

 

문자열

camel.component.aws-iam.configuration.secret-key

Amazon AWS Secret Key

 

문자열

camel.component.aws-iam.enabled

aws-iam 구성 요소의 자동 구성을 활성화할지 여부입니다. 이는 기본적으로 활성화되어 있습니다.

 

부울

camel.component.aws-iam.region

IAM 클라이언트가 작동해야 하는 리전

 

문자열

camel.component.aws-iam.resolve-property-placeholders

구성 요소가 시작 시 자체적으로 속성 자리 표시자를 확인해야 하는지 여부입니다. String 유형의 속성만 속성 자리 표시자를 사용할 수 있습니다.Only properties which are of String type can use property placeholders.

true

부울

camel.component.aws-iam.secret-key

Amazon AWS Secret Key

 

문자열

필수 IAM 구성 요소 옵션

Amazon IAM 서비스에 액세스하려면 레지스트리 또는 accessKey 및 secretKey에 amazonKmsClient를 제공해야 합니다.

25.4. 사용법

25.4.1. IAM 생산자가 평가한 메시지 헤더

Expand
header유형설명

CamelAwsIAMOperation

문자열

수행하려는 작업

CamelAwsIAMUsername

문자열

관리할 사용자의 사용자 이름

CamelAwsIAMAccessKeyID

문자열

관리하려는 accessKey

CamelAwsIAMAccessKeyStatus

문자열

설정할 AccessKey의 Status(상태)는 활성 상태이고 비활성입니다.

25.4.2. IAM Producer 작업

Camel-AWS IAM 구성 요소는 생산자 측에서 다음과 같은 작업을 제공합니다.

  • listAccessKeys
  • createUser
  • deleteUser
  • listUsers
  • getUser
  • createAccessKey
  • deleteAccessKey
  • updateAccessKey

종속 항목

Maven 사용자는 다음 종속성을 pom.xml에 추가해야 합니다.

pom.xml

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-aws</artifactId>
    <version>${camel-version}</version>
</dependency>

여기서 ${camel-version}은 Camel의 실제 버전(2.16 이상)으로 교체해야 합니다.

25.5. 예를 들면 다음과 같습니다.

  • Camel 구성
  • 구성 요소
  • 끝점
  • 시작하기
  • AWS 구성 요소

26장. AWS Kinesis Component

Camel 버전 2.17로 사용 가능

Kinesis 구성 요소는 Amazon Kinesis 서비스에서 메시지를 수신하고 메시지를 보낼 수 있도록 지원합니다.

사전 요구 사항

유효한 Amazon Web Services 개발자 계정이 있어야 하며 Amazon Kinesis를 사용하려면 가입해야 합니다. 자세한 내용은 AWS Kinesis에서 확인할 수 있습니다.

26.1. URI 형식

aws-kinesis://stream-name[?options]

스트림을 사용하기 전에 생성해야 합니다.
다음 형식 ?options=value&option2=value&…​로 URI에 쿼리 옵션을 추가할 수 있습니다.

26.2. URI 옵션

AWS Kinesis 구성 요소는 아래에 나열된 5 가지 옵션을 지원합니다.

Expand
이름설명기본값유형

구성 (고급)

AWS S3 기본 구성

 

KinesisConfiguration

accesskey (공용)

Amazon AWS Access Key

 

문자열

secretKey (common)

Amazon AWS Secret Key

 

문자열

region (공용)

Amazon AWS Region

 

문자열

resolveProperty Placeholders (advanced)

구성 요소가 시작 시 자체적으로 속성 자리 표시자를 확인해야 하는지 여부입니다. String 유형의 속성만 속성 자리 표시자를 사용할 수 있습니다.Only properties which are of String type can use property placeholders.

true

boolean

AWS Kinesis 끝점은 URI 구문을 사용하여 구성됩니다.

aws-kinesis:streamName

다음 경로 및 쿼리 매개변수를 사용합니다.

26.2.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

streamName

스트림의 필수 이름입니다.

 

문자열

26.2.2. 쿼리 매개변수(30 매개변수):

Expand
이름설명기본값유형

AmazonKinesisClient (일반)

이 끝점에 대한 모든 요청에 사용할 Amazon Kinesis 클라이언트

 

AmazonKinesis

proxyHost (일반)

DDBStreams 클라이언트를 인스턴스화할 때 프록시 호스트를 정의하기 위해

 

문자열

proxyPort (공용)

DDBStreams 클라이언트를 인스턴스화할 때 프록시 포트를 정의하려면To define a proxy port when instantiating the DDBStreams client

 

정수

region (공용)

Kinesis 클라이언트가 작동해야 하는 리전

 

문자열

bridgeErrorHandler (consumer)

소비자를 Camel 라우팅 오류 처리기에 브리징할 수 있습니다. 이는 소비자가 들어오는 메시지를 선택하는 동안 예외가 발생한 것을 의미하며, 이제 메시지로 처리되어 라우팅 오류 처리기에 의해 처리됩니다. 기본적으로 소비자는 org.apache.camel.spi.ExceptionHandler를 사용하여 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

false

boolean

iteratorType (consumer)

records 가져오기를 시작하기 위한 Kinesis 스트림에서 위치를 정의합니다.

TRIM_HORIZON

ShardIteratorType

maxResultsPerRequest (consumer)

각 폴링에서 가져올 최대 레코드 수

1

int

sendEmptyMessageWhenIdle (consumer)

폴링 소비자가 파일을 폴링하지 않은 경우 이 옵션을 활성화하여 빈 메시지( 본문 없음)를 대신 보낼 수 있습니다.

false

boolean

sequenceNumber (consumer)

폴링을 시작할 순서 번호입니다. iteratorType이 AFTER_SEQUENCE_NUMBER 또는 AT_SEQUENCE_NUMBER로 설정된 경우 필수 항목입니다.

 

문자열

shardClosed (consumer)

shard가 종료된 경우 수행할 동작을 정의합니다. 가능한 값은 무시, 자동 및 fail. 메시지를 무시합니다. 메시지가 기록되고 소비자가 처음부터 다시 시작됩니다. 자동 로깅의 경우 소비자는 로깅이 없으며 소비자가 처음부터 시작된 경우 ReachedClosedStateException이 발생합니다.

Ignore

KinesisShardClosed StrategyEnum

shardId (consumer)

레코드를 가져올 Kinesis 스트림에서 어떤 shardId를 정의합니다.

 

문자열

예외 처리기 (consumer)

소비자가 사용자 지정 ExceptionHandler를 사용하도록 하려면 다음을 수행합니다. bridgeErrorHandler 옵션이 활성화되어 있는지 확인한 후 이 옵션이 사용되지 않습니다. 기본적으로 소비자는 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

 

ExceptionHandler

exchangePattern (consumer)

소비자가 교환을 생성할 때 교환 패턴을 설정합니다.

 

ExchangePattern

pollStrategy (consumer)

플러그형 org.apache.camel.PollingConsumerPollingStrategy를 사용하면 Camel에서 Exchange를 생성하고 라우팅하기 전에 폴링 작업 중에 일반적으로 발생한 오류 처리를 제어하는 사용자 정의 구현을 제공할 수 있습니다.

 

PollingConsumerPoll Strategy

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

backoffErrorThreshold (scheduler)

백오프Multipler를 시작하기 전에 발생해야 하는 후속 오류 폴링(일부 오류 발생) 수입니다.

 

int

backoffIdleThreshold (scheduler)

백오프Multipler를 시작하기 전에 발생해야 하는 후속 유휴 폴링 수입니다.

 

int

backoffMultiplier (scheduler)

예약된 폴링 소비자 백오프가 연속된 여러 개의 유휴/errors가 있는 경우 해당 행에 사용할 수 있습니다. multiplier는 다음 실제 시도가 다시 발생하기 전에 건너뛸 폴링 수입니다. 이 옵션을 사용하는 경우 backoffIdleThreshold 및/또는 backoffErrorThreshold도 구성해야 합니다.

 

int

지연 (scheduler)

다음 폴링보다 밀리초입니다. 60초(60초), 5m30초(5분 및 30초) 및 1h(1시간)와 같은 단위를 사용하여 시간 값을 지정할 수도 있습니다.

500

long

greedy (scheduler)

greedy가 활성화된 경우 ScheduledPollConsumer는 이전 실행이 1개 이상의 메시지를 폴링하면 즉시 다시 실행됩니다.

false

boolean

initialDelay (scheduler)

첫 번째 폴링이 시작되기 전까지의 밀리초입니다. 60초(60초), 5m30초(5분 및 30초) 및 1h(1시간)와 같은 단위를 사용하여 시간 값을 지정할 수도 있습니다.

1000

long

runLoggingLevel (scheduler)

소비자는 폴링할 때 시작/완료 로그 행을 기록합니다. 이 옵션을 사용하면 로깅 수준을 구성할 수 있습니다.

TRACE

LoggingLevel

scheduledExecutorService (scheduler)

소비자에 사용할 사용자 지정/공유 스레드 풀을 구성할 수 있습니다. 기본적으로 각 소비자는 자체 스레드 스레드 풀이 있습니다.

 

ScheduledExecutor Service

스케줄러 (scheduler)

camel-spring 또는 camel-quartz2 구성 요소에서 cron 스케줄러를 사용하려면

none

ScheduledPollConsumer Scheduler

스케줄러 속성 (scheduler)

사용자 지정 스케줄러 또는 Quartz2, Spring 기반 스케줄러를 사용할 때 추가 속성을 구성하려면 다음을 수행합니다.

 

map

StartScheduler (scheduler)

스케줄러가 자동으로 시작되어야 하는지 여부입니다.

true

boolean

timeUnit (scheduler)

initialDelay 및 지연 옵션의 시간 단위입니다.

밀리초

TimeUnit

UseFixedDelay (scheduler)

고정 지연 또는 고정 속도가 사용되는 경우 제어합니다. 자세한 내용은 JDK의 ScheduledExecutorService를 참조하십시오.

true

boolean

accesskey (보안)

Amazon AWS Access Key

 

문자열

secretKey (security)

Amazon AWS Secret Key

 

문자열

필수 Kinesis 구성 요소 옵션

레지스트리의 amazonKinesisClient에 프록시 및 관련 자격 증명이 구성되어 있어야 합니다.

26.3. batch Consumer

이 구성 요소는 배치 소비자를 구현합니다.

예를 들어 이 배치에 있는 메시지 수를 알 수 있으며, 예를 들어 집계에서 이 메시지 수를 집계할 수 있습니다.

26.4. 사용법

26.4.1. Kinesis 소비자가 설정한 메시지 헤더

Expand
header유형설명

CamelAwsKinesisSequenceNumber

문자열

레코드의 시퀀스 번호입니다. 이는 API에서 크기가 정의되지 않기 때문에 String으로 표시됩니다. 숫자 유형으로 사용되는 경우 다음을 사용하십시오.

CamelAwsKinesisApproximateArrivalTimestamp

문자열

AWS가 레코드의 도착 시간으로 할당된 시간입니다.

CamelAwsKinesisPartitionKey

문자열

데이터 레코드가 할당되는 스트림의 shard를 식별합니다.

26.4.2. AmazonKinesis 구성

AmazonKinesisClient 인스턴스를 생성하고 레지스트리에 바인딩해야 합니다.

ClientConfiguration clientConfiguration = new ClientConfiguration();
clientConfiguration.setProxyHost("http://myProxyHost");
clientConfiguration.setProxyPort(8080);

Region region = Region.getRegion(Regions.fromName(region));
region.createClient(AmazonKinesisClient.class, null, clientConfiguration);
// the 'null' here is the AWSCredentialsProvider which defaults to an instance of DefaultAWSCredentialsProviderChain

registry.bind("kinesisClient", client);

그런 다음 AmazonKinesisClient를 Amazon KinesisClient URI 옵션에서 참조해야 합니다.

from("aws-kinesis://mykinesisstream?amazonKinesisClient=#kinesisClient")
  .to("log:out?showAll=true");

26.4.3. AWS 자격 증명 제공

새 ClientConfiguration 인스턴스를 생성할 때 기본값인 DefaultAWSCredentialsProviderChain 을 사용하여 인증 정보를 가져오는 것이 좋지만, createClient(…​)를 호출할 때 다른 AWSCredentialsProvider 를 지정할 수 있습니다.

Expand
header유형설명

CamelAwsKinesisPartitionKey

문자열

이 레코드를 저장하기 위해 Kinesis로 전달하는 PartitionKey입니다.

CamelAwsKinesisSequenceNumber

문자열

이 레코드의 시퀀스 번호를 나타내는 선택적 매개 변수입니다.

Expand
header유형설명

CamelAwsKinesisSequenceNumber

문자열

Response Syntax에 정의된 레코드의 시퀀스 번호

CamelAwsKinesisShardId

문자열

레코드가 저장된 shard ID

26.5. 종속 항목

Maven 사용자는 다음 종속성을 pom.xml에 추가해야 합니다.

pom.xml

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-aws</artifactId>
    <version>${camel-version}</version>
</dependency>

여기서 ${camel-version}은 Camel의 실제 버전(2.17 이상)으로 교체해야 합니다.

26.6. 예를 들면 다음과 같습니다.

  • Camel 구성
  • 구성 요소
  • 끝점
  • 시작하기
  • AWS 구성 요소

27장. AWS Kinesis Firehose 구성 요소

Camel 버전 2.19에서 사용 가능

Kinesis Firehose 구성 요소는 Amazon Kinesis Firehose 서비스에 메시지를 보낼 수 있도록 지원합니다.

사전 요구 사항

유효한 Amazon Web Services 개발자 계정이 있어야 하며 Amazon Kinesis Firehose를 사용하려면 가입해야 합니다. 자세한 내용은 AWS Kinesis Firehose에서 확인할 수 있습니다.

27.1. URI 형식

aws-kinesis-firehose://delivery-stream-name[?options]

스트림을 사용하기 전에 생성해야 합니다.
다음 형식 ?options=value&option2=value&…​로 URI에 쿼리 옵션을 추가할 수 있습니다.

27.2. URI 옵션

AWS Kinesis Firehose 구성 요소는 아래 나열된 5 가지 옵션을 지원합니다.

Expand
이름설명기본값유형

구성 (고급)

AWS Kinesis Firehose 기본 구성

 

KinesisFirehose 구성

accesskey (producer)

Amazon AWS Access Key

 

문자열

secretKey (producer)

Amazon AWS Secret Key

 

문자열

리전 (producer)

Amazon AWS Region

 

문자열

resolveProperty Placeholders (advanced)

구성 요소가 시작 시 자체적으로 속성 자리 표시자를 확인해야 하는지 여부입니다. String 유형의 속성만 속성 자리 표시자를 사용할 수 있습니다.Only properties which are of String type can use property placeholders.

true

boolean

AWS Kinesis Firehose 끝점은 URI 구문을 사용하여 구성됩니다.

aws-kinesis-firehose:streamName

다음 경로 및 쿼리 매개변수를 사용합니다.

27.2.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

streamName

스트림의 필수 이름입니다.

 

문자열

27.2.2. 쿼리 매개변수(7 매개변수):

Expand
이름설명기본값유형

AmazonKinesisFirehoseClient (producer)

이 엔드포인트에 대한 모든 요청에 사용할 Amazon Kinesis Firehose 클라이언트

 

AmazonKinesisFirehose

proxyHost (producer)

DDBStreams 클라이언트를 인스턴스화할 때 프록시 호스트를 정의하기 위해

 

문자열

proxyPort (producer)

DDBStreams 클라이언트를 인스턴스화할 때 프록시 포트를 정의하려면To define a proxy port when instantiating the DDBStreams client

 

정수

리전 (producer)

Kinesis 클라이언트가 작동해야 하는 리전

 

문자열

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

accesskey (보안)

Amazon AWS Access Key

 

문자열

secretKey (security)

Amazon AWS Secret Key

 

문자열

필수 Kinesis Firehose 구성 요소 옵션

레지스트리의 amazonKinesisClient에 프록시 및 관련 자격 증명이 구성되어 있어야 합니다.

27.3. 사용법

27.3.1. Amazon Kinesis Firehose 구성

AmazonKinesisClient 인스턴스를 생성하고 레지스트리에 바인딩해야 합니다.

ClientConfiguration clientConfiguration = new ClientConfiguration();
clientConfiguration.setProxyHost("http://myProxyHost");
clientConfiguration.setProxyPort(8080);

Region region = Region.getRegion(Regions.fromName(region));
region.createClient(AmazonKinesisClient.class, null, clientConfiguration);
// the 'null' here is the AWSCredentialsProvider which defaults to an instance of DefaultAWSCredentialsProviderChain

registry.bind("kinesisFirehoseClient", client);

AmazonKinesisFirehoseClient는 Amazon KinesisFirehoseClient 옵션에서 참조해야 합니다.

from("aws-kinesis-firehose://mykinesisdeliverystream?amazonKinesisFirehoseClient=#kinesisClient")
  .to("log:out?showAll=true");

27.3.2. AWS 자격 증명 제공

새 ClientConfiguration 인스턴스를 생성할 때 기본값인 DefaultAWSCredentialsProviderChain 을 사용하여 인증 정보를 가져오는 것이 좋지만, createClient(…​)를 호출할 때 다른 AWSCredentialsProvider 를 지정할 수 있습니다.

Expand
header유형설명

CamelAwsKinesisFirehoseRecordId

문자열

Response Syntax에서 정의된 레코드 ID

27.4. 종속 항목

Maven 사용자는 다음 종속성을 pom.xml에 추가해야 합니다.

pom.xml

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-aws</artifactId>
    <version>${camel-version}</version>
</dependency>

여기서 ${camel-version}은 Camel의 실제 버전(2.19 이상)으로 교체해야 합니다.

27.5. 예를 들면 다음과 같습니다.

  • Camel 구성
  • 구성 요소
  • 끝점
  • 시작하기
  • AWS 구성 요소

28장. AWS KMS 구성 요소

Camel 버전 2.21로 사용 가능

KMS 구성 요소는 AWS KMS 인스턴스를 생성, 실행, 시작, 중지 및 종료합니다.

사전 요구 사항

유효한 Amazon Web Services 개발자 계정이 있어야 하며 Amazon KMS를 사용하려면 가입해야 합니다. 자세한 내용은 Amazon KMS 에서 확인할 수 있습니다.

28.1. URI 형식

aws-kms://label[?options]

다음 형식 ?options=value&option2=value&…​로 URI에 쿼리 옵션을 추가할 수 있습니다.

28.2. URI 옵션

AWS KMS 구성 요소는 아래에 나열된 5 가지 옵션을 지원합니다.

Expand
이름설명기본값유형

구성 (고급)

AWS MQ 기본 구성

 

KMSConfiguration

accesskey (producer)

Amazon AWS Access Key

 

문자열

secretKey (producer)

Amazon AWS Secret Key

 

문자열

리전 (producer)

MQ 클라이언트가 작업해야 하는 리전

 

문자열

resolveProperty Placeholders (advanced)

구성 요소가 시작 시 자체적으로 속성 자리 표시자를 확인해야 하는지 여부입니다. String 유형의 속성만 속성 자리 표시자를 사용할 수 있습니다.Only properties which are of String type can use property placeholders.

true

boolean

AWS KMS 끝점은 URI 구문을 사용하여 구성됩니다.

aws-kms:label

다음 경로 및 쿼리 매개변수를 사용합니다.

28.2.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

label

필수 논리 이름

 

문자열

28.2.2. 쿼리 매개변수 (8 매개변수:

Expand
이름설명기본값유형

accesskey (producer)

Amazon AWS Access Key

 

문자열

kmsClient (producer)

기존 구성된 AWS KMS를 클라이언트로 사용하려면

 

AWSKMS

작업 (producer)

필수 작업 수행

 

KMSOperations

proxyHost (producer)

KMS 클라이언트를 인스턴스화할 때 프록시 호스트를 정의하기 위해

 

문자열

proxyPort (producer)

KMS 클라이언트를 인스턴스화할 때 프록시 포트를 정의하려면

 

정수

리전 (producer)

KMS 클라이언트가 작업해야 하는 리전

 

문자열

secretKey (producer)

Amazon AWS Secret Key

 

문자열

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

필수 KMS 구성 요소 옵션

Amazon KMS 서비스에 액세스하려면 레지스트리 또는 accessKey 및 secretKey에 amazonKmsClient를 제공해야 합니다.

28.3. 사용법

28.3.1. MQ 생산자가 평가한 메시지 헤더

Expand
header유형설명

CamelAwsKMSLimit

정수

listKeys 작업을 수행하는 동안 반환할 키의 제한 수입니다.

CamelAwsKMSOperation

문자열

수행하려는 작업

CamelAwsKMSDescription

문자열

createKey 작업을 수행하는 동안 사용할 주요 설명

CamelAwsKMSKeyId

문자열

ID 키

종속 항목

Maven 사용자는 다음 종속성을 pom.xml에 추가해야 합니다.

pom.xml

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-aws</artifactId>
    <version>${camel-version}</version>
</dependency>

여기서 ${camel-version}은 Camel의 실제 버전(2.16 이상)으로 교체해야 합니다.

28.4. 예를 들면 다음과 같습니다.

  • Camel 구성
  • 구성 요소
  • 끝점
  • 시작하기
  • AWS 구성 요소

29장. AWS Lambda Component

Camel 버전 2.20에서 사용 가능

Lambda 구성 요소는 AWS Lambda 함수를 생성, 가져오기, 나열, 삭제 및 호출할 수 있습니다.

사전 요구 사항

유효한 Amazon Web Services 개발자 계정이 있어야 하며 Amazon Lambda를 사용하려면 가입해야 합니다. 자세한 내용은 Amazon Lambda 에서 확인할 수 있습니다.

Lambda 함수를 생성할 때 최소한 AWSLambdaBasicExecuteRole 정책이 연결된 IAM 역할을 지정해야 합니다.

경고

Lambda는 지역 서비스입니다. S3 버킷과 달리 특정 지역에서 생성된 Lambda 함수는 다른 지역에서 사용할 수 없습니다.

29.1. URI 형식

aws-lambda://functionName[?options]

다음 형식 ?options=value&option2=value&…​로 URI에 쿼리 옵션을 추가할 수 있습니다.

29.2. URI 옵션

AWS Lambda 구성 요소는 아래에 나열된 5 가지 옵션을 지원합니다.

Expand
이름설명기본값유형

구성 (고급)

AWS Lambda 기본 구성

 

LambdaConfiguration

accesskey (producer)

Amazon AWS Access Key

 

문자열

secretKey (producer)

Amazon AWS Secret Key

 

문자열

리전 (producer)

Amazon AWS Region

 

문자열

resolveProperty Placeholders (advanced)

구성 요소가 시작 시 자체적으로 속성 자리 표시자를 확인해야 하는지 여부입니다. String 유형의 속성만 속성 자리 표시자를 사용할 수 있습니다.Only properties which are of String type can use property placeholders.

true

boolean

AWS Lambda 엔드포인트는 URI 구문을 사용하여 구성됩니다.

aws-lambda:function

다음 경로 및 쿼리 매개변수를 사용합니다.

29.2.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

function

Lambda 함수의 필수 이름입니다.

 

문자열

29.2.2. 쿼리 매개변수 (8 매개변수:

Expand
이름설명기본값유형

작업 (producer)

수행해야 하는 작업입니다.The operation to perform. listFunctions, getFunction, createFunction, deleteFunction 또는 invokeFunction일 수 있습니다.

 

LambdaOperations

리전 (producer)

Amazon AWS Region

 

문자열

awsLambdaClient (advanced)

기존 구성된 AwsLambdaClient를 클라이언트로 사용하려면

 

AWSLambda

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

proxyHost (proxy)

Lambda 클라이언트를 인스턴스화할 때 프록시 호스트를 정의하려면

 

문자열

proxyPort (proxy)

Lambda 클라이언트를 인스턴스화할 때 프록시 포트를 정의하려면

 

정수

accesskey (보안)

Amazon AWS Access Key

 

문자열

secretKey (security)

Amazon AWS Secret Key

 

문자열

필수 Lambda 구성 요소 옵션

Amazon Lambda 서비스에 액세스하려면 레지스트리 또는 accessKey 및 secretKey에 awsLambdaClient를 제공해야 합니다.

29.3. 사용법

29.3.1. Lambda Pro에서 평가한 메시지 헤더

Expand
작업header유형설명필수 항목

All

CamelAwsLambdaOperation

문자열

수행할 작업입니다. 쿼리 매개변수로 전달된 덮어쓰기 작업

있음

createFunction

CamelAwsLambdaS3Bucket

문자열

배포 패키지가 포함된 .zip 파일이 저장되는 Amazon S3 버킷 이름입니다. 이 버킷은 Lambda 함수를 생성하는 동일한 AWS 리전에 있어야 합니다.

없음

createFunction

CamelAwsLambdaS3Key

문자열

업로드할 Amazon S3 오브젝트(배포 패키지) 키 이름입니다.

없음

createFunction

CamelAwsLambdaS3ObjectVersion

문자열

업로드할 Amazon S3 오브젝트(배포 패키지) 버전입니다.

없음

createFunction

CamelAwsLambdaZipFile

문자열

zip 파일(배포 패키지)의 로컬 경로입니다. zip 파일의 내용도 메시지 본문에 넣을 수 있습니다.

없음

createFunction

CamelAwsLambdaRole

문자열

Lambda가 함수를 실행할 때 다른 AWS(Amazon Web Services) 리소스에 액세스할 때 있다고 가정합니다.

있음

createFunction

CamelAwsLambdaRuntime

문자열

업로드 중인 Lambda 함수의 런타임 환경(nodejs, nodejs4.3, nodejs6.10, java8, python2.7, python3.6, dotnetcore1.0, odejs4.3-edge)

있음

createFunction

CamelAwsLambdaHandler

문자열

코드 내의 함수는 Lambda가 실행을 시작하기 위해 호출합니다. Node.js의 경우 함수의 module-name.export 값입니다. Java의 경우 package.class-name::handler 또는 package.class-name이 될 수 있습니다.

있음

createFunction

CamelAwsLambdaDescription

문자열

사용자가 제공하는 설명입니다.

없음

createFunction

CamelAwsLambdaTargetArn

문자열

Amazon SQS 큐 또는 Amazon SNS 항목의 대상 ARN(Amazon Resource Name)이 포함된 상위 개체입니다.

없음

createFunction

CamelAwsLambdaMemorySize

정수

함수를 위해 구성한 메모리 크기(MB)입니다. 는 64MB의 배수여야 합니다.

없음

createFunction

CamelAwsLambdaKMSKeyArn

문자열

함수의 환경 변수를 암호화하는 데 사용되는 KMS 키의 ARM(Amazon Resource Name)입니다. 제공되지 않는 경우 AWS Lambda는 기본 서비스 키를 사용합니다.

없음

createFunction

CamelAwsLambdaPublish

부울

이 부울 매개 변수는 AWS Lambda를 요청하여 Lambda 함수를 생성하고 버전을 atomic 작업으로 게시하는 데 사용할 수 있습니다.

없음

createFunction

CamelAwsLambdaTimeout

정수

Lambda가 함수를 종료해야 하는 함수 실행 시간입니다. 기본값은 3초입니다.

없음

createFunction

CamelAwsLambdaTracingConfig

문자열

함수의 추적 설정(Active 또는 PassThrough)입니다.

없음

createFunction

CamelAwsLambdaEnvironmentVariables

Map<String, String>

환경 구성 설정을 나타내는 키-값 쌍입니다.

없음

createFunction

CamelAwsLambdaEnvironmentTags

Map<String, String>

새 기능에 할당된 태그(키-값 쌍) 목록입니다.

없음

createFunction

CamelAwsLambdaSecurityGroupIds

list<String>

Lambda 함수가 VPC의 리소스에 액세스하는 경우 VPC에 있는 하나 이상의 보안 그룹 ID 목록입니다.

없음

createFunction

CamelAwsLambdaSubnetIds

list<String>

Lambda 함수가 VPC의 리소스에 액세스하는 경우 VPC에 있는 하나 이상의 서브넷 ID 목록입니다.

없음

종속 항목

Maven 사용자는 다음 종속성을 pom.xml에 추가해야 합니다.

pom.xml

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-aws</artifactId>
    <version>${camel-version}</version>
</dependency>

여기서 ${camel-version}은 Camel의 실제 버전(2.16 이상)으로 교체해야 합니다.

29.4. 예를 들면 다음과 같습니다.

  • Camel 구성
  • 구성 요소
  • 끝점
  • 시작하기
  • AWS 구성 요소

30장. AWS MQ Component

Camel 버전 2.21로 사용 가능

MQ 구성 요소는 AWS MQ 인스턴스 생성, 실행, 시작, 중지 및 종료를 지원합니다.

사전 요구 사항

유효한 Amazon Web Services 개발자 계정이 있어야 하며 Amazon MQ를 사용하려면 가입해야 합니다. 자세한 내용은 Amazon MQ 에서 확인할 수 있습니다.

30.1. URI 형식

aws-mq://label[?options]

다음 형식 ?options=value&option2=value&…​로 URI에 쿼리 옵션을 추가할 수 있습니다.

30.2. URI 옵션

AWS MQ 구성 요소는 아래에 나열된 5 가지 옵션을 지원합니다.

Expand
이름설명기본값유형

구성 (고급)

AWS MQ 기본 구성

 

MQConfiguration

accesskey (producer)

Amazon AWS Access Key

 

문자열

secretKey (producer)

Amazon AWS Secret Key

 

문자열

리전 (producer)

MQ 클라이언트가 작업해야 하는 리전

 

문자열

resolveProperty Placeholders (advanced)

구성 요소가 시작 시 자체적으로 속성 자리 표시자를 확인해야 하는지 여부입니다. String 유형의 속성만 속성 자리 표시자를 사용할 수 있습니다.Only properties which are of String type can use property placeholders.

true

boolean

AWS MQ 엔드포인트는 URI 구문을 사용하여 구성됩니다.

aws-mq:label

다음 경로 및 쿼리 매개변수를 사용합니다.

30.2.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

label

필수 논리 이름

 

문자열

30.2.2. 쿼리 매개변수 (8 매개변수:

Expand
이름설명기본값유형

accesskey (producer)

Amazon AWS Access Key

 

문자열

AmazonMqClient (producer)

기존 구성된 AmazonMQClient를 클라이언트로 사용하려면

 

AmazonMQ

작업 (producer)

수행해야 하는 작업입니다.The operation to perform. 그것은 listBrokers,createBroker,deleteBroker 일 수 있습니다

 

MQOperations

proxyHost (producer)

MQ 클라이언트를 인스턴스화할 때 프록시 호스트를 정의하기 위해

 

문자열

proxyPort (producer)

MQ 클라이언트를 인스턴스화할 때 프록시 포트 정의

 

정수

리전 (producer)

MQ 클라이언트가 작업해야 하는 리전

 

문자열

secretKey (producer)

Amazon AWS Secret Key

 

문자열

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

필수 EC2 구성 요소 옵션

Amazon EC2 서비스에 액세스하려면 레지스트리 또는 accessKey 및 secretKey에 amazonEc2Client를 제공해야 합니다.

30.3. 사용법

30.3.1. MQ 생산자가 평가한 메시지 헤더

Expand
header유형설명

CamelAwsMQMaxResults

문자열

listBrokers 작업에서 검색해야 하는 결과 수

CamelAwsMQBrokerName

문자열

브로커 이름

CamelAwsMQOperation

문자열

수행하려는 작업

CamelAwsMQBrokerId

문자열

브로커 ID

CamelAwsMQBrokerDeploymentMode

문자열

createBroker 작업의 브로커 배포 모드

종속 항목

Maven 사용자는 다음 종속성을 pom.xml에 추가해야 합니다.

pom.xml

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-aws</artifactId>
    <version>${camel-version}</version>
</dependency>

여기서 ${camel-version}은 Camel의 실제 버전(2.16 이상)으로 교체해야 합니다.

30.4. 예를 들면 다음과 같습니다.

  • Camel 구성
  • 구성 요소
  • 끝점
  • 시작하기
  • AWS 구성 요소

31장. AWS S3 스토리지 서비스 구성 요소

Camel 버전 2.8에서 사용 가능

S3 구성 요소는 Amazon의 S3 서비스에서 objetc를 저장 및 검색할 수 있도록 지원합니다.

사전 요구 사항

유효한 Amazon Web Services 개발자 계정이 있어야 하며 Amazon S3 사용을 위해 등록되어야 합니다. 자세한 내용은 Amazon S3 에서 확인할 수 있습니다.

31.1. URI 형식

aws-s3://bucketNameOrArn[?options]

버킷이 없으면 해당 버킷이 생성됩니다.
다음 형식 ?options=value&option2=value&…​로 URI에 쿼리 옵션을 추가할 수 있습니다.

예를 들어 버킷 helloBucket 에서 hello.txt 파일을 읽으려면 다음 스니펫을 사용합니다.

from("aws-s3:helloBucket?accessKey=yourAccessKey&secretKey=yourSecretKey&prefix=hello.txt")
  .to("file:/var/downloaded");

31.2. URI 옵션

AWS S3 Storage Service 구성 요소는 아래 나열된 5가지 옵션을 지원합니다.

Expand
이름설명기본값유형

구성 (고급)

AWS S3 기본 구성

 

S3Configuration

accesskey (공용)

Amazon AWS Access Key

 

문자열

secretKey (common)

Amazon AWS Secret Key

 

문자열

region (공용)

버킷이 있는 리전입니다. 이 옵션은 com.amazonaws.services.s3.model.CreateBucketRequest에서 사용됩니다.

 

문자열

resolveProperty Placeholders (advanced)

구성 요소가 시작 시 자체적으로 속성 자리 표시자를 확인해야 하는지 여부입니다. String 유형의 속성만 속성 자리 표시자를 사용할 수 있습니다.Only properties which are of String type can use property placeholders.

true

boolean

AWS S3 Storage 서비스 끝점은 URI 구문을 사용하여 구성됩니다.

aws-s3:bucketNameOrArn

다음 경로 및 쿼리 매개변수를 사용합니다.

31.2.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

bucketNameOrArn

필수 버킷 이름 또는 ARN

 

문자열

31.2.2. 쿼리 매개변수(50개 매개변수):

Expand
이름설명기본값유형

AmazonS3Client (일반)

링크에서 com.amazonaws.services.sqs.AmazonS3 참조.https://camel.apache.org/registry.htmlRegistry.

 

AmazonS3

pathStyleAccess (common)

S3 클라이언트가 경로 스타일 액세스를 사용해야 하는지 여부

false

boolean

policy (공용)

com.amazonaws.services.s3.AmazonS3setBucketPolicy() 메서드에 설정할 이 큐의 정책입니다.

 

문자열

proxyHost (일반)

SQS 클라이언트를 인스턴스화할 때 프록시 호스트를 정의하기 위해

 

문자열

proxyPort (공용)

클라이언트 정의 내에서 사용할 프록시 포트를 지정합니다.

 

정수

region (공용)

S3 클라이언트가 작업해야 하는 지역

 

문자열

IAMCredentials 사용 (일반)

S3 클라이언트가 EC2 인스턴스에서 인증 정보를 로드해야 하는지 또는 정적 인증 정보를 전달할지 여부를 설정합니다.

false

boolean

encryptionMaterials (일반)

Symmetric/Asymmetric client usage의 경우 사용할 암호화 자료

 

EncryptionMaterials

useEncryption (common)

암호화를 사용해야 하는지 여부를 정의합니다.

false

boolean

bridgeErrorHandler (consumer)

소비자를 Camel 라우팅 오류 처리기에 브리징할 수 있습니다. 이는 소비자가 들어오는 메시지를 선택하는 동안 예외가 발생한 것을 의미하며, 이제 메시지로 처리되어 라우팅 오류 처리기에 의해 처리됩니다. 기본적으로 소비자는 org.apache.camel.spi.ExceptionHandler를 사용하여 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

false

boolean

deleteAfterRead (consumer)

검색 후 S3에서 오브젝트를 삭제합니다. 삭제는 Exchange가 커밋된 경우에만 수행됩니다. 롤백이 발생하면 오브젝트가 삭제되지 않습니다. 이 옵션이 false이면 동일한 오브젝트가 폴링에서 다시 검색됩니다. 따라서 경로에 Idempotent Consumer EIP를 사용하여 중복을 필터링해야 합니다. S3ConstantsBUCKET_NAME 링크 및 S3ConstantsKEY 헤더 링크 또는 S3ConstantsKEY 헤더 링크를 사용하여 필터링할 수 있습니다.

true

boolean

파일 이름 (consumer)

지정된 파일 이름을 사용하여 버킷에서 오브젝트를 가져오려면 다음을 수행합니다.

 

문자열

includeBody (consumer)

true인 경우 교환 본문이 파일의 콘텐츠로 스트림으로 설정됩니다. false인 경우 헤더는 S3 오브젝트 메타데이터로 설정되지만 본문은 null입니다. 이 옵션은 autocloseBody 옵션과 관련이 있습니다. includeBody를 true로 설정하고 autocloseBody를 false로 설정하면 S3Object 스트림을 닫을 수 있는 호출자가 됩니다. autocloseBody를 true로 설정하면 S3Object 스트림이 자동으로 종료됩니다.

true

boolean

maxConnections (consumer)

S3 클라이언트 구성에서 maxConnections 매개변수를 설정

60

int

maxMessagesPerPoll (consumer)

각 폴링에서 폴링할 최대 메시지 수를 폴링으로 가져옵니다. 는 기본값 무제한이지만 0 또는 음수를 사용하여 무제한으로 비활성화합니다.

10

int

접두사 (consumer)

관심 있는 오브젝트만 사용하기 위해 com.amazonaws.services.s3.model.ListObjectsRequest에서 사용되는 접두사입니다.

 

문자열

sendEmptyMessageWhenIdle (consumer)

폴링 소비자가 파일을 폴링하지 않은 경우 이 옵션을 활성화하여 빈 메시지( 본문 없음)를 대신 보낼 수 있습니다.

false

boolean

autocloseBody (consumer)

이 옵션이 true이고 includeBody가 true이면 교환 완료 시 S3Object.close() 메서드가 호출됩니다. 이 옵션은 includeBody 옵션과 관련이 있습니다. includeBody를 true로 설정하고 autocloseBody를 false로 설정하면 S3Object 스트림을 닫을 수 있는 호출자가 됩니다. autocloseBody를 true로 설정하면 S3Object 스트림이 자동으로 종료됩니다.

true

boolean

예외 처리기 (consumer)

소비자가 사용자 지정 ExceptionHandler를 사용하도록 하려면 다음을 수행합니다. bridgeErrorHandler 옵션이 활성화되어 있는지 확인한 후 이 옵션이 사용되지 않습니다. 기본적으로 소비자는 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

 

ExceptionHandler

exchangePattern (consumer)

소비자가 교환을 생성할 때 교환 패턴을 설정합니다.

 

ExchangePattern

pollStrategy (consumer)

플러그형 org.apache.camel.PollingConsumerPollingStrategy를 사용하면 Camel에서 Exchange를 생성하고 라우팅하기 전에 폴링 작업 중에 일반적으로 발생한 오류 처리를 제어하는 사용자 정의 구현을 제공할 수 있습니다.

 

PollingConsumerPoll Strategy

deleteAfterwrite (producer)

S3 파일이 업로드된 후 파일 오브젝트 삭제

false

boolean

multiPartUpload (producer)

만약 그것이 사실이라면, camel은 다중 부분 포맷을 사용하여 파일을 업로드 할 것이며, 부분 크기는 partSize의 옵션에 의해 결정됩니다.

false

boolean

작업 (producer)

사용자가 업로드만 하고 싶지 않은 경우 수행할 작업

 

S3Operations

partSize (producer)

다중 부분 업로드에 사용되는 partSize를 설정하면 기본 크기는 25M입니다.

26214400

long

serverSideEncryption (producer)

AWS 관리 키를 사용하여 오브젝트를 암호화할 때 서버 측 암호화 알고리즘을 설정합니다. 예를 들어 AES256을 사용합니다.

 

문자열

StorageClass (producer)

com.amazonaws.services.s3.model.PutObjectRequest 요청에 설정할 스토리지 클래스입니다.

 

문자열

awsKMSKeyId (producer)

KMS가 활성화된 경우 사용할 KMS 키의 id를 정의합니다.

 

문자열

useAwsKMS (producer)

KMS를 사용해야 하는지 여부를 정의합니다.

false

boolean

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

accelerateModeEnabled (고급)

Accelerate Mode enabled가 true 또는 false인 경우 정의

false

boolean

chunkedEncodingDisabled (고급)

Chunked Encoding이 true 또는 false인 경우 정의

false

boolean

dualstackEnabled (고급)

Dualstack enabled가 true인지 false인지 정의합니다.

false

boolean

forceGlobalBucketAccess Enabled (고급)

Force Global Bucket Access enabled가 true인지 아니면 false를 정의합니다.

false

boolean

payloadSigningEnabled (고급)

Payload Signing enabled가 true인지 false인지 정의합니다.

false

boolean

backoffErrorThreshold (scheduler)

백오프Multipler를 시작하기 전에 발생해야 하는 후속 오류 폴링(일부 오류 발생) 수입니다.

 

int

backoffIdleThreshold (scheduler)

백오프Multipler를 시작하기 전에 발생해야 하는 후속 유휴 폴링 수입니다.

 

int

backoffMultiplier (scheduler)

예약된 폴링 소비자 백오프가 연속된 여러 개의 유휴/errors가 있는 경우 해당 행에 사용할 수 있습니다. multiplier는 다음 실제 시도가 다시 발생하기 전에 건너뛸 폴링 수입니다. 이 옵션을 사용하는 경우 backoffIdleThreshold 및/또는 backoffErrorThreshold도 구성해야 합니다.

 

int

지연 (scheduler)

다음 폴링보다 밀리초입니다. 60초(60초), 5m30초(5분 및 30초) 및 1h(1시간)와 같은 단위를 사용하여 시간 값을 지정할 수도 있습니다.

500

long

greedy (scheduler)

greedy가 활성화된 경우 ScheduledPollConsumer는 이전 실행이 1개 이상의 메시지를 폴링하면 즉시 다시 실행됩니다.

false

boolean

initialDelay (scheduler)

첫 번째 폴링이 시작되기 전까지의 밀리초입니다. 60초(60초), 5m30초(5분 및 30초) 및 1h(1시간)와 같은 단위를 사용하여 시간 값을 지정할 수도 있습니다.

1000

long

runLoggingLevel (scheduler)

소비자는 폴링할 때 시작/완료 로그 행을 기록합니다. 이 옵션을 사용하면 로깅 수준을 구성할 수 있습니다.

TRACE

LoggingLevel

scheduledExecutorService (scheduler)

소비자에 사용할 사용자 지정/공유 스레드 풀을 구성할 수 있습니다. 기본적으로 각 소비자는 자체 스레드 스레드 풀이 있습니다.

 

ScheduledExecutor Service

스케줄러 (scheduler)

camel-spring 또는 camel-quartz2 구성 요소에서 cron 스케줄러를 사용하려면

none

ScheduledPollConsumer Scheduler

스케줄러 속성 (scheduler)

사용자 지정 스케줄러 또는 Quartz2, Spring 기반 스케줄러를 사용할 때 추가 속성을 구성하려면 다음을 수행합니다.

 

map

StartScheduler (scheduler)

스케줄러가 자동으로 시작되어야 하는지 여부입니다.

true

boolean

timeUnit (scheduler)

initialDelay 및 지연 옵션의 시간 단위입니다.

밀리초

TimeUnit

UseFixedDelay (scheduler)

고정 지연 또는 고정 속도가 사용되는 경우 제어합니다. 자세한 내용은 JDK의 ScheduledExecutorService를 참조하십시오.

true

boolean

accesskey (보안)

Amazon AWS Access Key

 

문자열

secretKey (security)

Amazon AWS Secret Key

 

문자열

필요한 S3 구성 요소 옵션

Amazon의 S3에 액세스하려면 레지스트리 또는 accessKey 및 secretKey에 amazonS3Client를 제공해야 합니다.

31.3. batch Consumer

이 구성 요소는 배치 소비자를 구현합니다.

예를 들어 이 배치에 있는 메시지 수를 알 수 있으며, 예를 들어 집계에서 이 메시지 수를 집계할 수 있습니다.

31.4. 사용법

31.4.1. S3 생산자가 평가한 메시지 헤더

Expand
header유형설명

CamelAwsS3BucketName

문자열

이 오브젝트가 저장되거나 현재 작업에 사용할 버킷 이름

CamelAwsS3BucketDestinationName

문자열

Camel 2.18: 현재 작업에 사용할 버킷 대상 이름입니다.

CamelAwsS3ContentLength

long

이 오브젝트의 콘텐츠 길이입니다.

CamelAwsS3ContentType

문자열

이 오브젝트의 콘텐츠 유형입니다.

CamelAwsS3ContentControl

문자열

Camel 2.8.2: 이 개체의 콘텐츠 제어입니다.

CamelAwsS3ContentDisposition

문자열

Camel 2.8.2: 이 오브젝트의 콘텐츠 불일치.

CamelAwsS3ContentEncoding

문자열

Camel 2.8.2: 이 개체의 콘텐츠 인코딩.

CamelAwsS3ContentMD5

문자열

Camel 2.8.2: 이 오브젝트의 md5 체크섬입니다.

CamelAwsS3DestinationKey

문자열

Camel 2.18: 현재 작업에 사용할 대상 키

CamelAwsS3Key

문자열

이 개체를 저장할 키 또는 현재 작업에 사용할 키입니다.The key under which this object will be stored or which will be used for the current operation.

CamelAwsS3LastModified

java.util.Date

Camel 2.8.2: 이 개체의 마지막으로 수정된 타임스탬프입니다.

CamelAwsS3Operation

문자열

Camel 2.18: 수행할 작업. 허용되는 값은 copyObject, listBuckets, deleteBucket, downloadLink입니다.

CamelAwsS3StorageClass

문자열

Camel 2.8.4: 이 오브젝트의 스토리지 클래스입니다.

CamelAwsS3CannedAcl

문자열

Camel 2.11.0: 오브젝트에 적용할 수 있는 acl입니다. 허용 값은 com.amazonaws.services.s3.model.CannedAccessControlList 를 참조하십시오.

CamelAwsS3Acl

com.amazonaws.services.s3.model.AccessControlList

Camel 2.11.0: 잘 구성된 Amazon S3 Access Control List 오브젝트입니다. 자세한 내용은 com.amazonaws.services.s3.AccessControlList를 참조하십시오.

CamelAwsS3Headers

map<String,String>

Camel 2.15.0: 사용자 지정 objectMetadata 헤더를 가져오거나 설정합니다.

CamelAwsS3ServerSideEncryption

문자열

Camel 2.16: AWS 관리 키를 사용하여 오브젝트를 암호화할 때 서버 측 암호화 알고리즘을 설정합니다. 예를 들어 AES256을 사용합니다.

CamelAwsS3VersionId

문자열

현재 작업에서 저장되거나 반환될 오브젝트의 버전

31.4.2. S3 생산자가 설정한 메시지 헤더

Expand
header유형설명

CamelAwsS3ETag

문자열

새로 업로드된 오브젝트의 ETag 값입니다.

CamelAwsS3VersionId

문자열

새로 업로드된 오브젝트의 선택적 버전 ID입니다.

CamelAwsS3DownloadLinkExpiration

문자열

URL 다운로드 링크의 만료(밀리코어)입니다. 링크는 CamelAwsS3DownloadLink 응답 헤더에 저장됩니다.

31.4.3. S3 소비자가 설정한 메시지 헤더

Expand
header유형설명

CamelAwsS3Key

문자열

이 오브젝트가 저장되는 키입니다.

CamelAwsS3BucketName

문자열

이 오브젝트가 포함된 버킷의 이름입니다.

CamelAwsS3ETag

문자열

RFC 1864에 따라 관련 오브젝트의 16진수로 인코딩된 128비트 MD5 다이제스트입니다. 이 데이터는 호출자가 수신한 데이터가 Amazon S3에서 보낸 데이터와 동일한지 확인하는 무결성 검사로 사용됩니다.

CamelAwsS3LastModified

날짜

Amazon S3가 마지막으로 연결된 오브젝트에 대한 수정을 기록한 날짜와 시간을 나타내는 Last-Modified 헤더 값입니다.

CamelAwsS3VersionId

문자열

사용 가능한 경우 관련 Amazon S3 오브젝트의 버전 ID입니다. 버전 ID는 오브젝트 버전 관리를 사용하는 Amazon S3 버킷에 오브젝트를 업로드할 때만 오브젝트에 할당됩니다.

CamelAwsS3ContentType

문자열

Content-Type HTTP 헤더: 연결된 오브젝트에 저장된 콘텐츠 유형을 나타냅니다. 이 헤더의 값은 표준 MIME 유형입니다.

CamelAwsS3ContentMD5

문자열

base64로 인코딩된 128-bit MD5 다이제스트는 RFC 1864에 따라 관련 개체 (content - 헤더를 포함하지 않음)입니다. 이 데이터는 Amazon S3에서 수신한 데이터가 호출자와 동일한 데이터인지 확인하는 메시지 무결성 검사로 사용됩니다.

CamelAwsS3ContentLength

long

연결된 개체의 크기를 바이트 단위로 나타내는 Content-Length HTTP 헤더입니다.The Content-Length HTTP header indicating the size of the associated object in bytes.

CamelAwsS3ContentEncoding

문자열

선택 사항 인 Content-Encoding HTTP 헤더는 개체에 적용된 콘텐츠 인코딩과 Content-Type 필드에서 참조하는 미디어 유형을 가져오기 위해 적용해야 하는 디코딩 메커니즘을 지정합니다.

CamelAwsS3ContentDisposition

문자열

선택 사항 인 Content-Disposition HTTP 헤더: 오브젝트를 저장할 권장 파일 이름과 같은 프레젠테이션 정보를 지정합니다.

CamelAwsS3ContentControl

문자열

사용자가 HTTP 요청/응답 체인을 따라 캐싱 동작을 지정할 수 있는 선택적 Cache-Control HTTP 헤더입니다.

CamelAwsS3ServerSideEncryption

문자열

Camel 2.16: AWS 관리 키를 사용하여 오브젝트를 암호화할 때 서버 측 암호화 알고리즘입니다.

31.4.4. 고급 AmazonS3 구성

Camel 애플리케이션이 방화벽 뒤에서 실행 중이거나 AmazonS3 인스턴스 구성을 더 많이 제어해야 하는 경우 고유한 인스턴스를 생성할 수 있습니다.

AWSCredentials awsCredentials = new BasicAWSCredentials("myAccessKey", "mySecretKey");

ClientConfiguration clientConfiguration = new ClientConfiguration();
clientConfiguration.setProxyHost("http://myProxyHost");
clientConfiguration.setProxyPort(8080);

AmazonS3 client = new AmazonS3Client(awsCredentials, clientConfiguration);

registry.bind("client", client);

Camel aws-s3 구성 요소 구성에서 참조하십시오.

from("aws-s3://MyBucket?amazonS3Client=#client&delay=5000&maxMessagesPerPoll=5")
.to("mock:result");

31.4.5. S3 구성 요소에 KMS 사용

AWS KMS를 사용하여 AWS 인프라를 사용하여 데이터를 암호화/암호화하려면 다음 예제와 같이 2.21.x에 도입된 옵션을 사용할 수 있습니다.

from("file:tmp/test?fileName=test.txt")
     .setHeader(S3Constants.KEY, constant("testFile"))
     .to("aws-s3://mybucket?amazonS3Client=#client&useAwsKMS=true&awsKMSKeyId=3f0637ad-296a-3dfe-a796-e60654fb128c");

이렇게 하면 S3에 KMS 키 3f0637ad-296a-3dfe-a796-e60654fb128c를 사용하여 test.txt 파일을 암호화합니다. 이 파일을 다운로드하도록 요청하면 암호 해독은 다운로드 전에 직접 수행됩니다.

31.4.6. s3 구성 요소와 함께 "IAMCredentials" 사용

AWS IAM 인증 정보를 사용하려면 먼저 Camel 애플리케이션을 시작하는 EC2에 적절한 정책이 효과적으로 실행되도록 하는 적절한 정책이 포함된 IAM 역할이 있는지 확인해야 합니다. 이 기능은 원격 인스턴스에서만 "true"로 설정되어야 합니다. 또한 IAM이 AWS 특정 구성 요소이므로 여전히 정적 인증 정보를 로컬에서 사용해야 하지만 이제 AWS 환경을 보다 쉽게 관리할 수 있어야 합니다. 이를 구현하고 이해한 후에는 쿼리 매개변수 "IAMCredentials"를 AWS 환경에서 "true"로 설정할 수 있습니다. 로컬 및 원격 환경에 따라 이를 효과적으로 설정 및 해제하려면 시스템 환경 변수를 사용하여 이 쿼리 매개 변수를 활성화하는 것을 고려할 수 있습니다. 예를 들어 코드에서 "useIAMCredentials" 쿼리 매개변수를 "true"로 설정할 수 있습니다. "isRemote"라는 시스템 환경 변수가 true로 설정된 경우 (이 작업을 수행하는 다른 많은 방법이 있으며 간단한 예를 수행해야 합니다). 정적 인증 정보가 완전히 필요하지는 않지만 AWS 환경에서 IAM 인증 정보를 사용하면 원격 환경에서 새로 고칠 필요가 없고 주요 보안 강화가 추가됩니다(IAM 인증 정보는 6시간마다 자동으로 새로 고쳐지고 정책이 업데이트될 때 업데이트됨). 이는 AWS에서 인증 정보를 관리하는 데 권장되는 방법이므로 가능한 한 자주 사용해야 합니다.

31.5. 종속 항목

Maven 사용자는 다음 종속성을 pom.xml에 추가해야 합니다.

pom.xml

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-aws</artifactId>
    <version>${camel-version}</version>
</dependency>

여기서 ${camel-version}은 Camel의 실제 버전(2.8 이상)으로 교체해야 합니다.

31.6. 예를 들면 다음과 같습니다.

  • Camel 구성
  • 구성 요소
  • 끝점
  • 시작하기
  • AWS 구성 요소

32장. AWS SimpleDB Component

Camel 버전 2.9에서 사용 가능

sdb 구성 요소는 Amazon의 SDB 서비스에서 데이터를 저장하고 검색할 수 있도록 지원합니다.

사전 요구 사항

유효한 Amazon Web Services 개발자 계정이 있어야 하며 Amazon SDB를 사용하도록 등록해야 합니다. 자세한 내용은 Amazon SDB 에서 확인할 수 있습니다.

32.1. URI 형식

aws-sdb://domainName[?options]

다음 형식 ?options=value&option2=value&…​로 URI에 쿼리 옵션을 추가할 수 있습니다.

32.2. URI 옵션

AWS SimpleDB 구성 요소에는 옵션이 없습니다.

AWS SimpleDB 엔드포인트는 URI 구문을 사용하여 구성됩니다.

aws-sdb:domainName

다음 경로 및 쿼리 매개변수를 사용합니다.

32.2.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

domainName

필수 도메인의 이름은 현재 작업 중인 도메인입니다.

 

문자열

32.2.2. 쿼리 매개 변수(10 매개변수:

Expand
이름설명기본값유형

accesskey (producer)

Amazon AWS Access Key

 

문자열

AmazonSDBClient (producer)

AmazonSimpleDB를 클라이언트로 사용

 

AmazonSimpleDB

ConsistentRead (producer)

데이터를 읽을 때 강력한 일관성을 강제 적용할지 여부를 결정합니다.Determines whether or not strong consistency should be enforced when data is read.

false

boolean

maxNumberOfDomains (producer)

반환할 최대 도메인 이름 수입니다. 범위는 1에서 100까지입니다.

 

정수

작업 (producer)

수행할 작업

PutAttributes

SdbOperations

proxyHost (producer)

SDB 클라이언트를 인스턴스화할 때 프록시 호스트를 정의하기 위해

 

문자열

proxyPort (producer)

SDB 클라이언트를 인스턴스화할 때 프록시 포트 정의

 

정수

리전 (producer)

SDB 클라이언트가 작업해야 하는 리전

 

문자열

secretKey (producer)

Amazon AWS Secret Key

 

문자열

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

필수 SDB 구성 요소 옵션

Amazon의 SDB에 액세스하려면 레지스트리 또는 accessKey 및 secretKey에 amazonSDBClient를 제공해야 합니다.

32.3. 사용법

32.3.1. SDB 생산자가 평가한 메시지 헤더

Expand
header유형설명

CamelAwsSdbAttributes

collection<Attribute>

수행할 속성 목록입니다.

CamelAwsSdbAttributeNames

collection<String>

검색할 속성의 이름입니다.

CamelAwsSdbConsistentRead

부울

데이터를 읽을 때 강력한 일관성을 강제 적용할지 여부를 결정합니다.Determines whether or not strong consistency should be enforced when data is read.

CamelAwsSdbDeletableItems

Collection<DeletableItem>

일괄 처리에서 삭제 작업을 수행할 항목 목록입니다.

CamelAwsSdbDomainName

문자열

현재 작업 중인 도메인의 이름입니다.

CamelAwsSdbItemName

문자열

이 항목의 고유 키입니다.

CamelAwsSdbMaxNumberOfDomains

정수

반환할 최대 도메인 이름 수입니다. 범위는 1 *에서 100까지입니다.

CamelAwsSdbNextToken

문자열

도메인/배치 이름의 다음 목록을 시작할 위치를 지정하는 문자열입니다.

CamelAwsSdbOperation

문자열

URI 옵션에서 작업을 재정의하려면 다음을 수행합니다.

CamelAwsSdbReplaceableAttributes

Collection<ReplaceableAttribute>

항목에 배치할 속성 목록입니다.

CamelAwsSdbReplaceableItems

Collection<ReplaceableItem>

도메인에 배치할 항목 목록입니다.

CamelAwsSdbSelectExpression

문자열

도메인을 쿼리하는 데 사용되는 식입니다.

CamelAwsSdbUpdateCondition

UpdateCondition

지정된 경우 지정된 특성이 업데이트/삭제할지 여부를 결정하는 업데이트 조건입니다.

32.3.2. DomainMetadata 작업 중 설정된 메시지 헤더

Expand
header유형설명

CamelAwsSdbTimestamp

정수

Epoch(UNIX)초의 메타데이터를 계산하는 데이터 및 시간입니다.

CamelAwsSdbItemCount

정수

도메인의 모든 항목 수입니다.

CamelAwsSdbAttributeNameCount

정수

도메인의 고유한 특성 이름 수입니다.

CamelAwsSdbAttributeValueCount

정수

도메인에 있는 모든 특성 이름/값 쌍의 수입니다.

CamelAwsSdbAttributeNameSize

long

도메인의 모든 고유 특성 이름의 총 크기(바이트)입니다.

CamelAwsSdbAttributeValueSize

long

도메인의 모든 특성 값의 총 크기(바이트)입니다.

CamelAwsSdbItemNameSize

long

도메인의 모든 항목 이름(바이트)의 총 크기입니다.

32.3.3. GetAttributes 작업 중 메시지 헤더 설정

Expand
header유형설명

CamelAwsSdbAttributes

list<Attribute>

작업에서 반환된 속성 목록입니다.

32.3.4. ListDomains 작업 중 설정된 메시지 헤더

Expand
header유형설명

CamelAwsSdbDomainNames

list<String>

식과 일치하는 도메인 이름 목록입니다.

CamelAwsSdbNextToken

문자열

특정 MaxNumberOfDomains보다 많은 도메인이 있음을 나타내는 불투명 토큰입니다.

32.3.5. Select 작업 중 메시지 헤더 설정

Expand
header유형설명

CamelAwsSdbItems

list<Item>

select 식과 일치하는 항목 목록입니다.

CamelAwsSdbNextToken

문자열

opaque 토큰으로 MaxNumberOfItem보다 더 많은 항목이 일치했거나 응답 크기가 1메가바이트를 초과했거나 실행 시간이 5초를 초과했음을 나타냅니다.

32.3.6. 고급 AmazonSimpleDB 구성

AmazonSimpleDB 인스턴스 구성을 더 많이 제어해야 하는 경우 고유한 인스턴스를 만들고 URI에서 해당 인스턴스를 참조할 수 있습니다.

from("direct:start")
.to("aws-sdb://domainName?amazonSDBClient=#client");

#client 는 레지스트리에서 AmazonSimpleDB 를 나타냅니다.

예를 들어 Camel 애플리케이션이 방화벽 뒤에서 실행 중인 경우입니다.

AWSCredentials awsCredentials = new BasicAWSCredentials("myAccessKey", "mySecretKey");
ClientConfiguration clientConfiguration = new ClientConfiguration();
clientConfiguration.setProxyHost("http://myProxyHost");
clientConfiguration.setProxyPort(8080);

AmazonSimpleDB client = new AmazonSimpleDBClient(awsCredentials, clientConfiguration);

registry.bind("client", client);

32.4. 종속 항목

Maven 사용자는 다음 종속성을 pom.xml에 추가해야 합니다.

pom.xml

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-aws</artifactId>
    <version>${camel-version}</version>
</dependency>

여기서 ${camel-version}은 Camel의 실제 버전(2.8.4 이상)으로 교체해야 합니다.

32.5. 예를 들면 다음과 같습니다.

  • Camel 구성
  • 구성 요소
  • 끝점
  • 시작하기
  • AWS 구성 요소

33장. AWS Simple Email Service 구성 요소

Camel 버전 2.9에서 사용 가능

ses 구성 요소는 Amazon SES 서비스로 이메일 전송을 지원합니다.

사전 요구 사항

유효한 Amazon Web Services 개발자 계정이 있어야 하며 Amazon SES를 사용하려면 가입해야 합니다. 더 많은 정보는 Amazon SES 에서 확인할 수 있습니다.

33.1. URI 형식

aws-ses://from[?options]

다음 형식 ?options=value&option2=value&…​로 URI에 쿼리 옵션을 추가할 수 있습니다.

33.2. URI 옵션

AWS Simple Email Service 구성 요소는 아래 나열된 5 가지 옵션을 지원합니다.

Expand
이름설명기본값유형

구성 (고급)

AWS SES 기본 구성

 

SesConfiguration

accesskey (producer)

Amazon AWS Access Key

 

문자열

secretKey (producer)

Amazon AWS Secret Key

 

문자열

리전 (producer)

SES 클라이언트가 작업해야 하는 지역

 

문자열

resolveProperty Placeholders (advanced)

구성 요소가 시작 시 자체적으로 속성 자리 표시자를 확인해야 하는지 여부입니다. String 유형의 속성만 속성 자리 표시자를 사용할 수 있습니다.Only properties which are of String type can use property placeholders.

true

boolean

AWS Simple Email Service 엔드포인트는 URI 구문을 사용하여 구성됩니다.

aws-ses:from

다음 경로 및 쿼리 매개변수를 사용합니다.

33.2.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

from

보낸 사람의 이메일 주소가 필요합니다.

 

문자열

33.2.2. 쿼리 매개변수(11 매개변수):

Expand
이름설명기본값유형

AmazonSESClient (producer)

AmazonSimpleEmailService를 클라이언트로 사용

 

AmazonSimpleEmail Service

proxyHost (producer)

SES 클라이언트를 인스턴스화할 때 프록시 호스트를 정의하기 위해

 

문자열

proxyPort (producer)

SES 클라이언트를 인스턴스화할 때 프록시 포트 정의

 

정수

리전 (producer)

SES 클라이언트가 작업해야 하는 지역

 

문자열

replyToAddresses (producer)

메시지에 대한 회신 이메일 주소 목록입니다. 'CamelAwsSesReplyToAddresses' 헤더를 사용하여 재정의합니다.

 

list

returnPath (producer)

반송 알림이 전달될 이메일 주소입니다. 'CamelAwsSes returnPath' 헤더를 사용하여 재정의합니다.

 

문자열

제목 (producer)

메시지 헤더 'CamelAwsSesSubject'가 없는 경우 사용되는 주제입니다.

 

문자열

다음으로 이동 (producer)

대상 이메일 주소 목록. 'CamelAwsSesTo' 헤더를 사용하여 재정의할 수 있습니다.

 

list

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

accesskey (보안)

Amazon AWS Access Key

 

문자열

secretKey (security)

Amazon AWS Secret Key

 

문자열

필요한 SES 구성 요소 옵션

Amazon SES에 액세스하려면 레지스트리 또는 accessKey 및 secretKey에 amazonSESClient를 제공해야 합니다.

33.3. 사용법

33.3.1. SES 생산자가 평가한 메시지 헤더

Expand
header유형설명

CamelAwsSesFrom

문자열

보낸 사람의 이메일 주소입니다.

CamelAwsSesTo

list<String>

이 이메일의 대상입니다.

CamelAwsSesSubject

문자열

메시지의 대상입니다.

CamelAwsSesReplyToAddresses

list<String>

메시지의 회신 이메일 주소입니다.

CamelAwsSesReturnPath

문자열

알림이 전달되어야 하는 이메일 주소입니다.

CamelAwsSesHtmlEmail

부울

Camel 2.12.3 이후 이메일 콘텐츠가 HTML인지 표시하는 플래그입니다.

33.3.2. SES 생산자가 설정한 메시지 헤더

Expand
header유형설명

CamelAwsSesMessageId

문자열

Amazon SES 메시지 ID입니다.

33.3.3. 고급 AmazonSimpleEmailService 구성

AmazonSimpleEmailService 인스턴스 구성을 더 많이 제어해야 하는 경우 고유한 인스턴스를 만들고 URI에서 해당 인스턴스를 참조할 수 있습니다.

from("direct:start")
.to("aws-ses://example@example.com?amazonSESClient=#client");

#client 는 레지스트리의 AmazonSimpleEmailService 를 나타냅니다.

예를 들어 Camel 애플리케이션이 방화벽 뒤에서 실행 중인 경우입니다.

AWSCredentials awsCredentials = new BasicAWSCredentials("myAccessKey", "mySecretKey");
ClientConfiguration clientConfiguration = new ClientConfiguration();
clientConfiguration.setProxyHost("http://myProxyHost");
clientConfiguration.setProxyPort(8080);
AmazonSimpleEmailService client = new AmazonSimpleEmailServiceClient(awsCredentials, clientConfiguration);

registry.bind("client", client);

33.4. 종속 항목

Maven 사용자는 다음 종속성을 pom.xml에 추가해야 합니다.

pom.xml

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-aws</artifactId>
    <version>${camel-version}</version>
</dependency>

여기서 ${camel-version}은 Camel의 실제 버전(2.8.4 이상)으로 교체해야 합니다.

33.5. 예를 들면 다음과 같습니다.

  • Camel 구성
  • 구성 요소
  • 끝점
  • 시작하기
  • AWS 구성 요소

34장. AWS Simple Notification System 구성 요소

Camel 버전 2.8에서 사용 가능

SNS 구성 요소는 메시지를 Amazon Simple Notification Topic으로 보낼 수 있습니다. Amazon API 구현은 AWS SDK 에서 제공합니다.

사전 요구 사항

유효한 Amazon Web Services 개발자 계정이 있어야 하며 Amazon SNS를 사용하기 위해 등록되어야 합니다. 자세한 내용은 Amazon SNS 에서 확인할 수 있습니다.

34.1. URI 형식

aws-sns://topicNameOrArn[?options]

이 문제는 아직 없는 경우 생성됩니다.
다음 형식 ?options=value&option2=value&…​로 URI에 쿼리 옵션을 추가할 수 있습니다.

34.2. URI 옵션

AWS Simple Notification System 구성 요소는 아래 나열된 5 가지 옵션을 지원합니다.

Expand
이름설명기본값유형

구성 (고급)

AWS SNS 기본 구성

 

SnsConfiguration

accesskey (producer)

Amazon AWS Access Key

 

문자열

secretKey (producer)

Amazon AWS Secret Key

 

문자열

리전 (producer)

SNS 클라이언트가 작업해야 하는 리전

 

문자열

resolveProperty Placeholders (advanced)

구성 요소가 시작 시 자체적으로 속성 자리 표시자를 확인해야 하는지 여부입니다. String 유형의 속성만 속성 자리 표시자를 사용할 수 있습니다.Only properties which are of String type can use property placeholders.

true

boolean

AWS Simple Notification System 끝점은 URI 구문을 사용하여 구성됩니다.

aws-sns:topicNameOrArn

다음 경로 및 쿼리 매개변수를 사용합니다.

34.2.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

topicNameOrArn

필수 항목 이름 또는 ARN

 

문자열

34.2.2. 쿼리 매개변수(11 매개변수):

Expand
이름설명기본값유형

AmazonSNSClient (producer)

AmazonSNS를 클라이언트로 사용

 

AmazonSNS

headerFilterStrategy (producer)

사용자 지정 HeaderFilterStrategy를 사용하여 헤더를 Camel에 매핑하려면 다음을 수행합니다.

 

HeaderFilterStrategy

MessageStructure (producer)

json과 같이 사용할 메시지 구조

 

문자열

정책 (producer)

이 큐의 정책

 

문자열

proxyHost (producer)

SNS 클라이언트를 인스턴스화할 때 프록시 호스트를 정의하기 위해

 

문자열

proxyPort (producer)

SNS 클라이언트를 인스턴스화할 때 프록시 포트를 정의하려면

 

정수

리전 (producer)

SNS 클라이언트가 작업해야 하는 리전

 

문자열

제목 (producer)

메시지 헤더 'CamelAwsSnsSubject'가 없는 경우 사용되는 주제입니다.

 

문자열

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

accesskey (보안)

Amazon AWS Access Key

 

문자열

secretKey (security)

Amazon AWS Secret Key

 

문자열

필수 SNS 구성 요소 옵션

Amazon의 SNS에 액세스하려면 레지스트리 또는 accessKey 및 secretKey에 amazonSNSClient를 제공해야 합니다.

34.3. 사용법

34.3.1. SNS 프로듀서가 평가한 메시지 헤더

Expand
header유형설명

CamelAwsSnsSubject

문자열

Amazon SNS 메시지 제목. 설정하지 않으면 SnsConfiguration 의 주체가 사용됩니다.

34.3.2. SNS 프로듀서에 의해 설정된 메시지 헤더

Expand
header유형설명

CamelAwsSnsMessageId

문자열

Amazon SNS 메시지 ID입니다.

34.3.3. 고급 AmazonSNS 구성

AmazonSNS 인스턴스 구성을 더 많이 제어해야 하는 경우 고유한 인스턴스를 생성하고 URI에서 해당 인스턴스를 참조할 수 있습니다.

from("direct:start")
.to("aws-sns://MyTopic?amazonSNSClient=#client");

#client 는 레지스트리의 AmazonSNS 를 나타냅니다.

예를 들어 Camel 애플리케이션이 방화벽 뒤에서 실행 중인 경우입니다.

AWSCredentials awsCredentials = new BasicAWSCredentials("myAccessKey", "mySecretKey");
ClientConfiguration clientConfiguration = new ClientConfiguration();
clientConfiguration.setProxyHost("http://myProxyHost");
clientConfiguration.setProxyPort(8080);
AmazonSNS client = new AmazonSNSClient(awsCredentials, clientConfiguration);

registry.bind("client", client);

34.4. 종속 항목

Maven 사용자는 다음 종속성을 pom.xml에 추가해야 합니다.

pom.xml

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-aws</artifactId>
    <version>${camel-version}</version>
</dependency>

여기서 ${camel-version}은 Camel의 실제 버전(2.8 이상)으로 교체해야 합니다.

34.5. 예를 들면 다음과 같습니다.

  • Camel 구성
  • 구성 요소
  • 끝점
  • 시작하기
  • AWS 구성 요소

35장. AWS Simple Queue Service 구성 요소

Camel 버전 2.6에서 사용 가능

sqs 구성 요소는 Amazon의 SQS 서비스로 메시지를 보내고 받을 수 있도록 지원합니다.

사전 요구 사항

유효한 Amazon Web Services 개발자 계정이 있어야 하며 Amazon SQS를 사용하려면 가입해야 합니다. 자세한 내용은 Amazon SQS 에서 확인할 수 있습니다.

35.1. URI 형식

aws-sqs://queueNameOrArn[?options]

큐가 없으면 해당 큐가 생성됩니다.
다음 형식 ?options=value&option2=value&…​로 URI에 쿼리 옵션을 추가할 수 있습니다.

35.2. URI 옵션

AWS Simple Queue Service 구성 요소는 아래 나열된 5 가지 옵션을 지원합니다.

Expand
이름설명기본값유형

구성 (고급)

AWS SQS 기본 구성

 

SqsConfiguration

accesskey (공용)

Amazon AWS Access Key

 

문자열

secretKey (common)

Amazon AWS Secret Key

 

문자열

region (공용)

queueOwnerAWSAccountId와 함께 사용할 수 있는 큐 리전을 지정하여 서비스 URL을 빌드합니다.

 

문자열

resolveProperty Placeholders (advanced)

구성 요소가 시작 시 자체적으로 속성 자리 표시자를 확인해야 하는지 여부입니다. String 유형의 속성만 속성 자리 표시자를 사용할 수 있습니다.Only properties which are of String type can use property placeholders.

true

boolean

AWS Simple Queue Service 엔드포인트는 URI 구문을 사용하여 구성됩니다.

aws-sqs:queueNameOrArn

다음 경로 및 쿼리 매개변수를 사용합니다.

35.2.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

queueNameOrArn

필요한 대기열 이름 또는 ARN

 

문자열

35.2.2. 쿼리 매개변수(46 매개변수):

Expand
이름설명기본값유형

AmazonAWSHost (일반)

Amazon AWS 클라우드의 호스트 이름입니다.

amazonaws.com

문자열

AmazonSQSClient (일반)

AmazonSQS를 클라이언트로 사용하기

 

AmazonSQS

headerFilterStrategy (common)

사용자 지정 HeaderFilterStrategy를 사용하여 헤더를 Camel에 매핑하려면 다음을 수행합니다.

 

HeaderFilterStrategy

queueOwnerAWSAccountId (일반)

큐를 다른 계정 소유자와 연결해야 할 때 큐 소유자 aws 계정 ID를 지정합니다.

 

문자열

region (공용)

queueOwnerAWSAccountId와 함께 사용할 수 있는 큐 리전을 지정하여 서비스 URL을 빌드합니다.

 

문자열

attributeNames (consumer)

사용할 때 수신할 속성 이름 목록입니다. 여러 이름은 쉼표로 구분할 수 있습니다.

 

문자열

bridgeErrorHandler (consumer)

소비자를 Camel 라우팅 오류 처리기에 브리징할 수 있습니다. 이는 소비자가 들어오는 메시지를 선택하는 동안 예외가 발생한 것을 의미하며, 이제 메시지로 처리되어 라우팅 오류 처리기에 의해 처리됩니다. 기본적으로 소비자는 org.apache.camel.spi.ExceptionHandler를 사용하여 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

false

boolean

concurrentConsumers (consumer)

여러 스레드를 사용하여 sqs 대기열을 폴링하여 처리량을 늘릴 수 있습니다.

1

int

defaultVisibilityTimeout (consumer)

기본 표시 시간 초과(초)

 

정수

deleteAfterRead (consumer)

읽은 후 SQS에서 메시지 삭제

true

boolean

deleteIfFiltered (consumer)

Exchange에서 필터를 통해 얻을 수 없는 경우 DeleteMessage를 SQS 큐에 보낼지 여부입니다. 'false'와 교환이 경로의 Camel 필터 업스트림을 통해 이를 수행하지 않는 경우 DeleteMessage를 보내지 마십시오.

true

boolean

extendMessageVisibility (consumer)

활성화된 경우 예약된 백그라운드 작업은 SQS에서 메시지 가시성을 계속 확장합니다. 이 작업은 메시지를 처리하는 데 시간이 오래 걸리는 경우 필요합니다. true defaultVisibilityTimeout로 설정된 경우 를 설정해야 합니다. 자세한 내용은 Amazon docs에서 참조하십시오.

false

boolean

maxMessagesPerPoll (consumer)

각 폴링에서 폴링할 최대 메시지 수를 폴링으로 가져옵니다. 는 기본값 무제한이지만 0 또는 음수를 사용하여 무제한으로 비활성화합니다.

 

int

messageAttributeNames (consumer)

사용할 때 수신할 메시지 속성 이름 목록입니다. 여러 이름은 쉼표로 구분할 수 있습니다.

 

문자열

sendEmptyMessageWhenIdle (consumer)

폴링 소비자가 파일을 폴링하지 않은 경우 이 옵션을 활성화하여 빈 메시지( 본문 없음)를 대신 보낼 수 있습니다.

false

boolean

visibilityTimeout (consumer)

수신한 메시지가 com.amazonaws.services.sqs.model.SetQueueAttributesRequest에서 설정되도록 받은 메시지가 후속 검색 요청에서 숨겨진 기간(초)입니다. 이는 defaultVisibilityTimeout과 다른 경우에만 의미가 있습니다. 큐 표시 시간 초과 속성을 영구적으로 변경합니다.

 

정수

waitTimeSeconds (consumer)

ReceiveMessage 작업 호출이 응답에 포함될 대기열에 있을 때까지 대기할 시간(초)입니다.

 

정수

예외 처리기 (consumer)

소비자가 사용자 지정 ExceptionHandler를 사용하도록 하려면 다음을 수행합니다. bridgeErrorHandler 옵션이 활성화되어 있는지 확인한 후 이 옵션이 사용되지 않습니다. 기본적으로 소비자는 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

 

ExceptionHandler

exchangePattern (consumer)

소비자가 교환을 생성할 때 교환 패턴을 설정합니다.

 

ExchangePattern

pollStrategy (consumer)

플러그형 org.apache.camel.PollingConsumerPollingStrategy를 사용하면 Camel에서 Exchange를 생성하고 라우팅하기 전에 폴링 작업 중에 일반적으로 발생한 오류 처리를 제어하는 사용자 정의 구현을 제공할 수 있습니다.

 

PollingConsumerPoll Strategy

delaySeconds (producer)

몇 초 동안 메시지 전송이 지연됩니다.

 

정수

messageDeduplicationId 전략 (producer)

FIFO 대기열의 경우에만 해당합니다. messageDeduplicationId를 메시지에 설정하기 위한 전략입니다. 다음 옵션 중 하나일 수 있습니다. useExchangeId, useContentBasedDeduplication. useContentBasedDeduplication 옵션의 경우 messageDeduplicationId가 메시지에 설정되지 않습니다.

useExchangeId

MessageDeduplicationId Strategy

messageGroupIdStrategy (producer)

FIFO 대기열의 경우에만 해당합니다. 메시지에서 messageGroupId를 설정하는 전략입니다. 다음 옵션 중 하나일 수 있습니다. useConstant, useExchangeId, usePropertyValue. usePropertyValue 옵션의 경우 속성 CamelAwsMessageGroupId가 사용됩니다.

 

MessageGroupIdStrategy

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

backoffErrorThreshold (scheduler)

백오프Multipler를 시작하기 전에 발생해야 하는 후속 오류 폴링(일부 오류 발생) 수입니다.

 

int

backoffIdleThreshold (scheduler)

백오프Multipler를 시작하기 전에 발생해야 하는 후속 유휴 폴링 수입니다.

 

int

backoffMultiplier (scheduler)

예약된 폴링 소비자 백오프가 연속된 여러 개의 유휴/errors가 있는 경우 해당 행에 사용할 수 있습니다. multiplier는 다음 실제 시도가 다시 발생하기 전에 건너뛸 폴링 수입니다. 이 옵션을 사용하는 경우 backoffIdleThreshold 및/또는 backoffErrorThreshold도 구성해야 합니다.

 

int

지연 (scheduler)

다음 폴링보다 밀리초입니다. 60초(60초), 5m30초(5분 및 30초) 및 1h(1시간)와 같은 단위를 사용하여 시간 값을 지정할 수도 있습니다.

500

long

greedy (scheduler)

greedy가 활성화된 경우 ScheduledPollConsumer는 이전 실행이 1개 이상의 메시지를 폴링하면 즉시 다시 실행됩니다.

false

boolean

initialDelay (scheduler)

첫 번째 폴링이 시작되기 전까지의 밀리초입니다. 60초(60초), 5m30초(5분 및 30초) 및 1h(1시간)와 같은 단위를 사용하여 시간 값을 지정할 수도 있습니다.

1000

long

runLoggingLevel (scheduler)

소비자는 폴링할 때 시작/완료 로그 행을 기록합니다. 이 옵션을 사용하면 로깅 수준을 구성할 수 있습니다.

TRACE

LoggingLevel

scheduledExecutorService (scheduler)

소비자에 사용할 사용자 지정/공유 스레드 풀을 구성할 수 있습니다. 기본적으로 각 소비자는 자체 스레드 스레드 풀이 있습니다.

 

ScheduledExecutor Service

스케줄러 (scheduler)

camel-spring 또는 camel-quartz2 구성 요소에서 cron 스케줄러를 사용하려면

none

ScheduledPollConsumer Scheduler

스케줄러 속성 (scheduler)

사용자 지정 스케줄러 또는 Quartz2, Spring 기반 스케줄러를 사용할 때 추가 속성을 구성하려면 다음을 수행합니다.

 

map

StartScheduler (scheduler)

스케줄러가 자동으로 시작되어야 하는지 여부입니다.

true

boolean

timeUnit (scheduler)

initialDelay 및 지연 옵션의 시간 단위입니다.

밀리초

TimeUnit

UseFixedDelay (scheduler)

고정 지연 또는 고정 속도가 사용되는 경우 제어합니다. 자세한 내용은 JDK의 ScheduledExecutorService를 참조하십시오.

true

boolean

proxyHost (proxy)

SQS 클라이언트를 인스턴스화할 때 프록시 호스트를 정의하기 위해

 

문자열

proxyPort (proxy)

SQS 클라이언트를 인스턴스화할 때 프록시 포트 정의

 

정수

maximumMessageSize (queue)

SQS 메시지에는 이 큐에 대해 포함할 수 있는 maximumMessageSize(바이트 단위)입니다.

 

정수

messageRetentionPeriod (queue)

messageRetentionPeriod(초)는 이 대기열에 대해 SQS가 메시지를 유지합니다.

 

정수

정책 (queue)

이 큐의 정책

 

문자열

receiveMessageWaitTime Seconds (queue)

요청에 WaitTimeSeconds를 지정하지 않으면 대기 시간을 결정하는 데 queue 속성 ReceiveMessageWaitTimeSeconds를 사용합니다.

 

정수

redrivePolicy (queue)

DeadLetter 큐에 메시지를 보내는 정책을 지정합니다. 자세한 내용은 Amazon docs에서 참조하십시오.

 

문자열

accesskey (보안)

Amazon AWS Access Key

 

문자열

secretKey (security)

Amazon AWS Secret Key

 

문자열

필수 SQS 구성 요소 옵션

Amazon의 SQS에 액세스하려면 레지스트리 또는 accessKey 및 secretKey에 amazonSQSClient를 제공해야 합니다.

35.3. batch Consumer

이 구성 요소는 배치 소비자를 구현합니다.

예를 들어 이 배치에 있는 메시지 수를 알 수 있으며, 예를 들어 집계에서 이 메시지 수를 집계할 수 있습니다.

35.4. 사용법

35.4.1. SQS 생산자가 설정한 메시지 헤더

Expand
header유형설명

CamelAwsSqsMD5OfBody

문자열

Amazon SQS 메시지의 MD5 체크섬입니다.

CamelAwsSqsMessageId

문자열

Amazon SQS 메시지 ID.

CamelAwsSqsDelaySeconds

정수

Camel 2.11 부터 Amazon SQS 메시지가 다른 사람이 볼 수 있는 지연 시간.

35.4.2. SQS 소비자가 설정한 메시지 헤더

Expand
header유형설명

CamelAwsSqsMD5OfBody

문자열

Amazon SQS 메시지의 MD5 체크섬입니다.

CamelAwsSqsMessageId

문자열

Amazon SQS 메시지 ID.

CamelAwsSqsReceiptHandle

문자열

Amazon SQS 메시지 수신 핸들.

CamelAwsSqsAttributes

Map<String, String>

Amazon SQS 메시지 속성.

35.4.3. 고급 AmazonSQS 구성

Camel 애플리케이션이 방화벽 뒤에서 실행 중이거나 AmazonSQS 인스턴스 구성을 더 많이 제어해야 하는 경우 고유한 인스턴스를 생성할 수 있습니다.

AWSCredentials awsCredentials = new BasicAWSCredentials("myAccessKey", "mySecretKey");

ClientConfiguration clientConfiguration = new ClientConfiguration();
clientConfiguration.setProxyHost("http://myProxyHost");
clientConfiguration.setProxyPort(8080);

AmazonSQS client = new AmazonSQSClient(awsCredentials, clientConfiguration);

registry.bind("client", client);

Camel aws-sqs 구성 요소 구성에서 참조하십시오.

from("aws-sqs://MyQueue?amazonSQSClient=#client&delay=5000&maxMessagesPerPoll=5")
.to("mock:result");

35.5. 종속 항목

Maven 사용자는 다음 종속성을 pom.xml에 추가해야 합니다.

pom.xml

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-aws</artifactId>
    <version>${camel-version}</version>
</dependency>

여기서 ${camel-version}은 Camel의 실제 버전(2.6 이상)으로 교체해야 합니다.

35.6. JMS 스타일 선택기

SQS는 선택기를 허용하지 않지만 Camel Filter EIP를 사용하고 적절한 visibilityTimeout 을 설정하여 이를 효과적으로 달성할 수 있습니다. SQS가 메시지를 디스패치하면 DeleteMessage가 수신되지 않는 한 다른 소비자에게 메시지를 디스패치하려고 시도하기 전에 가시성 타임아웃까지 기다립니다. 기본적으로 Camel은 경로가 실패로 종료되지 않는 한 항상 DeleteMessage를 경로 끝에 보냅니다. 적절한 필터링을 수행하고 경로가 성공적으로 완료되는 경우에도 DeleteMessage를 보내지 않으려면 Filter를 사용합니다.

from("aws-sqs://MyQueue?amazonSQSClient=#client&defaultVisibilityTimeout=5000&deleteIfFiltered=false")
.filter("${header.login} == true")
.to("mock:result");

위의 코드에서 교환에 적절한 헤더가 없는 경우 필터를 통해 이를 수행하지 않으며 SQS 큐에서도 삭제되지 않습니다. 5000마초가 지나면 다른 사용자에게 메시지가 표시됩니다.

35.7. 예를 들면 다음과 같습니다.

  • Camel 구성
  • 구성 요소
  • 끝점
  • 시작하기
  • AWS 구성 요소

36장. AWS Simple Workflow 구성 요소

Camel 버전 2.13에서 사용 가능

Simple Workflow 구성 요소는 Amazon의 Simple Workflow 서비스에서 워크플로 관리를 지원합니다.

사전 요구 사항

유효한 Amazon Web Services 개발자 계정이 있어야 하며 Amazon Simple Workflow를 사용하려면 가입해야 합니다. 자세한 내용은 Amazon Simple Workflow 에서 확인할 수 있습니다.

36.1. URI 형식

aws-swf://<workflow|activity>[?options]

다음 형식 ?options=value&option2=value&…​로 URI에 쿼리 옵션을 추가할 수 있습니다.

36.2. URI 옵션

AWS Simple Workflow 구성 요소는 아래 나열된 5 가지 옵션을 지원합니다.

Expand
이름설명기본값유형

구성 (고급)

AWS SWF 기본 구성

 

SWFConfiguration

accesskey (공용)

Amazon AWS Access Key입니다.

 

문자열

secretKey (common)

Amazon AWS Secret Key.

 

문자열

region (공용)

Amazon AWS 리전.

 

문자열

resolveProperty Placeholders (advanced)

구성 요소가 시작 시 자체적으로 속성 자리 표시자를 확인해야 하는지 여부입니다. String 유형의 속성만 속성 자리 표시자를 사용할 수 있습니다.Only properties which are of String type can use property placeholders.

true

boolean

AWS Simple Workflow 엔드포인트는 URI 구문을 사용하여 구성됩니다.

aws-swf:type

다음 경로 및 쿼리 매개변수를 사용합니다.

36.2.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

type

필수 활동 또는 워크플로우

 

문자열

36.2.2. 쿼리 매개변수(30 매개변수):

Expand
이름설명기본값유형

AmazonSWClient (일반)

지정된 AmazonSimpleWorkflowClient를 클라이언트로 사용하기 위해

 

AmazonSimpleWorkflow Client

dataConverter (일반)

데이터 직렬화/데이저에 사용할 com.amazonaws.services.simpleworkflow.flow.DataConverter의 인스턴스입니다.

 

DataConverter

도메인 이름 (공용)

사용할 워크플로 도메인입니다.

 

문자열

eventname (common)

사용할 워크플로 또는 활동 이벤트 이름입니다.

 

문자열

region (공용)

Amazon AWS 리전.

 

문자열

버전 (공용)

사용할 워크플로 또는 활동 이벤트 버전입니다.

 

문자열

bridgeErrorHandler (consumer)

소비자를 Camel 라우팅 오류 처리기에 브리징할 수 있습니다. 이는 소비자가 들어오는 메시지를 선택하는 동안 예외가 발생한 것을 의미하며, 이제 메시지로 처리되어 라우팅 오류 처리기에 의해 처리됩니다. 기본적으로 소비자는 org.apache.camel.spi.ExceptionHandler를 사용하여 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

false

boolean

예외 처리기 (consumer)

소비자가 사용자 지정 ExceptionHandler를 사용하도록 하려면 다음을 수행합니다. bridgeErrorHandler 옵션이 활성화되어 있는지 확인한 후 이 옵션이 사용되지 않습니다. 기본적으로 소비자는 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

 

ExceptionHandler

exchangePattern (consumer)

소비자가 교환을 생성할 때 교환 패턴을 설정합니다.

 

ExchangePattern

클라이언트 구성 매개변수 (advanced)

맵의 키/값을 사용하여 ClientConfiguration을 구성하려면 다음을 수행합니다.

 

map

startWorkflowOptions 매개변수 (고급)

맵의 키/값을 사용하여 StartWorkflowOptions를 구성하려면 다음을 수행합니다.

 

map

sWClientParameters (advanced)

맵의 키/값을 사용하여 AmazonSimpleWorkflowClient를 구성하려면 다음을 수행합니다.

 

map

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

activityList (activity)

활동을 사용할 목록 이름입니다.

 

문자열

activitySchedulingOptions (activity)

활동 스케줄링 옵션

 

활동 일정 옵션

activityThreadPoolSize (activity)

작업에 대한 작업 풀의 최대 스레드 수입니다.

100

int

activityTypeExecution Options (activity)

활동 실행 옵션

 

ActivityTypeExecution Options

activityTypeRegistration Options (activity)

활동 등록 옵션

 

ActivityType RegistrationOptions

childPolicy (workflow)

워크플로를 종료할 때 하위 워크플로에서 사용할 정책입니다.

 

문자열

executionStartToClose Timeout (workflow)

실행 시작 시간을 닫기로 설정합니다.

3600

문자열

작업 (workflow)

워크플로 작업

START

문자열

signalName (workflow)

워크플로로 보낼 신호의 이름입니다.

 

문자열

stateResultType (workflow)

워크플로 상태를 쿼리할 때 결과 유형입니다.

 

문자열

taskStartToCloseTimeout (workflow)

작업 시작 시간을 닫기로 설정합니다.

600

문자열

terminationDetails (workflow)

워크플로 종료에 대한 세부 정보.

 

문자열

terminationReason (workflow)

워크플로를 종료하는 이유입니다.

 

문자열

workflowList (workflow)

워크플로우를 사용할 목록 이름입니다.

 

문자열

workflowTypeRegistration Options (workflow)

워크플로 등록 옵션

 

WorkflowType RegistrationOptions

accesskey (보안)

Amazon AWS Access Key입니다.

 

문자열

secretKey (security)

Amazon AWS Secret Key.

 

문자열

필수 SWF 구성 요소 옵션

Amazon의 Simple Workflow Service에 액세스하려면 레지스트리 또는 accessKey 및 secretKey에 amazonSWClient를 제공해야 합니다.

36.3. 사용법

36.3.1. SWF Workflow Producer에서 평가한 메시지 헤더

워크플로 생산자를 사용하면 워크플로와 상호 작용할 수 있습니다. 새 워크플로 실행을 시작하고, 상태를 쿼리하거나, 실행 중인 워크플로에 신호를 보내거나, 종료한 후 취소할 수 있습니다.

Expand
header유형설명

CamelSWFOperation

문자열

워크플로에서 수행할 작업입니다. 지원되는 작업은
SIGNAL, CANCEL, TERMINATE, GET_STATE, START, DESCRIBE, GET_HISTORY입니다.

CamelSWFWorkflowId

문자열

사용할 워크플로 ID입니다.

CamelAwsDdbKeyCamelSWFRunId

문자열

사용할 worfklow 실행 ID입니다.

CamelSWFStateResultType

문자열

워크플로 상태를 쿼리할 때 결과 유형입니다.

CamelSWFEventName

문자열

사용할 워크플로 또는 활동 이벤트 이름입니다.

CamelSWFVersion

문자열

사용할 워크플로 또는 활동 이벤트 버전입니다.

CamelSWFReason

문자열

워크플로를 종료하는 이유입니다.

CamelSWFDetails

문자열

워크플로 종료에 대한 세부 정보.

CamelSWFChildPolicy

문자열

워크플로를 종료할 때 하위 워크플로에서 사용할 정책입니다.

36.3.2. SWF Workflow Producer에서 설정한 메시지 헤더

Expand
header유형설명

CamelSWFWorkflowId

문자열

사용된 worfklow ID 또는 새로 생성된 ID입니다.

CamelAwsDdbKeyCamelSWFRunId

문자열

worfklow는 사용되거나 생성된 ID를 실행합니다.

36.3.3. SWF 워크플로 Consumer에서 설정한 메시지 헤더

워크플로 소비자는 워크플로 논리를 나타냅니다. 이 서비스가 시작되면 폴링 워크플로 결정 작업을 시작하고 처리합니다. 워크플로 소비자 경로 처리 외에도 워크플로 소비자 경로도 신호(플래시 생산자에서 종료) 또는 상태 쿼리를 수신합니다. 워크플로 소비자의 주요 목적은 활동 생산자를 사용하여 실행할 활동 작업을 예약하는 것입니다. 실제로 활동 작업은 워크플로 소비자가 시작한 스레드에서만 예약할 수 있습니다.

Expand
header유형설명

CamelSWFAction

문자열

CamelSWFActionExecute, CamelSWFSignalReceivedAction 또는 CamelSWFGetStateAction의 현재 이벤트임을 나타냅니다.

CamelSWFWorkflowReplaying

boolean

현재 결정 작업이 재생인지 여부를 나타냅니다.Indicates whether the current decision task is a replay.

CamelSWFWorkflowStartTime

long

이 결정 작업의 시작 이벤트 시간입니다.

36.3.4. SWF Activity Producer에서 설정한 메시지 헤더

활동 생산자를 사용하면 활동 작업을 예약할 수 있습니다. 활동 생산자는 워크플로 소비자에 의해 시작된 스레드에서만 사용할 수 있으며 워크플로 소비자가 시작한 동기 교환을 처리할 수 있습니다.

Expand
header유형설명

CamelSWFEventName

문자열

예약할 활동 이름입니다.

CamelSWFVersion

문자열

예약할 활동 버전입니다.

36.3.5. SWF 활동 소비자에 의해 설정된 메시지 헤더

Expand
header유형설명

CamelSWFTaskToken

문자열

수동으로 완료된 작업의 작업 완료를 보고하는 데 필요한 작업 토큰입니다.

36.3.6. 고급 AmazonSWClient 구성

AmazonSimpleWorkflowClient 인스턴스 구성을 더 많이 제어해야 하는 경우 고유한 인스턴스를 만들고 URI에서 해당 인스턴스를 참조할 수 있습니다.

#client 는 레지스트리의 AmazonSimpleWorkflowClient를 나타냅니다.

예를 들어 Camel 애플리케이션이 방화벽 뒤에서 실행 중인 경우입니다.

AWSCredentials awsCredentials = new BasicAWSCredentials("myAccessKey", "mySecretKey");
ClientConfiguration clientConfiguration = new ClientConfiguration();
clientConfiguration.setProxyHost("http://myProxyHost");
clientConfiguration.setProxyPort(8080);

AmazonSimpleWorkflowClient client = new AmazonSimpleWorkflowClient(awsCredentials, clientConfiguration);

registry.bind("client", client);

36.4. 종속 항목

Maven 사용자는 다음 종속성을 pom.xml에 추가해야 합니다.

pom.xml

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-aws</artifactId>
    <version>${camel-version}</version>
</dependency>

여기서 ${camel-version}은 Camel의 실제 버전(2.13 이상)으로 교체해야 합니다.

36.5. 예를 들면 다음과 같습니다.

  • Camel 구성
  • 구성 요소
  • 끝점
  • 시작하기

AWS 구성 요소

37장. AWS XRay 구성 요소

Camel 2.21로 사용 가능

camel-aws-xray 구성 요소는 AWS XRay 를 사용하여 들어오고 나가는 Camel 메시지를 추적하고 타이밍하는 데 사용됩니다.

Camel로/에서 전송되는 수신 및 발신 메시지의 경우 이벤트(서브스크립션)를 캡처합니다.

37.1. 종속성

AWS XRay 지원을 Camel에 포함시키려면 Camel 관련 AWS XRay 관련 클래스가 포함된 아카이브를 프로젝트에 추가해야 합니다. 또한 AWS XRay 라이브러리도 사용할 수 있어야 합니다.

AWS XRay 및 Camel을 모두 포함하기 위해 종속성은 다음 Maven 가져오기를 사용합니다.

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-xray-recorder-sdk-bom</artifactId>
        <version>1.3.1</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <dependencies>
      <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-aws-xray</artifactId>
      </dependency>

      <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-xray-recorder-sdk-core</artifactId>
      </dependency>
      <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-xray-recorder-sdk-aws-sdk</artifactId>
      </dependency>
  <dependencies>

37.2. 설정

AWS XRay tracer의 구성 속성은 다음과 같습니다.

Expand
옵션기본값설명

addExcludePatterns

 

패턴과 일치하는 Camel 메시지의 추적을 비활성화하는 exclude 패턴을 설정합니다. 콘텐츠는 키가 routeId와 일치하는 패턴인 Set<String>입니다. 이 패턴은 인터셉터의 규칙을 사용합니다.

setTracingStrategy

NoopTracingStrategy

BeanDefinition 또는 ProcessDefinition 과 같은 호출된 프로세서 정의를 추적하기 위해 사용자 정의 Camel InterceptStrategy 를 제공할 수 있습니다. TraceAnnotatedTracingStrategy 는 클래스 수준에서 @XRayTrace 주석이 포함된 .bean(…​) 또는 .process(…​) 를 통해 호출되는 모든 클래스를 추적합니다.

현재 AWS XRay 추적 프로그램을 구성하여 Camel 애플리케이션을 위한 분산 추적을 제공할 수 있는 방법은 한 가지뿐입니다.

37.2.1. 명시적인

AWS XRay Tracer와 관련된 특정 종속성과 함께 POM에 camel-aws-xray 구성 요소를 포함합니다.

AWS XRay 지원을 명시적으로 구성하려면 XRayTracer 를 인스턴스화하고 camel 컨텍스트를 초기화합니다. 선택적으로 추적기를 지정 하거나 레지스트리 또는 ServiceLoader 를 사용하여 암시적으로 검색할 수 있습니다.

XRayTracer xrayTracer = new XRayTracer();
// By default it uses a NoopTracingStrategy, but you can override it with a specific InterceptStrategy implementation.
xrayTracer.setTracingStrategy(...);
// And then initialize the context
xrayTracer.init(camelContext);

XML에서 XRayTracer를 사용하려면 AWS XRay 추적기 빈을 정의하는 것입니다. Camel은 자동으로 검색하고 사용할 수 있습니다.

  <bean id="tracingStrategy" class="..."/>
  <bean id="aws-xray-tracer" class="org.apache.camel.component.aws.xray.XRayTracer" />
    <property name="tracer" ref="tracingStrategy"/>
  </bean>

기본 NoopTracingStrategy 의 경우 교환 생성 및 삭제만 추적되지만 특정 빈 또는 EIP 패턴을 호출하지는 않습니다.

37.2.2. 포괄적인 경로 실행 추적

여러 경로 간에 교환 실행을 추적하기 위해 교환 시 고유한 추적 ID가 생성되고 해당 값을 아직 사용할 수 없는 경우 헤더에 저장됩니다. 이 추적 ID는 처리된 교환에 대한 일관된 관점을 유지하기 위해 새 교환에 복사됩니다.

AWS XRay 추적은 스레드-로컬 기반으로 작동하므로 현재 하위/세그는 새 스레드로 복사되고 AWS XRay 문서에 설명된 대로 설정해야 합니다. 따라서 Camel AWS XRay 구성 요소는 전달된 AWS XRay Entity 를 새 스레드로 설정하기 위해 구성 요소가 사용할 추가 헤더 필드를 제공하므로 실행된 경로와 관련이 없는 새로운 세그먼트를 공개하지 않고 추적된 데이터를 경로에 유지합니다.

구성 요소는 교환의 헤더에 있는 다음과 같은 상수를 사용합니다.

Expand
header설명

Camel-AWS-XRay-Trace-ID

호출된 경로에 대한 포괄적인 보기를 제공하는 AWS XRay TraceID 개체에 대한 참조가 포함되어 있습니다.

Camel-AWS-XRay-Trace-Entity

새 스레드로 복사되는 실제 AWS XRay Segment 또는 Subsegment 에 대한 참조가 포함되어 있습니다. 새 스레드가 생성되는 경우 이 헤더를 설정해야 하며 관련이 없는 새 세그먼트를 생성하는 대신 실행된 경로의 일부로 수행되는 작업을 노출해야 합니다.

AWS XRay Entity (예: SegmentSubsegment)는 직렬화할 수 없으므로 다른 JVM 프로세스에 전달해서는 안 됩니다.

37.3. 예제

이 프로젝트와 함께 제공되는 테스트 내에서 AWS XRay 추적을 구성하는 방법을 시연하는 예를 찾을 수 있습니다.

38장. Windows Azure Services용 Camel 구성 요소

Windows Azure Services 용 Camel 구성 요소는 Camel에서 Azure 서비스에 대한 연결을 제공합니다.

 

Expand
Azure ServiceCamel 구성 요소Camel 버전구성 요소 설명

Storage Blob 서비스

Azure-Blob

2.9.0

Blob 저장 및 검색 지원

스토리지 대기열 서비스

Azure-Queue

2.9.0

큐에 메시지 저장 및 검색 지원

39장. Azure Storage Blob Service 구성 요소

Camel 버전 2.19에서 사용 가능

Azure Blob 구성 요소는 Azure Storage Blob 서비스로 Blob을 저장하고 검색할 수 있도록 지원합니다.The Azure Blob component supports storing and retrieving the blobs to/from Azure Storage Blob service.

사전 요구 사항

유효한 Windows Azure Storage 계정이 있어야 합니다. 자세한 내용은 Azure 설명서 포털에서 확인할 수 있습니다.

39.1. URI 형식

azure-blob://accountName/containerName[/blobName][?options]

대부분의 경우 BlobName이 필요하며 Blob이 아직 없으면 생성됩니다.In most cases a blobName is required and the blob will be created if it does not already exist.
다음 형식으로 URI에 쿼리 옵션을 추가할 수 있습니다. ?options=value&option2=value&…​

예를 들어 camelazure 스토리지 계정의 container1 에 있는 공용 블록 Blob blockBlob 에서 Blob 콘텐츠를 다운로드하려면 다음 스니펫을 사용합니다.

from("azure-blob:camelazure/container1/blockBlob").
to("file://blobdirectory");

39.2. URI 옵션

Azure Storage Blob Service 구성 요소에는 옵션이 없습니다.

Azure Storage Blob 서비스 끝점은 URI 구문을 사용하여 구성됩니다.

azure-blob:containerOrBlobUri

다음 경로 및 쿼리 매개변수를 사용합니다.

39.2.1. 경로 매개 변수 (1 매개변수)

Expand
이름설명기본값유형

containerOrBlobUri

필수: 컨테이너 또는 Blob 컴팩트 URI.

 

문자열

39.2.2. 쿼리 매개변수(19 매개변수)

Expand
이름설명기본값유형

azureBlobClient (일반)

Blob 서비스 클라이언트입니다.

 

CloudBlob

BlobOffset (common)

업로드 또는 다운로드 작업의 Blob 오프셋을 설정하고 기본값은 0입니다.

0

long

blobType (common)

Blob 유형, blockblob 이 기본값입니다.

blockblob

BlobType

CloseStreamAfterRead (일반)

읽기 후 스트림을 닫거나 열어 두면 기본값은 true입니다.

true

boolean

인증 정보(공용)

대부분의 경우 필요한 스토리지 자격 증명을 설정합니다.

 

StorageCredentials

dataLength (common)

다운로드 또는 Blob 업로드 작업의 데이터 길이를 설정합니다.

 

long

fileDir (일반)

다운로드한 Blob이 저장되는 파일 디렉터리를 설정합니다.

 

문자열

publicForRead (일반)

스토리지 리소스는 콘텐츠를 읽을 수 있도록 공용이 될 수 있습니다. 이 속성을 사용하도록 설정한 경우 자격 증명을 설정할 필요가 없습니다.If this property is enabled, the credentials do not have to be set.

false

boolean

streamReadSize (일반)

Blob 콘텐츠를 읽을 때 바이트 단위로 최소 읽기 크기를 설정합니다.

 

int

bridgeErrorHandler (consumer)

소비자를 Camel 라우팅 오류 처리기에 브리징할 수 있습니다. 이는 발생한 모든 예외를 의미합니다(예: 소비자가 수신 메시지를 가져오려고 하는 동안) 이제 메시지로 처리되어 라우팅 오류 핸들러에 의해 처리됩니다. 기본적으로 소비자는 org.apache.camel.spi.ExceptionHandler 를 사용하여 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

false

boolean

예외 처리기 (consumer)

소비자가 사용자 지정 ExceptionHandler 를 사용하도록 하려면 다음을 수행합니다. bridgeErrorHandler 옵션이 활성화되면 이 옵션이 사용되지 않습니다. 기본적으로 소비자는 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

 

ExceptionHandler

exchangePattern (consumer)

소비자가 교환을 생성할 때 교환 패턴을 설정합니다.

 

ExchangePattern

BlobMetadata (producer)

Blob 메타데이터를 설정합니다.

 

map

blobPrefix (producer)

Blob을 나열하는 데 사용할 수 있는 접두사를 설정합니다.

 

문자열

CloseStreamAfterWrite (producer)

쓰기 후 스트림을 닫거나 열어 두면 기본값은 true입니다.

true

boolean

작업 (producer)

생산자에 대한 Blob 서비스 작업 힌트입니다.

listBlobs

BlobServiceOperations

streamWriteSize (producer)

블록 및 페이지 블록을 쓰기 위한 버퍼의 크기를 설정합니다.

 

int

useFlatListing (producer)

플랫 또는 계층적 Blob 목록을 사용해야 하는지 지정합니다.

true

boolean

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

필수 Azure Storage Blob 서비스 구성 요소 옵션

개인 Blob에 액세스해야 하는 경우 컨테이너OrBlob 이름과 자격 증명을 제공해야 합니다.

39.3. 사용법

39.3.1. Azure Storage Blob 서비스 생산자에서 설정한 메시지 헤더

Expand
header유형설명

CamelFileName

문자열

다운로드한 Blob 콘텐츠의 파일 이름입니다.

39.3.2. Azure Storage Blob 서비스 생산자가 설정한 메시지 헤더

Expand
header유형설명

CamelFileName

문자열

다운로드한 Blob 콘텐츠의 파일 이름입니다.

39.3.3. Azure Blob 서비스 작업

모든 블록 유형에 공통적인 작업

Expand
작업설명

getBlob

Blob의 내용을 가져옵니다.Gets the content of the blob. 이 작업의 출력을 Blob 범위로 제한할 수 있습니다.

deleteBlob

Blob을 삭제합니다.

listBlobs

Blob을 나열합니다.

블록 Blob 작업

Expand
작업설명

updateBlockBlob

새 블록 Blob을 만들거나 기존 블록 Blob 콘텐츠를 덮어쓰는 블록 Blob 콘텐츠를 배치합니다.

uploadBlobBlocks

먼저 Blob 블록 시퀀스를 생성한 다음 Blob에 커밋하여 블록 Blob 콘텐츠를 업로드합니다. 메시지 CommitBlockListLater 속성을 활성화하면 나중에 commitBlobBlockList 작업을 사용하여 커밋을 실행할 수 있습니다. 나중에 개별 블록 Blob을 업데이트할 수 있습니다.

commitBlobBlockList

Blob 블록의 시퀀스를 Blob 서비스에 이전에 업로드한 블록 목록에 커밋합니다(Update BlockBlob 작업을 CommitBlockListLater 속성과 함께 사용함).

getBlobBlockList

block blob 목록을 가져옵니다.

Blob 작업 추가

Expand
작업설명

createAppendBlob

추가 블록을 생성합니다. 기본적으로 블록이 이미 존재하는 경우 재설정되지 않습니다. 대신 AppendBlob 속성과 updateAppendBlob 작업을 사용하여 추가 Blob을 만들 수 있습니다.

updateAppendBlob

Blob에 새 콘텐츠를 추가합니다.Appends the new content to the blob. 이 작업은 또한 Blob이 아직 존재하지 않고 AppendBlobCreated 메시지를 사용하도록 설정한 경우 새로 생성합니다.

페이지 블록 작업

Expand
작업설명

createPageBlob

페이지 블록을 생성합니다. 기본적으로 블록이 이미 존재하는 경우 재설정되지 않습니다. 또한 PageBlob 속성과 updatePageBlob 작업을 사용하여 메시지 PageBlob 를 활성화하여 페이지 Blob을 만들고 내용을 설정할 수도 있습니다.

updatePageBlob

PageBlobCreated 속성 및 동일한 이름의 블록이 이미 존재하는 경우 페이지 블록을 만들고 이 Blob의 콘텐츠를 설정합니다.

resizePageBlob

페이지 Blob의 크기를 조정합니다.

clearPageBlob

Blob 페이지를 지웁니다.

getPageBlobRanges

Blob 페이지 범위를 가져옵니다.

39.3.4. Azure Blob 클라이언트 구성

Camel 애플리케이션이 방화벽 뒤에서 실행 중이거나 Azure Blob Client 구성을 더 많이 제어해야 하는 경우 고유한 인스턴스를 만들 수 있습니다.

StorageCredentials credentials = new StorageCredentialsAccountAndKey(accountName, accessKey);
CloudBlob client = new CloudBlockBlob(URI.create("https://"
                    + accountName + ".blob.core.windows.net/" + containerName
                    + "/" + fileName), credentials);
registry.bind("azureBlobClient", client);

Camel azure-blob 구성 요소 구성에서 이 인스턴스를 참조하십시오.

from("azure-blob://" + accountName + "/" + containerName + "/" + fileName + "?azureBlobClient=#client")
.to("mock:result");

39.4. 종속 항목

Maven 사용자는 pom.xml 에 다음 종속성을 추가해야 합니다.

pom.xml

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-azure</artifactId>
    <version>${camel-version}</version>
</dependency>

여기서 ${camel-version} 은 Camel의 실제 버전(2.19.0 이상)으로 교체해야 합니다.

39.5. 예를 들면 다음과 같습니다.

  • Camel 구성
  • 구성 요소
  • 끝점
  • 시작하기
  • Azure Component

40장. Azure Storage Queue Service 구성 요소

Camel 버전 2.19에서 사용 가능

Azure Queue 구성 요소는 Azure Storage 큐 서비스로 메시지를 저장하고 검색할 수 있도록 지원합니다.The Azure Queue component supports storing and retrieving the messages to/from Azure Storage Queue service.

사전 요구 사항

유효한 Windows Azure Storage 계정이 있어야 합니다. 자세한 내용은 Azure 설명서 포털에서 확인할 수 있습니다.

40.1. URI 형식

azure-queue://accountName/queueName[?options]

큐가 없으면 해당 큐가 생성됩니다.
다음 형식으로 URI에 쿼리 옵션을 추가할 수 있습니다. ?options=value&option2=value&…​

예를 들어 camelazure 스토리지 계정의 큐 메시지 대기열 에서 메시지 콘텐츠를 가져오려면 다음 스니펫을 사용합니다.

from("azure-queue:camelazure/messageQueue").
to("file://queuedirectory");

40.2. URI 옵션

Azure Storage Queue Service 구성 요소에는 옵션이 없습니다.

Azure Storage Queue Service 끝점은 URI 구문을 사용하여 구성됩니다.

azure-queue:containerAndQueueUri

다음 경로 및 쿼리 매개변수를 사용합니다.

40.2.1. 경로 매개 변수 (1 매개변수)

Expand
이름설명기본값유형

containerAndQueueUri

필수: 컨테이너 대기열 컴팩트 URI.

 

문자열

40.2.2. 쿼리 매개변수(10 매개변수)

Expand
이름설명기본값유형

azureQueueClient (일반)

큐 서비스 클라이언트입니다.

 

CloudQueue

인증 정보(공용)

대부분의 경우 필요한 스토리지 인증 정보 설정

 

StorageCredentials

bridgeErrorHandler (consumer)

소비자를 Camel 라우팅 오류 처리기에 브리징할 수 있습니다. 이는 발생한 모든 예외(예: 사용자가 수신 메시지를 가져오려고 하는 동안) 이제 메시지로 처리되어 라우팅 오류 핸들러에 의해 처리됩니다. 기본적으로 소비자는 org.apache.camel.spi.ExceptionHandler 를 사용하여 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

false

boolean

예외 처리기 (consumer)

소비자가 사용자 지정 ExceptionHandler 를 사용하도록 하려면 다음을 수행합니다. bridgeErrorHandler 옵션이 활성화되면 이 옵션이 사용되지 않습니다. 기본적으로 소비자는 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

 

ExceptionHandler

exchangePattern (consumer)

소비자가 교환을 생성할 때 교환 패턴을 설정합니다.

 

ExchangePattern

messageTimeToLive (producer)

Time to Live in seconds.

 

int

messageVisibilityDelay (producer)

메시지 표시 가능 지연 시간(초)입니다.

 

int

작업 (producer)

생산자에 대한 서비스 작업 힌트를 대기열에 넣습니다.

listQueues

QueueServiceOperations

queuePrefix (producer)

큐를 나열하는 데 사용할 수 있는 접두사를 설정합니다.

 

문자열

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

필수 Azure Storage Queue Service 구성 요소 옵션

containerAndQueue URI와 자격 증명을 제공해야 합니다.

40.3. 사용법

40.3.1. Azure Queue Service 작업

Expand
작업설명

listQueues

대기열을 나열합니다.

createQueue

큐를 만듭니다.

deleteQueue

큐를 삭제합니다.

addMessage

큐에 메시지를 추가합니다.

retrieveMessage

큐에서 메시지를 검색합니다.

peekMessage

예를 들어 큐 내의 메시지를 보고 메시지가 올바른 큐에 도착했는지 확인합니다.

updateMessage

큐에서 메시지를 업데이트합니다.

deleteMessage

큐에서 메시지를 삭제합니다.

40.3.2. Azure Queue Client 구성

Camel 애플리케이션이 방화벽 뒤에서 실행 중이거나 Azure Queue Client 구성을 더 많이 제어해야 하는 경우 고유한 인스턴스를 생성할 수 있습니다.

StorageCredentials credentials = new StorageCredentialsAccountAndKey("camelazure", "thekey");

CloudQueue client = new CloudQueue("camelazure", credentials);

registry.bind("azureQueueClient", client);

Camel azure-queue 구성 요소 구성에서 참조하십시오.

from("azure-queue:camelazure/messageQueue?azureQueueClient=#client")
.to("mock:result");

40.4. 종속 항목

Maven 사용자는 pom.xml 에 다음 종속성을 추가해야 합니다.

pom.xml

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-azure</artifactId>
    <version>${camel-version}</version>
</dependency>

여기서 ${camel-version} 은 Camel의 실제 버전(2.19.0 이상)으로 교체해야 합니다.

40.5. 예를 들면 다음과 같습니다.

  • Camel 구성
  • 구성 요소
  • 끝점
  • 시작하기
  • Azure Component

41장. Barcode DataFormat

Camel 버전 2.14로 사용 가능

바코드 데이터 형식은 zxing 라이브러리 를 기반으로 합니다. 이 구성 요소의 목표는 문자열(marshal) 및 바코드 이미지(unmarshal)에서 문자열에서 바코드 이미지를 생성하는 것입니다. zxing이 제공하는 모든 기능을 자유롭게 사용할 수 있습니다.

41.1. 종속 항목

camel 경로에서 바코드 데이터 형식을 사용하려면 이 데이터 형식을 구현하는 camel-barcode 에 종속성을 추가해야 합니다.

maven을 사용하는 경우 pom.xml에 다음을 추가하면 최신 및 가장 큰 릴리스의 버전 번호를 대체합니다(최신 버전의 다운로드 페이지 참조).

<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-barcode</artifactId>
  <version>x.x.x</version>
</dependency>

41.2. Barcode Options

Barcode dataformat은 아래에 나열된 5 가지 옵션을 지원합니다.

Expand
이름기본값Java Type설명

width

 

정수

바코드의 너비입니다.

height

 

정수

바코드의 높이

imageType

 

문자열

png과 같은 바코드의 이미지 유형

barcodeFormat

 

문자열

QR-Code와 같은 Barcode 형식

contentTypeHeader

false

부울

데이터 형식이 데이터 형식에서 수행할 수 있는 경우 데이터 형식의 유형으로 Content-Type 헤더를 설정해야 하는지 여부입니다. 예를 들어 데이터 형식을 XML로 마샬링하거나, JSon으로 마샬링되는 데이터 형식에 대한 application/json 등이 있습니다.

41.3. Java DSL 사용

먼저 바코드 데이터 fomat 클래스를 초기화해야합니다. 기본 생성자를 사용하거나 매개 변수화된 중 하나를 사용할 수 있습니다(JavaDoc 참조). 기본값은 다음과 같습니다.

Expand
매개변수기본값

이미지 유형 (BarcodeImageType)

PNG

width

100px

높이

100px

인코딩

UTF-8

Barcode 형식 (BarcodeFormat)

QR-Code

// QR-Code default
DataFormat code = new BarcodeDataFormat();

zxing 힌트를 사용하려면 BarcodeDataFormat 인스턴스의 'addToHintMap' 메서드를 사용할 수 있습니다.

code.addToHintMap(DecodeHintType.TRY_HARDER, Boolean.true);

가능한 힌트는 xzing 설명서를 참조하십시오.

41.3.1. 마샬링

from("direct://code")
  .marshal(code)
  .to("file://barcode_out");

다음을 사용하여 테스트 클래스에서 경로를 호출할 수 있습니다.

template.sendBody("direct://code", "This is a testmessage!");

이 이미지 안에 'barcode_out' 폴더를 찾을 수 있습니다.

image

41.3.2. unmarshalling

unmarshaller는 일반적인 것입니다. unmarshalling의 경우 BarcodeDataFormat 인스턴스를 사용할 수 있습니다. 두 개의 인스턴스가 있는 경우, QR-Code용이고 다른 하나는 PDF417용이므로 어떤 인스턴스가 사용될지 중요하지 않습니다.

from("file://barcode_in?noop=true")
  .unmarshal(code) // for unmarshalling, the instance doesn't matter
  .to("mock:out");

위의 QR-Code 이미지를 'barcode_in' 폴더에 붙여 넣으면, 이는 모크 내부에 testmessage! 임을 알 수 있습니다. 바코드 데이터 형식을 헤더 변수로 찾을 수 있습니다.

Expand
이름유형설명

BarcodeFormat

문자열

com.google.zxing.BarcodeFormat의 값입니다.

 

 

42장. Base64 DataFormat

Camel 버전 2.11로 사용 가능

Base64 데이터 형식은 base64 인코딩 및 디코딩에 사용됩니다.

42.1. 옵션

Base64 dataformat은 아래 나열된 4가지 옵션을 지원합니다.

Expand
이름기본값Java Type설명

lineLength

76

정수

인코딩된 데이터의 최대 줄 길이를 지정합니다. 76 기본적으로 사용됩니다.

lineSeparator

 

문자열

사용할 줄 구분 기호입니다. 기본적으로 새 줄 문자(CRLF)를 사용합니다.

urlSafe

false

부울

'' 및 '/'를 내보내는 대신 '-' 및 '_'를 각각 내보냅니다. urlSafe는 작업 인코딩에만 적용됩니다. 디코딩은 두 모드를 모두 원활하게 처리합니다. 기본값은 false입니다.

contentTypeHeader

false

부울

데이터 형식이 데이터 형식에서 수행할 수 있는 경우 데이터 형식의 유형으로 Content-Type 헤더를 설정해야 하는지 여부입니다. 예를 들어 데이터 형식을 XML로 마샬링하거나, JSon으로 마샬링되는 데이터 형식에 대한 application/json 등이 있습니다.

Spring DSL에서는 다음 태그를 사용하여 데이터 형식을 구성합니다.

<camelContext>
    <dataFormats>
        <!-- for a newline character (\n), use the HTML entity notation coupled with the ASCII code. -->
        <base64 lineSeparator="&#10;" id="base64withNewLine" />
        <base64 lineLength="64" id="base64withLineLength64" />
    </dataFormats>
    ...
</camelContext>

그런 다음 나중에 해당 참조를 사용할 수 있습니다.

<route>
     <from uri="direct:startEncode" />
     <marshal ref="base64withLineLength64" />
     <to uri="mock:result" />
</route>

대부분의 경우 기본 옵션을 사용하는 경우 데이터 형식을 선언할 필요가 없습니다. 이 경우 다음과 같이 인라인 데이터 형식을 선언할 수 있습니다.In that case, you can declare the data format inline as shown below.

42.2. Marshal

이 예제에서는 파일 내용을 base64 개체로 마샬링합니다.

from("file://data.bin")
    .marshal().base64()
    .to("jms://myqueue");

Spring DSL에서 다음을 수행합니다.

 <from uri="file://data.bin">
 <marshal>
     <base64/>
 </marshal>
 <to uri="jms://myqueue"/>

42.3. unmarshal

이 예제에서는 newOrder 프로세서에서 처리되기 전에 JMS 대기열에서 byte[] 오브젝트로 페이로드를 분리합니다.

from("jms://queue/order")
    .unmarshal().base64()
    .process("newOrder");

Spring DSL에서 다음을 수행합니다.

 <from uri="jms://queue/order">
 <marshal>
     <base64/>
 </marshal>
 <to uri="bean:newOrder"/>

42.4. 종속 항목

Camel 경로에서 Base64를 사용하려면 이 데이터 형식을 구현하는 camel-base64 에 종속성을 추가해야 합니다.

Maven을 사용하는 경우 pom.xml에 다음을 추가할 수 있습니다.

<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-base64</artifactId>
  <version>x.x.x</version>  <!-- use the same version as your Camel core version -->
</dependency>

43장. 빈 구성 요소

Camel 버전 1.0에서 사용 가능

빈: 구성 요소는 Camel 메시지 교환에 빈을 바인딩합니다.

43.1. URI 형식

bean:beanName[?options]

여기서 beanID 는 레지스트리에서 빈을 찾는 데 사용되는 문자열일 수 있습니다.

43.2. 옵션

Bean 구성 요소에는 옵션이 없습니다.

Bean 엔드포인트는 URI 구문을 사용하여 구성됩니다.

bean:beanName

다음 경로 및 쿼리 매개변수를 사용합니다.

43.2.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

beanName

필요한 빈의 이름 설정

 

문자열

43.2.2. 쿼리 매개변수 (5 매개변수):

Expand
이름설명기본값유형

방법 (producer)

빈에서 호출할 메서드의 이름을 설정합니다.

 

문자열

cache (advanced)

이 기능을 활성화하면 Camel이 첫 번째 레지스트리 조회 결과를 캐시합니다. 레지스트리의 빈이 Singleton 범위로 정의된 경우 캐시를 활성화할 수 있습니다.

false

boolean

multiParameterArray (advanced)

더 이상 사용되지 않는 방법 메시지 본문에서 전달되는 매개 변수를 처리하는 방법; true인 경우 메시지 본문이 매개 변수의 배열이어야 합니다. 참고: 이 옵션은 Camel에 의해 내부적으로 사용되며 최종 사용자가 사용할 수 없습니다. 사용 중단 참고: 이 옵션은 Camel에 의해 내부적으로 사용되며 최종 사용자가 사용할 수 없습니다.

false

boolean

매개변수 (고급)

빈에서 추가 속성을 구성하는 데 사용됩니다.

 

map

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

다음 형식 ?option=value&option=value&…​로 URI에 쿼리 옵션을 추가할 수 있습니다.

43.3. 사용

메시지를 사용하는 데 사용되는 오브젝트 인스턴스는 레지스트리에 명시적으로 등록되어 있어야 합니다. 예를 들어 Spring을 사용하는 경우 Spring 구성, spring.xml 에 빈을 정의해야 합니다. 또는 JNDI에 빈을 등록하여 Spring을 사용하지 않는 경우.

오류 형식 매크로: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20

엔드포인트가 등록되면 이를 사용하여 Exchange를 처리하는 Camel 경로를 빌드할 수 있습니다.

빈: 엔드포인트는 경로에 대한 입력으로 정의할 수 없습니다. 즉, 일부 인바운드 메시지 끝점에서 빈 엔드포인트로만 라우팅할 수 없습니다. 따라서 직접: 또는 queue: 엔드포인트를 입력으로 사용하는 것이 좋습니다.

ProxyHelper 에서 createProxy() 메서드를 사용하여 BeanExchanges를 생성하고 모든 끝점으로 보내는 프록시를 생성할 수 있습니다.

Spring DSL을 사용하는 것과 동일한 경로:

<route>
   <from uri="direct:hello">
   <to uri="bean:bye"/>
</route>

43.4. 끝점으로 빈

Camel은 또한 Endpoint로 Bean 호출을 지원합니다. 아래 경로에서:

교환이 myBean Camel로 라우팅되면 빈을 호출하기 위해 빈을 호출합니다.
빈의 소스는 일반 POJO에 불과합니다.

Camel은 Exchange의 In body를 String 유형으로 변환하고 Exchange Out body에 메서드 출력을 저장하여 sayHello 메서드를 호출합니다.

43.5. Java DSL 빈 구문

Java DSL은 빈 구성 요소에 대한 구문 분석 설 탕과 함께 제공됩니다. 빈을 엔드포인트(예: ("bean:beanName"))로 명시적으로 지정하는 대신 다음 구문을 사용할 수 있습니다.

// Send message to the bean endpoint
// and invoke method resolved using Bean Binding.
from("direct:start").beanRef("beanName");

// Send message to the bean endpoint
// and invoke given method.
from("direct:start").beanRef("beanName", "methodName");

빈에 참조 이름을 전달하는 대신( Camel이 레지스트리에서 해당 참조를 조회할 예정) 빈 자체를 지정할 수 있습니다.

// Send message to the given bean instance.
from("direct:start").bean(new ExampleBean());

// Explicit selection of bean method to be invoked.
from("direct:start").bean(new ExampleBean(), "methodName");

// Camel will create the instance of bean and cache it for you.
from("direct:start").bean(ExampleBean.class);

43.6. 빈 바인딩

빈 메서드를 호출하는 방법( 메서드 매개 변수를 통해 명시적으로 지정되지 않은 경우) 및 메시지에서 매개 변수 값을 구성하는 방법은 모두 Camel의 다양한 빈 통합 메커니즘에서 사용되는 Bean Binding 메커니즘에 의해 정의됩니다.

43.7. 예를 들면 다음과 같습니다.

  • Camel 구성
  • 구성 요소
  • 끝점
  • 시작하기
  • 클래스 구성 요소
  • 빈 바인딩
  • 빈 통합

44장. BeanIO DataFormat

Camel 버전 2.10에서 사용 가능

BeanIO 데이터 형식은 BeanIO 를 사용하여 플랫 페이로드(예: XML, CSV, 구분된 또는 고정 길이 형식)를 처리합니다.

BeanIO는 플랫 형식에서 POJO(Object)에 대한 매핑을 정의하는 매핑 XML 파일을 사용하여 구성됩니다. 이 매핑 파일은 사용하기 위해 필수입니다.

44.1. 옵션

BeanIO dataformat은 아래에 나열된 9가지 옵션을 지원합니다.

Expand
이름기본값Java Type설명

mapping

 

문자열

BeanIO 매핑 파일. 기본적으로 classpath에서 로드됩니다. file:, http: 또는 classpath: 접두사를 추가하여 매핑 파일을 로드할 위치를 나타낼 수 있습니다.

streamName

 

문자열

사용할 스트림의 이름입니다.

ignoreUnidentifiedRecords

false

부울

확인되지 않은 레코드를 무시할지 여부입니다.

ignoreUnexpectedRecords

false

부울

예기치 않은 레코드를 무시할지 여부입니다.

ignoreInvalidRecords

false

부울

유효하지 않은 레코드를 무시할지 여부입니다.

인코딩

 

문자열

사용할 문자입니다. 기본적으로 JVM 플랫폼 기본 charset입니다.

beanReaderErrorHandlerType

 

문자열

사용자 지정 org.apache.camel.dataformat.beanio.BeanIOErrorHandler를 구문 분석하는 동안 오류 처리기로 사용하려면 다음을 수행합니다. 오류 처리기의 정규화된 클래스 이름을 구성합니다.Configure the fully qualified class name of the error handler. 사용자 지정 오류 처리기를 사용할 때 ignoreUnidentifiedRecords, ignoreUnectedRecords 및 ignoreInvalidRecords 옵션이 사용되지 않을 수 있습니다.

unmarshalSingleObject

false

부울

이 옵션은hal을 오브젝트 목록 또는 단일 개체로만 구분할지 여부를 제어합니다. 전자는 기본 모드이며, 후자는 빈io가 Camel 메시지를 단일 POJO 빈에 매핑하는 특수 사용 사례에서만 사용됩니다.

contentTypeHeader

false

부울

데이터 형식이 데이터 형식에서 수행할 수 있는 경우 데이터 형식의 유형으로 Content-Type 헤더를 설정해야 하는지 여부입니다. 예를 들어 데이터 형식을 XML로 마샬링하거나, JSon으로 마샬링되는 데이터 형식에 대한 application/json 등이 있습니다.

44.2. 사용법

매핑 파일의 예는 다음과 같습니다.

44.2.1. Java DSL 사용

BeanIODataFormat 을 사용하려면 매핑 파일 및 스트림 이름으로 데이터 형식을 구성해야 합니다.
Java DSL에서는 다음과 같이 수행할 수 있습니다. streamName은 "employeeFile"입니다.

그 다음에는 두 개의 경로가 있습니다. 첫 번째 경로는 CSV 데이터를 List<Employee> Java 오브젝트로 변환하는 것입니다. 그런 다음 분할하므로, mock endpoint
는 각 행에 대한 메시지를 수신합니다.

두 번째 경로는 역방향 작업에서 List<Employee>를 CSV 데이터 스트림으로 변환하는 것입니다.

CSV 데이터는 예를 들면 다음과 같습니다.

44.2.2. XML DSL 사용

XML에서 BeanIO 데이터 형식을 사용하려면 아래와 같이 <beanio> XML 태그를 사용하여 구성해야 합니다. 경로는 위의 예와 유사합니다.

44.3. 종속 항목

Camel 경로에서 BeanIO를 사용하려면 이 데이터 형식을 구현하는 camel-beanio 에 종속성을 추가해야 합니다.

Maven을 사용하는 경우 pom.xml에 다음을 추가하여 최신 및 가장 큰 릴리스의 버전 번호를 대체합니다(최신 버전의 다운로드 페이지 참조).

<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-beanio</artifactId>
  <version>2.10.0</version>
</dependency>

45장. Beanstalk 구성 요소

Camel 버전 2.15에서 사용 가능

Camel-beanstalk 프로젝트는 Beanstalk 작업의 작업 검색 및 후처리를 위한 Camel 구성 요소를 제공합니다.

Beanstalk 작업 라이프사이클에 대한 자세한 설명은 Beanstalk 프로토콜 에서 확인할 수 있습니다.

45.1. 종속 항목

Maven 사용자는 pom.xml에 다음 종속성을 추가해야 합니다.

<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-beanstalk</artifactId>
  <version>${camel-version}</version>
</dependency>

여기서 ${camel-version}은 Camel의 실제 버전(2.15.0 이상)으로 교체해야 합니다.

45.2. URI 형식

beanstalk://[host[:port]][/tube][?options]

포트 또는 포트 모두 생략할 수 있습니다. 빈stalk의 경우 기본값은("local host " 및 11300)입니다.  튜 브를 생략하면 Be anstalk 구성 요소는 "default"라는 이름의 튜브를 사용합니다.

청취 할 때, 당신은 아마 여러 튜브에서 일자리를보고 싶을 수 있습니다. 더하기 기호로 구분하십시오(예:).

beanstalk://localhost:11300/tube1+tube2

튜브 이름은 URL 디코딩되므로, 튜브 이름에 + 또는 ?와 같은 특수 문자가 포함되어 있는 경우 URL을 적절히 코딩하거나 RAW 구문을 사용해야 합니다. 자세한 내용은 여기 를 참조하십시오.

따라서 Beanstalk에 작업을 작성할 때 여러 개의 튜브를 지정할 수 없습니다.

45.3. Beanstalk 옵션

Beanstalk 구성 요소는 아래 나열된 두 가지 옵션을 지원합니다.

Expand
이름설명기본값유형

connectionSettings Factory (일반)

Custom ConnectionSettingsFactory. Beanstalkd에 연결하는 데 사용할 ConnectionSettingsFactory를 지정합니다. 특히 빈stalkd 데몬없이 단위 테스트에 유용합니다 (파크 ConnectionSettings를 사용할 수 있음)

 

ConnectionSettings Factory

resolveProperty Placeholders (advanced)

구성 요소가 시작 시 자체적으로 속성 자리 표시자를 확인해야 하는지 여부입니다. String 유형의 속성만 속성 자리 표시자를 사용할 수 있습니다.Only properties which are of String type can use property placeholders.

true

boolean

Beanstalk 끝점은 URI 구문을 사용하여 구성됩니다.

beanstalk:connectionSettings

다음 경로 및 쿼리 매개변수를 사용합니다.

45.3.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

connectionSettings

연결 설정 host:port/tube

 

문자열

45.3.2. 쿼리 매개변수(26 매개변수):

Expand
이름설명기본값유형

command (common)

작업을 Beanstalk에 배치하는 것을 의미합니다. 작업 본문이 Camel 메시지 본문에 지정되어 있습니다. 작업 ID는 빈stalk.jobId 메시지 헤더에서 반환됩니다. delete, release, touch 또는 bury가 메시지 헤더 빈stalk.jobId의 작업 ID를 예상합니다. 이 작업의 결과는 빈stalk.result 메시지 헤더에서 반환되면 메시지 본문에 작업 수가 붙은 후 헤더 빈stalk.result에서 실제로 시작된 작업 수를 반환합니다.

 

BeanstalkCommand

JobDelay (일반)

작업을 초 단위로 지연합니다.

0

int

jobPriority (일반)

작업 우선 순위. (0이 가장 높은 것은 Beanstalk 프로토콜을 참조함)

1000

long

jobTimeToRun (common)

작업 시간(초 단위로 실행할 시간 0일 경우, 빈스talkd 데몬이 자동으로 1로 발생함)은 Beanstalk 프로토콜을 참조하십시오.

60

int

WaitJob (consumer)

빈stalk에서 작업을 시작하기 전에 작업이 완료될 때까지 대기하는지 여부

true

boolean

bridgeErrorHandler (consumer)

소비자를 Camel 라우팅 오류 처리기에 브리징할 수 있습니다. 이는 소비자가 들어오는 메시지를 선택하는 동안 예외가 발생한 것을 의미하며, 이제 메시지로 처리되어 라우팅 오류 처리기에 의해 처리됩니다. 기본적으로 소비자는 org.apache.camel.spi.ExceptionHandler를 사용하여 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

false

boolean

OnFailure( consumer)

처리할 때 사용할 명령이 실패했습니다.

 

BeanstalkCommand

sendEmptyMessageWhenIdle (consumer)

폴링 소비자가 파일을 폴링하지 않은 경우 이 옵션을 활성화하여 빈 메시지( 본문 없음)를 대신 보낼 수 있습니다.

false

boolean

useBlockIO (consumer)

blockIO를 사용할지 여부입니다.

true

boolean

예외 처리기 (consumer)

소비자가 사용자 지정 ExceptionHandler를 사용하도록 하려면 다음을 수행합니다. bridgeErrorHandler 옵션이 활성화되어 있는지 확인한 후 이 옵션이 사용되지 않습니다. 기본적으로 소비자는 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

 

ExceptionHandler

exchangePattern (consumer)

소비자가 교환을 생성할 때 교환 패턴을 설정합니다.

 

ExchangePattern

pollStrategy (consumer)

플러그형 org.apache.camel.PollingConsumerPollingStrategy를 사용하면 Camel에서 Exchange를 생성하고 라우팅하기 전에 폴링 작업 중에 일반적으로 발생한 오류 처리를 제어하는 사용자 정의 구현을 제공할 수 있습니다.

 

PollingConsumerPoll Strategy

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

backoffErrorThreshold (scheduler)

백오프Multipler를 시작하기 전에 발생해야 하는 후속 오류 폴링(일부 오류 발생) 수입니다.

 

int

backoffIdleThreshold (scheduler)

백오프Multipler를 시작하기 전에 발생해야 하는 후속 유휴 폴링 수입니다.

 

int

backoffMultiplier (scheduler)

예약된 폴링 소비자 백오프가 연속된 여러 개의 유휴/errors가 있는 경우 해당 행에 사용할 수 있습니다. multiplier는 다음 실제 시도가 다시 발생하기 전에 건너뛸 폴링 수입니다. 이 옵션을 사용하는 경우 backoffIdleThreshold 및/또는 backoffErrorThreshold도 구성해야 합니다.

 

int

지연 (scheduler)

다음 폴링보다 밀리초입니다. 60초(60초), 5m30초(5분 및 30초) 및 1h(1시간)와 같은 단위를 사용하여 시간 값을 지정할 수도 있습니다.

500

long

greedy (scheduler)

greedy가 활성화된 경우 ScheduledPollConsumer는 이전 실행이 1개 이상의 메시지를 폴링하면 즉시 다시 실행됩니다.

false

boolean

initialDelay (scheduler)

첫 번째 폴링이 시작되기 전까지의 밀리초입니다. 60초(60초), 5m30초(5분 및 30초) 및 1h(1시간)와 같은 단위를 사용하여 시간 값을 지정할 수도 있습니다.

1000

long

runLoggingLevel (scheduler)

소비자는 폴링할 때 시작/완료 로그 행을 기록합니다. 이 옵션을 사용하면 로깅 수준을 구성할 수 있습니다.

TRACE

LoggingLevel

scheduledExecutorService (scheduler)

소비자에 사용할 사용자 지정/공유 스레드 풀을 구성할 수 있습니다. 기본적으로 각 소비자는 자체 스레드 스레드 풀이 있습니다.

 

ScheduledExecutor Service

스케줄러 (scheduler)

camel-spring 또는 camel-quartz2 구성 요소에서 cron 스케줄러를 사용하려면

none

ScheduledPollConsumer Scheduler

스케줄러 속성 (scheduler)

사용자 지정 스케줄러 또는 Quartz2, Spring 기반 스케줄러를 사용할 때 추가 속성을 구성하려면 다음을 수행합니다.

 

map

StartScheduler (scheduler)

스케줄러가 자동으로 시작되어야 하는지 여부입니다.

true

boolean

timeUnit (scheduler)

initialDelay 및 지연 옵션의 시간 단위입니다.

밀리초

TimeUnit

UseFixedDelay (scheduler)

고정 지연 또는 고정 속도가 사용되는 경우 제어합니다. 자세한 내용은 JDK의 ScheduledExecutorService를 참조하십시오.

true

boolean

생산자 동작은 수행할 작업을 수행할 수 있음을 나타내는 command 매개 변수의 영향을 받습니다.

소비자는 예약 후 즉시 작업을 삭제하거나 Camel 경로를 처리할 때까지 기다릴 수 있습니다. 첫 번째 시나리오는 "message 대기열"과 유사하지만 두 번째 시나리오는 "작업 대기열"과 유사합니다. 이 동작은 기본적으로 Beanstalkd 특성을 따르는 consumer.awaitJob 매개변수에 의해 제어됩니다. 

동기식일 때 소비자는 작업 완료 시 삭제 되고 실패 시 버퍼 를 호출합니다. URI에 consumer.onFailure 매개변수를 지정하여 실패할 경우 실행할 명령을 선택할 수 있습니다. burydelete 또는 release 값을 사용할 수 있습니다.

부울 매개변수 consumer.useBlockIO 는 JavaBeanstalkClient 라이브러리에서 동일한 매개변수에 해당합니다. 기본값은 true 입니다.

실패한 작업이 즉시 동일한 튜브에서 사용할 수 있으므로 릴리스 를 지정할 때는 소비자가 다시 취득하려고 합니다. jobDelay 를 릴리스 하고 지정할 수 있습니다.

빈stalk 소비자는 스케줄링된 Polling Consumer 이므로 소비자가 폴링해야 하는 빈도와 같이 구성할 수 있는 옵션이 더 많다는 것을 의미합니다. 자세한 내용은 소비자 회의를 참조하십시오.

45.4. 소비자 헤더

소비자는 Exchange 메시지에 여러 작업 헤더를 저장합니다.

Expand
속성유형설명

beanstalk.jobId

long

Job ID

beanstalk.tube

string

이 작업을 포함하는 튜브의 이름

beanstalk.state

string

"ready" 또는 "delayed" 또는 "reserved" 또는 "buried" 또는 "예약"입니다.

beanstalk.priority

long

우선순위 값 설정

beanstalk.age

int

이 작업을 생성한 put 명령의 시간(초)

beanstalk.time-left

int

서버가 이 작업을 준비 대기열에 배치할 때까지 남은 시간(초)

beanstalk.timeouts

int

이 작업이 예약 중 시간 초과된 횟수

beanstalk.releases

int

고객이 예약에서 이 작업을 해제한 횟수

beanstalk.buries

int

이 작업의 수가 묻어졌습니다.

beanstalk.kicks

int

이 작업이 실행된 횟수입니다.

45.5. 예제

이 Camel 구성 요소를 사용하면 처리 작업을 요청하고 Beanstalkd 데몬에 제공할 수 있습니다. 간단한 데모 경로는 다음과 같을 수 있습니다.

from("beanstalk:testTube").
   log("Processing job #${property.beanstalk.jobId} with body ${in.body}").
   process(new Processor() {
     @Override
     public void process(Exchange exchange) {
       // try to make integer value out of body
       exchange.getIn().setBody( Integer.valueOf(exchange.getIn().getBody(classOf[String])) );
     }
   }).
   log("Parsed job #${property.beanstalk.jobId} to body ${in.body}");
from("timer:dig?period=30seconds").
   setBody(constant(10)).log("Kick ${in.body} buried/delayed tasks").
   to("beanstalk:testTube?command=kick");

첫 번째 경로에서 우리는 튜브 "테스트Tube"에서 새로운 작업을 듣고 있습니다. 도착하면 메시지 본문에서 정수 값을 구문 분석하려고 합니다. 성공적으로 완료되면 이를 기록하고 이를 성공적으로 교환하면 Camel 구성 요소가 Beanstalk에서 이 작업을 자동으로 삭제할 수 있습니다. 반대로 작업 데이터를 구문 분석할 수 없는 경우 교환 실패와 Camel 구성 요소가 기본적으로 이를 제거하므로 나중에 처리할 수 있거나 실패한 작업을 수동으로 검사할 수 있습니다. 

따라서 두 번째 경로는 주기적으로 Beanstalk를 요청하여 일반 대기열에서 10  의 작업을 묻거나/또는 지연된 상태로 실행합니다.

 

45.6. 예를 들면 다음과 같습니다.

  • Camel 구성
  • 구성 요소
  • 끝점
  • 시작하기

46장. 빈 유효성 검사 구성 요소

Camel 버전 2.3에서 사용 가능

Validator 구성 요소는 Java Bean Validation API(JSR 303)를 사용하여 메시지 본문의 빈 유효성 검사를 수행합니다. Camel은 Hibernate Validator 인 참조 구현을 사용합니다.

Maven 사용자는 이 구성 요소를 위해 다음 종속성을 pom.xml 에 추가해야 합니다.

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-bean-validator</artifactId>
    <version>x.y.z</version>
    <!-- use the same version as your Camel core version -->
</dependency>

46.1. URI 형식

bean-validator:label[?options]

또는

bean-validator://label[?options]

여기서 레이블 은 끝점을 설명하는 임의의 텍스트 값입니다.
다음 형식 ?option=value&option=value&…​로 URI에 쿼리 옵션을 추가할 수 있습니다.

46.2. URI 옵션

Bean Validator 구성 요소에는 옵션이 없습니다.

Bean Validator 엔드포인트는 URI 구문을 사용하여 구성됩니다.

bean-validator:label

다음 경로 및 쿼리 매개변수를 사용합니다.

46.2.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

label

필수 Where label는 끝점을 설명하는 임의의 텍스트 값입니다.

 

문자열

46.2.2. 쿼리 매개변수(6 매개변수):

Expand
이름설명기본값유형

constraintValidatorFactory (producer)

사용자 정의 ConstraintValidatorFactory를 사용하려면

 

ConstraintValidator Factory

그룹 (producer)

사용자 정의 검증 그룹 사용

javax.validation.groups.Default

문자열

messageInterpolator (producer)

사용자 지정 MessageInterpolator 사용

 

MessageInterpolator

traversableResolver (producer)

사용자 정의 TraversableResolver 사용

 

TraversableResolver

validationProviderResolver (producer)

사용자 정의 ValidationProviderResolver를 사용하려면

 

ValidationProvider Resolver

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

46.3. OSGi 배포

OSGi 환경에서 Hibernate Validator를 사용하려면 org.apache.camel.component.bean.validator.Hibernate ValidationProviderResolver 와 마찬가지로 전용 ValidationProviderResolver 구현을 사용합니다. 아래 코드 조각은 이 방법을 보여줍니다. Camel 2.13.0부터 HibernateValidationProviderResolver 를 사용할 수 있습니다.

Using HibernateValidationProviderResolver

from("direct:test").
  to("bean-validator://ValidationProviderResolverTest?validationProviderResolver=#myValidationProviderResolver");

...

<bean id="myValidationProviderResolver" class="org.apache.camel.component.bean.validator.HibernateValidationProviderResolver"/>

사용자 정의 ValidationProviderResolver 가 정의되어 있고 검증기 구성 요소가 OSGi 환경에 배포된 경우 HibernateValidationProviderResolver 가 자동으로 사용됩니다.

46.4. 예제

다음 주석이 있는 java 빈이 있다고 가정합니다.

Car.java

public class Car {

    @NotNull
    private String manufacturer;

    @NotNull
    @Size(min = 5, max = 14, groups = OptionalChecks.class)
    private String licensePlate;

    // getter and setter
}

사용자 정의 검증 그룹에 대한 인터페이스 정의

OptionalChecks.java

public interface OptionalChecks {
}

다음 Camel 경로를 사용하면 특성 manufacturer 및 licensePlate에 대한 @Not null 제약 조건만 검증됩니다(Camel은 기본 그룹 javax.validation.groups.Default를 사용합니다).

from("direct:start")
.to("bean-validator://x")
.to("mock:end")

OptionalChecks 그룹의 제약 조건을 확인하려면 다음과 같이 경로를 정의해야 합니다.

from("direct:start")
.to("bean-validator://x?group=OptionalChecks")
.to("mock:end")

두 그룹의 제약 조건을 모두 확인하려면 먼저 새 인터페이스를 정의해야 합니다.

AllChecks.java

@GroupSequence({Default.class, OptionalChecks.class})
public interface AllChecks {
}

경로 정의는 다음과 같아야 합니다.

from("direct:start")
.to("bean-validator://x?group=AllChecks")
.to("mock:end")

그리고 자신의 메시지 보간기, 순회 해결자 및 제약 조건 검증기를 제공해야하는 경우, 다음과 같은 경로를 작성해야 합니다.

<bean id="myMessageInterpolator" class="my.ConstraintValidatorFactory" />
<bean id="myTraversableResolver" class="my.TraversableResolver" />
<bean id="myConstraintValidatorFactory" class="my.ConstraintValidatorFactory" />

from("direct:start")
.to("bean-validator://x?group=AllChecks&messageInterpolator=#myMessageInterpolator
&traversableResolver=#myTraversableResolver&constraintValidatorFactory=#myConstraintValidatorFactory")
.to("mock:end")

또한 제약 조건을 Java 주석이 아닌 XML로 설명할 수도 있습니다. 이 경우 다음과 같이 표시될 수 있는 META-INF/validation.xml 파일을 제공해야 합니다.

validation.xml

<?xml version="1.0" encoding="UTF-8"?>
<validation-config
    xmlns="http://jboss.org/xml/ns/javax/validation/configuration"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation/configuration">
    <default-provider>org.hibernate.validator.HibernateValidator</default-provider>
    <message-interpolator>org.hibernate.validator.engine.ResourceBundleMessageInterpolator</message-interpolator>
    <traversable-resolver>org.hibernate.validator.engine.resolver.DefaultTraversableResolver</traversable-resolver>
    <constraint-validator-factory>org.hibernate.validator.engine.ConstraintValidatorFactoryImpl</constraint-validator-factory>

    <constraint-mapping>/constraints-car.xml</constraint-mapping>
</validation-config>

constraints-car.xml 파일

constraints-car.xml

<?xml version="1.0" encoding="UTF-8"?>
<constraint-mappings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation/mapping validation-mapping-1.0.xsd"
    xmlns="http://jboss.org/xml/ns/javax/validation/mapping">
    <default-package>org.apache.camel.component.bean.validator</default-package>

    <bean class="CarWithoutAnnotations" ignore-annotations="true">
        <field name="manufacturer">
            <constraint annotation="javax.validation.constraints.NotNull" />
        </field>

        <field name="licensePlate">
            <constraint annotation="javax.validation.constraints.NotNull" />

            <constraint annotation="javax.validation.constraints.Size">
                <groups>
                    <value>org.apache.camel.component.bean.validator.OptionalChecks</value>
                </groups>
                <element name="min">5</element>
                <element name="max">14</element>
            </constraint>
        </field>
    </bean>
</constraint-mappings>

다음은 OrderedCheckshttps://github.com/apache/camel/blob/master/components/camel-bean-validator/src/test/java/org/apache/camel/component/bean/validator/OrderedChecks.java일 수 있는 경로 정의 예의 XML 구문입니다.

본문에는 유효성을 검사할 클래스의 인스턴스가 포함되어야 합니다.

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
    http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">

    <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
        <route>
            <from uri="direct:start"/>
            <to uri="bean-validator://x?group=org.apache.camel.component.bean.validator.OrderedChecks"/>
        </route>
    </camelContext>
</beans>

46.5. 예를 들면 다음과 같습니다.

  • Camel 구성
  • 구성 요소
  • 끝점
  • 시작하기

47장. 바인딩 구성 요소(더 이상 사용되지 않음)

Camel 버전 2.11로 사용 가능

Camel에서 바인딩 은 데이터 형식, 콘텐츠 항목 또는 검증 단계와 같은 계약에 엔드포인트를 래핑하는 방법입니다. 바인딩은 완전히 선택 사항이며 모든 camel 끝점에서 사용하도록 선택할 수 있습니다.

바인딩은 Camel 및 기타 많은 기술과 같은 다양한 기술에 서비스 계약을 추가하는 SwitchYard 프로젝트 의 작업에 의해 영감을 받습니다. 그러나 SCA에서 Camel을 래핑하는 SwitchYard 접근법 대신 Camel 바인딩 은 Camel 프레임워크 자체 내에서 Camel 엔드포인트를 래핑할 수 있는 방법을 제공합니다. 따라서 Camel 경로 내에서 쉽게 사용할 수 있습니다.

47.1. 옵션

바인딩 구성 요소에는 옵션이 없습니다.

바인딩 끝점은 URI 구문을 사용하여 구성됩니다.

binding:bindingName:delegateUri

다음 경로 및 쿼리 매개변수를 사용합니다.

47.1.1. 경로 매개 변수(2 매개변수):

Expand
이름설명기본값유형

bindingName

Camel 레지스트리에서 조회하는 데 필요한 바인딩 이름입니다.

 

문자열

delegateUri

위임 끝점의 필수 Uri입니다.

 

문자열

47.1.2. 쿼리 매개변수 (4 매개변수):

Expand
이름설명기본값유형

bridgeErrorHandler (consumer)

소비자를 Camel 라우팅 오류 처리기에 브리징할 수 있습니다. 이는 소비자가 들어오는 메시지를 선택하는 동안 예외가 발생한 것을 의미하며, 이제 메시지로 처리되어 라우팅 오류 처리기에 의해 처리됩니다. 기본적으로 소비자는 org.apache.camel.spi.ExceptionHandler를 사용하여 WARN/ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

false

boolean

예외 처리기 (consumer)

소비자가 사용자 지정 ExceptionHandler를 사용하도록 하려면 다음을 수행합니다. bridgeErrorHandler 옵션이 활성화되어 있는지 확인한 후 이 옵션이 사용되지 않습니다. 기본적으로 소비자는 WARN/ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

 

ExceptionHandler

exchangePattern (consumer)

Exchange를 만들 때 기본 교환 패턴을 설정합니다.

 

ExchangePattern

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

47.2. 바인딩 사용

바인딩은 현재 계약을 정의하는 빈입니다( Camel DSL에 바인딩 추가).

바인딩된 엔드포인트를 정의하는 방법은 몇 가지 있습니다(예: Binding으로 바인딩된 끝점).

47.3. 바인딩 URI 사용

끝점 URI 앞에 binding:nameOfBinding: 을 접두사로 지정할 수 있습니다. 여기서 nameOfBinding 은 레지스트리의 Binding 빈 이름입니다.

from("binding:jaxb:activemq:myQueue").to("binding:jaxb:activemq:anotherQueue")

여기서는 예를 들어 JAXB 데이터 형식을 사용하여 마샬링 및 해상 메시지를 마샬링할 수 있는 "jaxb" 바인딩을 사용하고 있습니다.

47.4. BindingComponent 사용

일부 바인딩에 이미 바인딩된 끝점을 만들 수 있는 종속성 주입을 통해 레지스트리에 구성할 수 있는 BindingComponent라는 구성 요소가 있습니다.There is a Component called BindingComponent which can be configured in your Registry by dependency injection which allows the creation of endpoints which are already bound to some binding.

예를 들어 다음과 같은 코드를 사용하여 레지스트리에 "jsonmq"라는 새 구성 요소를 등록한 경우

JacksonDataFormat format = new JacksonDataFormat(MyBean.class);
context.bind("jsonmq", new BindingComponent(new DataFormatBinding(format), "activemq:foo."));

그러면 끝점을 다른 끝점처럼 사용할 수 있습니다.

from("jsonmq:myQueue").to("jsonmq:anotherQueue")

큐us "foo.myQueue" 및 "foo.anotherQueue"를 사용하고 지정된 Jackson 데이터 형식을 대기열에서 마샬링하는 데 사용합니다.

47.5. 바인딩 사용 시기

단일 경로에서 엔드 포인트만 사용하는 경우; 바인딩은 'raw' 엔드포인트를 직접 사용하고 camel 경로에서 명시적 마샬링 및 유효성 검사를 정상적으로 사용하는 것보다 더 복잡하고 더 복잡 할 수 있습니다.

그러나 바인딩을 사용하면 여러 경로를 함께 구성하거나 단일 경로를 입력 및 출력 끝점으로 구성된 'template'로 사용하는 경우 도움이 될 수 있습니다. 그러면 바인딩에서 계약 및 끝점을 래핑할 수 있는 좋은 방법을 제공합니다.

바인딩에 대한 또 다른 좋은 사용 사례는 동일한 바인딩을 사용하는 많은 끝점을 사용하는 경우입니다. 항상 특정 데이터 형식 또는 유효성 검사 규칙을 언급하지 않고 BindingComponent를 사용하여 선택한 바인딩에 끝점을 래핑할 수 있습니다.

따라서 바인딩은 구성 도구이며, 의미가 있을 때만 사용합니다. 경로 또는 끝점이 많지 않은 경우 추가 복잡성은 가치가 없을 수 있습니다.

48장. Bindy DataFormat

Camel 버전 2.0에서 사용 가능

이 구성 요소의 목표는 비구조화된 데이터의 구문 분석/바인딩(또는 보다 정확한 비 XML 데이터)
~/from Java Beans that have binding mappings defined with annotations. Bindy를 사용하면 다음과 같은 소스의 데이터를 바인딩할 수 있습니다.

  • CSV 레코드
  • 고정 길이 레코드,
  • FIX 메시지,
  • 또는 거의 비정형되지 않은 데이터

POJO(Plain Old Java Object) 중 하나 이상 Bindy는 java 속성의 유형에 따라 데이터를 변환합니다. POJO는 일부 경우에 사용 가능한 일대다 관계와 함께 연결할 수 있습니다. 또한 Date, Double, Float, Integer, Short, Long and BigDecimal와 같은 데이터 형식의 경우 속성을 포맷하는 동안 적용할 패턴을 제공할 수 있습니다.

BigDecimal 숫자의 경우 전체 자릿수와 소수 또는 그룹화 구분 기호도 정의할 수 있습니다.For the Big decimal numbers, you can also define the precision and the decimal or grouping separators.

Expand
유형형식 유형패턴 예link

날짜

DateFormat

dd-MM-yyyy

http://java.sun.com/j2se/1.5.0/docs/api/java/text/SimpleDateFormat.html

decimal*

Decimalformat

..##

http://java.sun.com/j2se/1.5.0/docs/api/java/text/DecimalFormat.html

decimal* = Double, Integer, Float, Short, Long

*Format supported*

이 첫 번째 릴리스에서는 쉼표로 구분된 값 필드와 키 값 쌍 필드(예: FIX 메시지)만 지원합니다.

comel-bindy를 사용하려면 먼저 패키지(예: com.acme.model)에서 모델을 정의하고 각 모델 클래스(예: Order, Client, Instrument, …​)에 필요한 주석을 클래스 또는 필드에 추가해야 합니다.

*Multiple models*

여러 모델을 사용하는 경우 예측할 수 없는 결과를 방지하기 위해 각 모델을 자체 패키지에 배치해야 합니다.

Camel 2.16 이후부터는 이제 패키지 이름 대신 클래스 이름을 사용하여 bindy를 구성할 때 동일한 패키지에 여러 모델을 안전하게 가질 수 있으므로 더 이상 이러한 문제가 발생하지 않습니다.

48.1. 옵션

Bindy dataformat은 아래에 나열된 5 가지 옵션을 지원합니다.

Expand
이름기본값Java Type설명

type

 

BindyType

csv 사용 여부, 고정 또는 키 값 쌍 모드입니다. 기본값은 선택한 데이터 형식에 따라 Csv 또는 KeyValue입니다.

classType

 

문자열

사용할 모델 클래스의 이름입니다.

locale

 

문자열

단위 상태를 위해 us와 같이 사용할 기본 로케일을 구성하려면 다음을 수행합니다. JVM 플랫폼 기본 로케일을 사용하려면 이름 기본값을 사용합니다.

unwrapSingleInstance

true

부울

unmarshalling이 단일 인스턴스를 래핑하지 않고 java.util.List로 래핑하지 않아야 할 때.

contentTypeHeader

false

부울

데이터 형식이 데이터 형식에서 수행할 수 있는 경우 데이터 형식의 유형으로 Content-Type 헤더를 설정해야 하는지 여부입니다. 예를 들어 데이터 형식을 XML로 마샬링하거나, JSon으로 마샬링되는 데이터 형식에 대한 application/json 등이 있습니다.

48.2. 주석

생성된 주석은 모델의 다른 개념을 다음과 같이 POJO에 매핑할 수 있습니다.

  • 레코드 유형(csv, 키 값 쌍(예: FIX 메시지), 고정 길이 …​
  • link (다른 오브젝트의 객체 연결)
  • DataField 및 해당 속성(int, type, …​
  • KeyValuePairField (예: FIX 재무 메시지와 같은 key = 값 형식)
  • 섹션(헤더, 본문 및 바닥글 섹션을 식별하는)
  • OneToMany,
  • BindyConverter (since 2.18.0)
  • FormatFactories (since 2.18.0)

이 섹션에서는 다음에 대해 설명합니다.

48.3. 1. CsvRecord

CsvRecord 주석은 모델의 루트 클래스를 식별하는 데 사용됩니다. 이는 레코드 = CSV 파일의 줄이며 여러 자식 모델 클래스에 연결할 수 있습니다.

Expand
주석 이름레코드 유형level

CsvRecord

csv

class

Expand
매개변수 이름type정보

separator

string

필수 - ',' 또는 ';' 또는 ' anything'일 수 있습니다. 이 값은 정규식으로 해석됩니다. 정규식에서 특별한 의미가 있는 기호(예: '|' 기호)를 사용하려면 "|'와 같이 마스킹해야 하는 것보다"|' 기호입니다.

skipFirstLine

boolean

선택 사항 - default value = false - CSV 파일의 첫 번째 줄을 건너뛸 수 있습니다.

crlf

string

선택 사항 - 가능한 값 = WINDOWS,UNIX,MAC 또는 custom; 기본값. WINDOWS - 사용할 캐리지 반환 문자를 정의할 수 있습니다. 앞에 나열된 세 개 이외의 값을 지정하면 입력하는 값 (custom)이 CRLF 문자로 사용됩니다.

generateHeaderColumns

boolean

선택 사항 - default value = false - 는 CSV의 헤더 열을 생성하는 데 사용합니다.

autospanLine

boolean

Camel 2.13/2.12.2: 선택 사항 - 기본값 = false - 이 옵션을 사용하면 마지막 열이 행 끝으로 자동 확장됩니다(예: 주석 처리한 경우 행도 모든 문자, 구분 기호 문자).

isOrdered

boolean

선택 사항 - default value = false - CSV가 생성될 때 필드의 순서를 변경할 수 있습니다.

quote

문자열

Camel 2.8.3/2.9: 옵션을 사용하면 CSV가 생성될 때 필드의 인용 문자를 지정할 수 있습니다. 이 주석은 모델의 루트 클래스에 연결되며 한 번만 선언해야 합니다.

quoting

boolean

*Camel 2.11:*optional - default value = false - CSV 마샬링 시 값(및 헤더)을 인용해야 함을 나타냅니다.

endWithLineBreak

boolean

Camel 2.21: 선택 사항 - 기본값 = true - CSV 생성 파일이 줄 바꿈으로 끝나야 하는지 나타냅니다.

case 1 : separator = ','

CSV 레코드에서 필드를 분리하는 데 사용되는 구분 기호는 ','입니다.

10, J, Pauline, M, XD12345678, Fortis Dynamic 15/15, 2500,
USD,08-01-2009
@CsvRecord( separator = "," )
public Class Order {

}

case 2 : separator = ';'

이전 사례와 비교하여 여기에 구분 기호는 ';' 대신 ','입니다.

10; J; Pauline; M; XD12345678; Fortis Dynamic 15/15; 2500, USD, 08-01-2009

@CsvRecord( separator = ";" )
public Class Order {

}

case 3 : separator = '|'

이전 사례와 비교하여 여기서 구분 기호는 '|' 대신 ';'입니다.

10| J| Pauline| M| XD12345678| Fortis Dynamic 15/15| 2500| USD|
08-01-2009
@CsvRecord( separator = "\\|" )
public Class Order {

}

case 4 : separator = '\",\"'

Camel 2.8.2 또는 이전 버전에 적용

CSV 레코드를 구문 분석할 필드에 구분 기호로도 구분 기호로 사용되는 ',' 또는 ';'가 포함된 필드에 다른 전략
을 찾아 이 사례를 처리하는 방법을 camel bindy를 알립니다. 데이터가 쉼표로 포함된 필드를 정의하려면 simple 또는 double quotes
를 구분 기호(예: '10', 'Street 10, NY', 'USA' 또는 "10", "Street 10, NY", "USA")로 사용합니다.
Remark: 이 경우 단순 또는 큰따옴표인 줄의 첫 번째 문자와 마지막 문자가 bindy로 제거됩니다.

"10","J","Pauline"," M","XD12345678","Fortis Dynamic 15,15"
2500","USD","08-01-2009"
@CsvRecord( separator = "\",\"" )
public Class Order {

}

Camel 2.8.3/2.9 또는 bindy를 사용하면 레코드를 작은따 옴표 또는 큰따옴표로 묶고 CSV에서 오브젝트로 나눌 때 이러한 따옴표를 자동으로 제거합니다. 따라서 구분 기호에 따옴표를 포함하지 말고 다음과 같이 간단히 수행합니다.

"10","J","Pauline"," M","XD12345678","Fortis Dynamic 15,15"
2500","USD","08-01-2009"
@CsvRecord( separator = "," )
public Class Order {

}

If you want to marshal from Object to CSV and use quotes, then you need to specify which quote character to use, using the quote attribute on the @CsvRecord:

@CsvRecord( separator = ",", quote = "\"" )
public Class Order {

}

케이스 5: separator & skipfirstline

이 기능은 클라이언트가 파일의 첫 번째 줄에, 데이터 필드의 이름을 보유하려는 경우에 유용합니다.

주문 ID, 클라이언트 ID, 이름, 성, isin 코드, 계측 이름, 수량, 통화, 날짜

구문 분석 프로세스 중에 이 첫 번째 줄을 건너뛰어야 함을 알리기 위해 특성을 사용합니다.

@CsvRecord(separator = ",", skipFirstLine = true)
public Class Order {

}

case 6 : generateHeaderColumns

생성된 CSV의 첫 번째 줄에 추가하려면 다음과 같이 주석에서 generateHeaderColumns를 true로 설정해야 합니다.

@CsvRecord( generateHeaderColumns = true )
public Class Order {

}

결과적으로marshaling 프로세스 중에 Bindy가 다음과 같이 CSV를 생성합니다.

주문 ID, 클라이언트 ID, 이름, 성, isin 코드, 계측 이름, 수량, 통화, 날짜

10, J, Pauline, M, XD12345678, Fortis Dynamic 15/15, 2500, USD,08-01-2009

케이스 7: 캐리지 리턴

comel-bindy가 실행되는 플랫폼이 Windows가 아닌 Macintosh 또는 Unix가 아닌 경우 다음과 같이 crlf 속성을 변경할 수 있습니다. 세 가지 값 사용 가능: WINDOWS, UNIX 또는 MAC

@CsvRecord(separator = ",", crlf="MAC")
public Class Order {

}

또한 어떤 이유로든 다른 줄 끝 문자를 추가해야 하는 경우 crlf 매개 변수를 사용하여 지정할 수 있습니다. 다음 예제에서는 줄을 쉼표와 줄 바꿈 문자로 끝낼 수 있습니다.In the following example, we can end the line with a comma followed by the newline character:

@CsvRecord(separator = ",", crlf=",\n")
public Class Order {

}

case 8 : isOrdered

경우에 따라 모델에서 CSV 레코드를 생성하는 동안 따라야 하는 순서는 구문 분석 중에 사용된 순서와 다릅니다. 그런 다음, 이 경우, isOrdered = true 속성을 사용하여 DataField 주석의 'position' 속성과 함께 이를 나타낼 수 있습니다.

@CsvRecord(isOrdered = true)
public Class Order {

   @DataField(pos = 1, position = 11)
   private int orderNr;

   @DataField(pos = 2, position = 10)
   private String clientNr;

}

pos는 CSV를 생성하는 데 사용되는 동안 파일을 구문 분석하는 데 사용됩니다.

48.5. 3. DataField

DataField 주석은 필드의 속성을 정의합니다. 각 datafield는 레코드의 위치, 유형(string, int, date, …​) 및 선택적으로 패턴으로 식별됩니다.

Expand
주석 이름레코드 유형level

DataField

all

속성

Expand
매개변수 이름type정보

POS

int

필수 - 필드의 입력 위치. 1에서 …​ 사이의 숫자 번호 - 위치 매개 변수를 참조하십시오.

패턴

string

선택 사항 - 기본값 = "" - 은 Decimal, Date를 포맷하는 데 사용됩니다.

길이

int

선택 사항 - 고정 길이 형식의 필드 길이를 나타냅니다. optional - represents the length of the field for fixed length format.

Precision

int

선택 사항 - Decimal 숫자를 포맷/분석할 때 사용할 전체 자릿수를 나타냅니다. optional - represents the precision to be used when the Decimal number will be formatted/parsed.

패턴

string

선택 사항 - default value = "" - Java formatter(예:SimpleDateFormat by example)에서 포맷/유효 데이터를 포맷하는 데 사용됩니다. 패턴을 사용하는 경우 bindy 데이터 형식에 로케일을 설정하는 것이 좋습니다. "us"와 같은 알려진 로케일로 설정하거나 플랫폼 기본 로케일을 사용하려면 "default"를 사용합니다. "default"에는 Camel 2.14/2.13.3/2.12.5가 필요합니다.

위치

int

선택 사항 - CSV 생성(출력 메시지)의 필드 위치가 입력 위치와 비교해야 하는 경우 사용해야 합니다. pos 매개변수를 참조하십시오.

필수 항목

boolean

optional - default value = "false"

trim

boolean

optional - default value = "false"

defaultValue

string

Camel 2.10: 선택 사항 - 기본값 = "" - 각 CSV 필드가 비어 있을 때 필드의 기본값을 정의합니다.

impliedDecimalSeparator

boolean

Camel 2.11: 선택 사항 - 기본값 = "false" - 지정된 위치에 임차된 소수점이 있는지 여부를 나타냅니다.

lengthPos

int

Camel 2.11: 선택 사항 - 이 필드에 대한 고정 길이를 정의하는 고정 길이 레코드의 데이터 필드를 식별하는 데 사용할 수 있습니다.

align

string

선택 사항 - 기본값 = "R" - 텍스트를 고정 길이 필드의 오른쪽에서 왼쪽으로 정렬합니다. 값 'R' 또는 'L' 사용

구분 기호

string

Camel 2.11: 선택 사항 - 고정 길이 레코드에서 변수 길이 필드의 끝을 구분하는 데 사용할 수 있습니다.

케이스 1 : pos

이 매개변수/attribute는 csv 레코드에서 필드의 위치를 나타냅니다.

위치

@CsvRecord(separator = ",")
public class Order {

    @DataField(pos = 1)
    private int orderNr;

    @DataField(pos = 5)
    private String isinCode;

}

이 예제에서 볼 수 있듯이 위치는 '1'에서 시작하지만 클래스 순서의 '5'에서 계속됩니다. '2'에서 '4'까지의 숫자는 클래스 클라이언트에 정의됩니다(아래 참조).

position은 다른 모델 클래스에서 계속됩니다.

public class Client {

    @DataField(pos = 2)
    private String clientNr;

    @DataField(pos = 3)
    private String firstName;

    @DataField(pos = 4)
    private String lastName;
}

케이스 2 : 패턴

패턴을 통해 데이터 형식을 보강하거나 검증할 수 있습니다.

패턴

@CsvRecord(separator = ",")
public class Order {

    @DataField(pos = 1)
    private int orderNr;

    @DataField(pos = 5)
    private String isinCode;

    @DataField(name = "Name", pos = 6)
    private String instrumentName;

    @DataField(pos = 7, precision = 2)
    private BigDecimal amount;

    @DataField(pos = 8)
    private String currency;

    // pattern used during parsing or when the date is created
    @DataField(pos = 9, pattern = "dd-MM-yyyy")
    private Date orderDate;
}

케이스 3: precision

전체 자릿수는 숫자의 10진수 부분을 정의하려는 경우에 유용합니다.The precision is helpful when you want to define the decimal part of your number.

Precision

@CsvRecord(separator = ",")
public class Order {

    @DataField(pos = 1)
    private int orderNr;

    @Link
    private Client client;

    @DataField(pos = 5)
    private String isinCode;

    @DataField(name = "Name", pos = 6)
    private String instrumentName;

    @DataField(pos = 7, precision = 2)
    private BigDecimal amount;

    @DataField(pos = 8)
    private String currency;

    @DataField(pos = 9, pattern = "dd-MM-yyyy")
    private Date orderDate;
}

케이스 4: Position은 출력에서 다릅니다.

position 속성은 생성된 CSV 레코드에 필드를 배치하는 방법을 bindy에 알립니다. 기본적으로 사용되는 위치는 'pos' 속성으로 정의된 위치에 해당합니다. 위치가 다르면 (즉, '지정'을 사용하여 이를 나타내는 데 사용할 수 있는 것 보다 천문적 프로세스가 마샬링에서 마샬링되는 것을 비교할 수 있습니다.

예를 들면 다음과 같습니다.

위치가 출력에 따라 다릅니다.

@CsvRecord(separator = ",", isOrdered = true)
public class Order {

    // Positions of the fields start from 1 and not from 0

    @DataField(pos = 1, position = 11)
    private int orderNr;

    @DataField(pos = 2, position = 10)
    private String clientNr;

    @DataField(pos = 3, position = 9)
    private String firstName;

    @DataField(pos = 4, position = 8)
    private String lastName;

    @DataField(pos = 5, position = 7)
    private String instrumentCode;

    @DataField(pos = 6, position = 6)
    private String instrumentNumber;
}

주석 @DataField의 이 속성은 @CsvRecord의 attribute isOrdered = true와 함께 사용해야 합니다.

케이스 5 : 필수

필드가 필수인 경우 'required' 특성을 true로만 사용하십시오.

필수 항목

@CsvRecord(separator = ",")
public class Order {

    @DataField(pos = 1)
    private int orderNr;

    @DataField(pos = 2, required = true)
    private String clientNr;

    @DataField(pos = 3, required = true)
    private String firstName;

    @DataField(pos = 4, required = true)
    private String lastName;
}

이 필드가 레코드에 없으면 다음 정보를 사용하여 구문 분석기에서 오류보다 발생합니다.If this field is not present in the record, than an error will be raised by the parser with the following information:

일부 필드는 누락(선택 사항 또는 필수) 라인입니다.

case 6 : trim

필드에 처리 전에 제거해야 하는 선행 및/또는 후행 공백이 있는 경우 true로 설정된 'trim' 특성을 사용합니다.

Trim

@CsvRecord(separator = ",")
public class Order {

    @DataField(pos = 1, trim = true)
    private int orderNr;

    @DataField(pos = 2, trim = true)
    private Integer clientNr;

    @DataField(pos = 3, required = true)
    private String firstName;

    @DataField(pos = 4)
    private String lastName;
}

case 7 : defaultValue

필드가 정의되지 않은 경우 defaultValue 특성으로 표시된 값을 사용합니다.

기본값

@CsvRecord(separator = ",")
public class Order {

    @DataField(pos = 1)
    private int orderNr;

    @DataField(pos = 2)
    private Integer clientNr;

    @DataField(pos = 3, required = true)
    private String firstName;

    @DataField(pos = 4, defaultValue = "Barin")
    private String lastName;
}

이 속성은 선택적 필드에만 적용할 수 있습니다.

48.6. 4. FixedLengthRecord

FixedLengthRecord 주석은 모델의 루트 클래스를 식별하는 데 사용됩니다. 레코드 = 데이터 고정 길이 형식이 포함된 파일/메시지 선을 나타내며 여러 자식 모델 클래스에 연결할 수 있습니다. 이 형식은 필드를 약간 구체적으로 사용하여 오른쪽 또는 왼쪽에 맞을 수 있습니다.
데이터 크기가 필드 길이를 완전히 채우지 않으면 '추가' 문자를 추가할 수 있습니다.

Expand
주석 이름레코드 유형level

FixedLengthRecord

fixed

class

Expand
매개변수 이름type정보

crlf

string

선택 사항 - 가능한 값 = WINDOWS,UNIX,MAC 또는 custom; 기본값. WINDOWS - 사용할 캐리지 반환 문자를 정의할 수 있습니다. 앞에 나열된 세 개 이외의 값을 지정하면 입력하는 값(custom)이 CRLF 문자로 사용됩니다. 이 옵션은 마샬링 중에만 사용되는 반면, unmarshalling은 eol을 사용자 지정하지 않는 한 시스템 기본 JDK 제공 줄 구분 기호를 사용합니다.

EOL

string

선택 사항 - 비어 있는 문자열인 default=""입니다. 각 레코드 후 행 종료를 처리하는 데 사용할 문자입니다(다른 줄 구분 기호가 제공되지 않는 한 기본 JDK 제공 구분 기호를 사용하는 경우 기본 JDK에서 줄 구분 기호를 사용하는 데 도움이 되는 - default = ""). 이 옵션은 unmarshalling 중에만 사용됩니다. 여기서 마샬링은 다른 값을 제공하지 않는 한 "WINDOWS"로 시스템 기본 제공된 줄 구분 기호를 사용합니다.

paddingChar

char

mandatory - default value = ' '

길이

int

mandatory = 고정 길이 레코드의 크기

hasHeader

boolean

Camel 2.11 - 선택 사항 - 이 유형의 레코드 앞에 파일 / 스트림의 시작 부분에 단일 헤더 레코드가 있을 수 있음을 나타냅니다.

hasFooter

boolean

Camel 2.11 - 선택 사항 - 이 유형의 레코드 뒤에 파일 / 스트림 끝에 있는 단일 바닥글 레코드가 있음을 나타냅니다.

skipHeader

boolean

Camel 2.11 - 선택 사항 - 헤더 레코드의 마샬링/마이크아웃을 건너뛰도록 데이터 형식을 구성합니다. 기본 레코드(예: 헤더 또는 바닥글 아님)에서 이 매개변수를 구성합니다.

skipFooter

boolean

Camel 2.11 - 선택 사항 - 바닥글 레코드 마샬링/마이크아웃을 건너뛰도록 데이터 형식을 구성하여 기본 레코드(예: 헤더 또는 발기가 아님)에서 이 매개 변수를 구성합니다.

isHeader

boolean

Camel 2.11 - 선택 사항 - 이 FixedLengthRecord를 헤더 레코드로 식별합니다.

isFooter

boolean

Camel 2.11 - 선택 사항 - 이 FixedLengthRecords를 바닥글 레코드로 식별합니다.

ignoreTrailingChars

boolean

Camel 2.11.1 - 선택 사항 - 마지막 매핑된 파일 이외의 문자를 / 구문 분석하지 않을 때 무시할 수 있음을 나타냅니다. 이 주석은 모델의 루트 클래스에 연결되며 한 번만 선언해야 합니다.

hasHeader/hasFooter 매개변수는 isHeader/isFooter와 함께 함께 사용할 수 없습니다. 레코드는 헤더/footer 및 기본 고정 길이 레코드가 아닐 수 있습니다.

케이스 1 : 간단한 고정 길이 레코드

이 간단한 예제에서는 고정 메시지를 구문 분석 / 포맷하도록 모델을 설계하는 방법을 보여줍니다.

10A9PaulineMISINXD12345678BUYShare2500.45USD01-08-2009

fixed-simple

@FixedLengthRecord(length=54, paddingChar=' ')
public static class Order {

    @DataField(pos = 1, length=2)
    private int orderNr;

    @DataField(pos = 3, length=2)
    private String clientNr;

    @DataField(pos = 5, length=7)
    private String firstName;

    @DataField(pos = 12, length=1, align="L")
    private String lastName;

    @DataField(pos = 13, length=4)
    private String instrumentCode;

    @DataField(pos = 17, length=10)
    private String instrumentNumber;

    @DataField(pos = 27, length=3)
    private String orderType;

    @DataField(pos = 30, length=5)
    private String instrumentType;

    @DataField(pos = 35, precision = 2, length=7)
    private BigDecimal amount;

    @DataField(pos = 42, length=3)
    private String currency;

    @DataField(pos = 45, length=10, pattern = "dd-MM-yyyy")
    private Date orderDate;
}

케이스 2 : 정렬 및 패딩을 사용한 길이 레코드 수정

이 더 정교한 예제에서는 필드에 대한 정렬을 정의하는 방법과 '여기'인 패딩 문자를 할당하는 방법을 보여줍니다.

10A9 PaulineM ISINXD12345678BUYShare2500.45USD01-08-2009

fixed-padding-align

@FixedLengthRecord(length=60, paddingChar=' ')
public static class Order {

    @DataField(pos = 1, length=2)
    private int orderNr;

    @DataField(pos = 3, length=2)
    private String clientNr;

    @DataField(pos = 5, length=9)
    private String firstName;

    @DataField(pos = 14, length=5, align="L")   // align text to the LEFT zone of the block
    private String lastName;

    @DataField(pos = 19, length=4)
    private String instrumentCode;

    @DataField(pos = 23, length=10)
    private String instrumentNumber;

    @DataField(pos = 33, length=3)
    private String orderType;

    @DataField(pos = 36, length=5)
    private String instrumentType;

    @DataField(pos = 41, precision = 2, length=7)
    private BigDecimal amount;

    @DataField(pos = 48, length=3)
    private String currency;

    @DataField(pos = 51, length=10, pattern = "dd-MM-yyyy")
    private Date orderDate;
}

케이스 3: 필드 패딩

경우에 따라 레코드용으로 정의된 기본 패딩은 '' 대신 '0'으로 패딩하려는 숫자 형식이 있으므로 필드에 적용할 수 없습니다. 이 경우 모델에서 paddingField 특성을 사용하여 이 값을 설정할 수 있습니다.

10A9 PaulineM ISINXD12345678BUYShare000002500.45USD01-08-2009

fixed-padding-field

@FixedLengthRecord(length = 65, paddingChar = ' ')
public static class Order {

    @DataField(pos = 1, length = 2)
    private int orderNr;

    @DataField(pos = 3, length = 2)
    private String clientNr;

    @DataField(pos = 5, length = 9)
    private String firstName;

    @DataField(pos = 14, length = 5, align = "L")
    private String lastName;

    @DataField(pos = 19, length = 4)
    private String instrumentCode;

    @DataField(pos = 23, length = 10)
    private String instrumentNumber;

    @DataField(pos = 33, length = 3)
    private String orderType;

    @DataField(pos = 36, length = 5)
    private String instrumentType;

    @DataField(pos = 41, precision = 2, length = 12, paddingChar = '0')
    private BigDecimal amount;

    @DataField(pos = 53, length = 3)
    private String currency;

    @DataField(pos = 56, length = 10, pattern = "dd-MM-yyyy")
    private Date orderDate;
}

케이스 4: 구분 기호를 사용하여 고정 길이 레코드

고정 길이 레코드에는 종종 레코드 내에 구분된 콘텐츠가 있는 경우가 있습니다. firstName 및 lastName 필드는 다음 예제에서 '^' 문자로 구분됩니다.

10A9Pauline^M^ISINXD12345678BUYShare000002500.45USD01-08-2009

고정됨

@FixedLengthRecord()
public static class Order {

    @DataField(pos = 1, length = 2)
    private int orderNr;

    @DataField(pos = 2, length = 2)
    private String clientNr;

    @DataField(pos = 3, delimiter = "^")
    private String firstName;

    @DataField(pos = 4, delimiter = "^")
    private String lastName;

    @DataField(pos = 5, length = 4)
    private String instrumentCode;

    @DataField(pos = 6, length = 10)
    private String instrumentNumber;

    @DataField(pos = 7, length = 3)
    private String orderType;

    @DataField(pos = 8, length = 5)
    private String instrumentType;

    @DataField(pos = 9, precision = 2, length = 12, paddingChar = '0')
    private BigDecimal amount;

    @DataField(pos = 10, length = 3)
    private String currency;

    @DataField(pos = 11, length = 10, pattern = "dd-MM-yyyy")
    private Date orderDate;
}

Camel 2.11 부터 고정 길이 레코드의 'pos' 값은 정확한 열 번호 대신 순차적 값을 사용하여 선택적으로 정의할 수 있습니다.

case 5 : 레코드 정의 필드 길이를 사용한 고정 길이 레코드

고정 길이 레코드에는 동일한 레코드 내의 다른 필드의 예상 길이를 정의하는 필드가 포함될 수 있습니다. 다음 예에서 instrumentNumber 필드 값의 길이는 레코드의 instrumentNumberLen 필드 값으로 정의됩니다.

10A9Pauline^M^ISIN10XD12345678BUYShare000002500.45USD01-08-2009

고정됨

@FixedLengthRecord()
public static class Order {

    @DataField(pos = 1, length = 2)
    private int orderNr;

    @DataField(pos = 2, length = 2)
    private String clientNr;

    @DataField(pos = 3, delimiter = "^")
    private String firstName;

    @DataField(pos = 4, delimiter = "^")
    private String lastName;

    @DataField(pos = 5, length = 4)
    private String instrumentCode;

    @DataField(pos = 6, length = 2, align = "R", paddingChar = '0')
    private int instrumentNumberLen;

    @DataField(pos = 7, lengthPos=6)
    private String instrumentNumber;

    @DataField(pos = 8, length = 3)
    private String orderType;

    @DataField(pos = 9, length = 5)
    private String instrumentType;

    @DataField(pos = 10, precision = 2, length = 12, paddingChar = '0')
    private BigDecimal amount;

    @DataField(pos = 11, length = 3)
    private String currency;

    @DataField(pos = 12, length = 10, pattern = "dd-MM-yyyy")
    private Date orderDate;
}

케이스 6 : 헤더 및 바닥글을 사용한 길이 레코드 수정

Bindy는 모델의 일부로 구성된 고정 길이 헤더 및 바닥글 레코드를 검색합니다. - 주석 처리된 클래스가 기본 @FixedLengthRecord 클래스와 동일한 패키지에 있거나 구성된 검사 패키지 중 하나에 존재하는 경우 제공됩니다. 다음 텍스트는 헤더 레코드 및 바닥글 레코드로 묶인 두 개의 고정 길이 레코드를 보여줍니다.

101-08-2009
10A9 PaulineM ISINXD12345678BUYShare000002500.45USD01-08-2009
10A9 RichN ISINXD12345678BUYShare000002700.45USD01-08-2009
9000000002

Fixed-header-and-footer-main-class

@FixedLengthRecord(hasHeader = true, hasFooter = true)
public class Order {

    @DataField(pos = 1, length = 2)
    private int orderNr;

    @DataField(pos = 2, length = 2)
    private String clientNr;

    @DataField(pos = 3, length = 9)
    private String firstName;

    @DataField(pos = 4, length = 5, align = "L")
    private String lastName;

    @DataField(pos = 5, length = 4)
    private String instrumentCode;

    @DataField(pos = 6, length = 10)
    private String instrumentNumber;

    @DataField(pos = 7, length = 3)
    private String orderType;

    @DataField(pos = 8, length = 5)
    private String instrumentType;

    @DataField(pos = 9, precision = 2, length = 12, paddingChar = '0')
    private BigDecimal amount;

    @DataField(pos = 10, length = 3)
    private String currency;

    @DataField(pos = 11, length = 10, pattern = "dd-MM-yyyy")
    private Date orderDate;
}

@FixedLengthRecord(isHeader = true)
public  class OrderHeader {
    @DataField(pos = 1, length = 1)
    private int recordType = 1;

    @DataField(pos = 2, length = 10, pattern = "dd-MM-yyyy")
    private Date recordDate;
}

@FixedLengthRecord(isFooter = true)
public class OrderFooter {

    @DataField(pos = 1, length = 1)
    private int recordType = 9;

    @DataField(pos = 2, length = 9, align = "R", paddingChar = '0')
    private int numberOfRecordsInTheFile;
}

케이스 7: 고정 길이 레코드를 구문 분석할 때 콘텐츠를 Skipping합니다. (Camel 2.11.1)

일반적으로 고정 길이 레코드에는 대상 사용 사례에 필요한 것보다 더 많은 정보가 포함된 고정 길이 레코드를 제공하는 시스템과의 통합이 일반적입니다. 이 경우 필요하지 않은 해당 필드의 선언 및 구문 분석을 건너뛰는 것이 유용합니다. 이를 이해하기 위해 Bindy는 마지막 구문 분석 필드의 'pos' 값이 마지막 구문 분석 필드의 커서 위치를 벗어나는 경우 레코드 내의 다음 매핑된 필드로 건너뜁니다. 관심 필드(오드인 값 대신)에 절대 'pos' 위치를 사용하면 bindy가 두 필드 간에 콘텐츠를 건너뜁니다.

마찬가지로 일부 필드 이외의 콘텐츠는 관심이 없습니다. 이 경우 @FixedLengthRecord 선언에서 ignoreTrailingChars 속성을 설정하여 마지막 매핑된 필드 이외의 모든 항목의 구문 분석을 건너뛰도록 Bindy를 지시할 수 있습니다.

@FixedLengthRecord(ignoreTrailingChars = true)
public static class Order {

    @DataField(pos = 1, length = 2)
    private int orderNr;

    @DataField(pos = 3, length = 2)
    private String clientNr;

    // any characters that appear beyond the last mapped field will be ignored

}

48.7. 5. 메시지

Message 주석은 키 값 쌍 필드를 포함하는 모델의 클래스를 식별하는 데 사용됩니다. 이러한 유형의 형식은 주로 재무 교환 프로토콜 메시지 (FIX)에서 사용됩니다. 그럼에도 불구하고 이 주석은 데이터가 키로 식별되는 다른 모든 형식에 사용할 수 있습니다. 키 쌍 값은 탭 delimitor (unicode representation : \u0009) 또는 제목 시작(예: \u0001)과 같은 특수 문자가 될 수 있는 구분 기호로 서로 분리됩니다.

*"FIX information"*

FIX에 대한 자세한 내용은 다음 웹 사이트에서 확인할 수 있습니다 : http://www.fixprotocol.org/. FIX 메시지를 사용하려면 모델에 Order 클래스일 수 있는 루트 메시지 클래스에 연결된 헤더 및 Trailer 클래스가 포함되어 있어야 합니다. 이는 필수 사항은 아니지만 quickFix 프로젝트 http://www.quickfixj.org/ 을 기반으로 하는 Fix gateway인 camel-fix와 함께 camel-bindy를 사용할 때 매우 유용합니다.

Expand
주석 이름레코드 유형level

메시지

키 값 쌍

class

Expand
매개변수 이름type정보

pairSeparator

string

필수 - '=' 또는 ';' 또는 ' anything'일 수 있습니다.

keyValuePairSeparair

string

필수 - '\u0001', '\u0009', '#' 또는 'anything'일 수 있습니다.

crlf

string

선택 사항 - 가능한 값 = WINDOWS,UNIX,MAC 또는 custom; default 값 = WINDOWS - 사용할 캐리지 리턴 문자를 정의할 수 있습니다. 앞에 나열된 세 개 이외의 값을 지정하면 입력하는 값 (custom)이 CRLF 문자로 사용됩니다.

type

string

선택 사항 - 메시지 유형을 정의합니다(예: FIX, EMX, …​).

version

string

선택 사항 - 메시지의 버전 (예: 4.1)

isOrdered

boolean

선택 사항 - default value = false - FIX 메시지가 생성될 때 필드의 순서를 변경할 수 있습니다. 이 주석은 모델의 메시지 클래스에 연결되어 있으며 한 번만 선언해야 합니다.

케이스 1: separator = 'u0001'

FIX 메시지에서 키 값 쌍 필드를 분리하는 데 사용되는 구분 기호는 ASCII '01' 문자 또는 유니코드 형식 '\u0001'입니다. java 런타임 오류를 방지하려면 이 문자를 두 번째로 이스케이프해야 합니다. 다음은 이에 대한 예입니다.Here is an example:

8=FIX.4.1 9=20 34=1 35=0 49=INVMGR 56=BRKR 1=BE.CHM.001 11=CHM0001-01
22=4 ...

및 주석 사용 방법

FIX - 메시지

@Message(keyValuePairSeparator = "=", pairSeparator = "\u0001", type="FIX", version="4.1")
public class Order {

}
*Look at test cases*

tab, …​과 같은 ASCII 문자는 WIKI 페이지에 표시할 수 없습니다. 따라서 FIX 메시지가 (src\test\data\fix\fix\fix.txt)와 Order, Trailer, Header 클래스 (src\test\java\org\apache\camel\dataformat\data format\bindy\bindy\bindy\bindy\bindy\bindy\simple\Order)와 같은 방식을 정확하게 보려면 camel-bindy의 테스트 케이스를 살펴보십시오.

48.8. 6. KeyValuePairField

KeyValuePairField 주석은 키 값 쌍 필드의 속성을 정의합니다. 각 KeyValuePairField는 태그(= 키) 및 연결된 값(문자열, int, date, …​, 선택 사항)으로 식별되고 필드가 필요한 경우 선택적으로 표시됩니다.

Expand
주석 이름레코드 유형level

KeyValuePairField

키 값 쌍 - FIX

속성

Expand
매개변수 이름type정보

tag

int

필수 - 메시지의 필드를 식별하는 숫자 - 고유해야 합니다.

패턴

string

선택 사항 - 기본값 = "" - # 10진수, 날짜, …​ 형식을 지정하는 데 사용됩니다.

Precision

int

선택 사항 - 숫자 번호의 서식/분수를 포맷/분할 때 사용할 전체 자릿수를 나타냅니다. optional - digit number - represents the precision to be used when the decimal number will be formatted/parsed.

위치

int

선택 사항 - FIX 메시지의 키/태그 위치가 다른 경우 사용해야 합니다.

필수 항목

boolean

optional - default value = "false"

impliedDecimalSeparator

boolean

Camel 2.11: 선택 사항 - 기본값 = "false" - 지정된 위치에 임차된 소수점이 있는지 여부를 나타냅니다.

케이스 1 : 태그

이 매개변수는 메시지에 있는 필드의 키를 나타냅니다.

FIX 메시지 - 태그

@Message(keyValuePairSeparator = "=", pairSeparator = "\u0001", type="FIX", version="4.1")
public class Order {

    @Link Header header;

    @Link Trailer trailer;

    @KeyValuePairField(tag = 1) // Client reference
    private String Account;

    @KeyValuePairField(tag = 11) // Order reference
    private String ClOrdId;

    @KeyValuePairField(tag = 22) // Fund ID type (Sedol, ISIN, ...)
    private String IDSource;

    @KeyValuePairField(tag = 48) // Fund code
    private String SecurityId;

    @KeyValuePairField(tag = 54) // Movement type ( 1 = Buy, 2 = sell)
    private String Side;

    @KeyValuePairField(tag = 58) // Free text
    private String Text;
}

케이스 2 : 출력의 다른 위치

FIX 메시지에 적용할 태그/키가 미리 정의된 순서에 따라 정렬되어야 하는 경우 주석 @KeyValuePairField의 'position' 특성을 사용합니다.

FIX 메시지 - 태그 - 정렬

@Message(keyValuePairSeparator = "=", pairSeparator = "\\u0001", type = "FIX", version = "4.1", isOrdered = true)
public class Order {

    @Link Header header;

    @Link Trailer trailer;

    @KeyValuePairField(tag = 1, position = 1) // Client reference
    private String account;

    @KeyValuePairField(tag = 11, position = 3) // Order reference
    private String clOrdId;
}

48.9. 7. 섹션

고정 길이 레코드의 FIX 메시지에서 정보 : 헤더, 본문 및 섹션을 나타내는 다른 섹션을 포함하는 것이 일반적입니다. 주석 @Section의 목적은 모델의 어떤 클래스가 헤더를 나타내는지 나타내는 바인딩(= 섹션 1), 본문(= 섹션 2) 및 바닥글(= 섹션 3)을 알리는 것입니다.

이 주석에 대해 하나의 속성/ 매개변수만 있습니다.

Expand
주석 이름레코드 유형level

섹션

FIX

class

Expand
매개변수 이름type정보

숫자

int

섹션 위치를 식별하는 숫자

케이스 1 : 섹션

header 섹션의 정의

FIX message - 섹션 - 헤더

@Section(number = 1)
public class Header {

    @KeyValuePairField(tag = 8, position = 1) // Message Header
    private String beginString;

    @KeyValuePairField(tag = 9, position = 2) // Checksum
    private int bodyLength;
}

본문 섹션에 대한 정의

FIX message - 섹션 - 본문

@Section(number = 2)
@Message(keyValuePairSeparator = "=", pairSeparator = "\\u0001", type = "FIX", version = "4.1", isOrdered = true)
public class Order {

    @Link Header header;

    @Link Trailer trailer;

    @KeyValuePairField(tag = 1, position = 1) // Client reference
    private String account;

    @KeyValuePairField(tag = 11, position = 3) // Order reference
    private String clOrdId;

바닥글 섹션에 대한 정의

수정 메시지 - 섹션 - Footer

@Section(number = 3)
public class Trailer {

    @KeyValuePairField(tag = 10, position = 1)
    // CheckSum
    private int checkSum;

    public int getCheckSum() {
        return checkSum;
    }

48.10. 8. OneToMany

주석 @OneToMany의 용도는 List<? > 필드에서 POJO 클래스를 정의하거나 반복적인 그룹을 포함하는 레코드에서 작업할 수 있도록 하는 것입니다.

*Restrictions OneToMany*

여러 수준의 계층 구조에서 정의된 반복을 처리할 수 없습니다.Easily, the one to bindy does not allow to handle repetitions defined on several levels of the hierarchy.

다음 경우 관련 OneToMany ONLY WORKS:

  • 반복적인 그룹(= 태그/키 그룹)이 포함된 FIX 메시지 읽기
  • 반복적인 데이터로 CSV 생성
Expand
주석 이름레코드 유형level

OneToMany

all

속성

Expand
매개변수 이름type정보

mappedTo

string

선택 사항 - 문자열 - 클래스의 Type에 연결된 클래스 이름

케이스 1 : 반복적인 데이터로 CSV 생성

다음은 우리가 원하는 CSV 출력입니다.

Claus,Ibsen,Camel in Action 1,2010,35
Claus,Ibsen,Camel in Action 2,2012,35
Claus,Ibsen,Camel in Action 3,2013,35
Claus,Ibsen,Camel in Action 4,2014,35

Remark : 반복적인 데이터는 첫 번째, 마지막 이름과 나이는 일반적인 책과 게시 날짜의 제목과 관련이 있습니다.

또한 이 문제를 모델링하는 데 사용되는 클래스입니다. Author 클래스에는 도서 목록이 포함되어 있습니다.

반복적인 데이터로 CSV 생성

@CsvRecord(separator=",")
public class Author {

    @DataField(pos = 1)
    private String firstName;

    @DataField(pos = 2)
    private String lastName;

    @OneToMany
    private List<Book> books;

    @DataField(pos = 5)
    private String Age;
}

public class Book {

    @DataField(pos = 3)
    private String title;

    @DataField(pos = 4)
    private String year;
}

매우 간단한 것은 아닙니다!

케이스 2 : 태그/키 그룹이 포함된 FIX 메시지 읽기

다음은 우리 모델에서 처리하려는 메시지입니다.Here is the message that we want to process in our model:

8=FIX 4.19=2034=135=049=INVMGR56=BRKR
1=BE.CHM.00111=CHM0001-0158=this is a camel - bindy test
22=448=BE000124567854=1
22=548=BE000987654354=2
22=648=BE000999999954=3
10=220

태그(2, 48 및 54)가 반복됨

그리고 코드

태그/키 그룹이 포함된 FIX 메시지 읽기

public class Order {

    @Link Header header;

    @Link Trailer trailer;

    @KeyValuePairField(tag = 1) // Client reference
    private String account;

    @KeyValuePairField(tag = 11) // Order reference
    private String clOrdId;

    @KeyValuePairField(tag = 58) // Free text
    private String text;

    @OneToMany(mappedTo = "org.apache.camel.dataformat.bindy.model.fix.complex.onetomany.Security")
    List<Security> securities;
}

public class Security {

    @KeyValuePairField(tag = 22) // Fund ID type (Sedol, ISIN, ...)
    private String idSource;

    @KeyValuePairField(tag = 48) // Fund code
    private String securityCode;

    @KeyValuePairField(tag = 54) // Movement type ( 1 = Buy, 2 = sell)
    private String side;
}

48.11. 9. BindyConverter

주석 @BindyConverter의 목적은 필드 수준에서 사용할 변환기를 정의합니다. 제공된 클래스는 Format 인터페이스를 구현해야 합니다.

@FixedLengthRecord(length = 10, paddingChar = ' ')
public static class DataModel {
    @DataField(pos =  1, length = 10, trim = true)
    @BindyConverter(CustomConverter.class)
    public String field1;
}

public static class CustomConverter implements Format<String> {
    @Override
    public String format(String object) throws Exception {
        return (new StringBuilder(object)).reverse().toString();
    }

    @Override
    public String parse(String string) throws Exception {
        return (new StringBuilder(string)).reverse().toString();
    }
}

48.12. 10. FormatFactories

주석 @FormatFactories의 목적은 레코드 수준에서 변환기 집합을 정의하는 것입니다. 제공된 클래스는 FormatFactoryInterface 인터페이스를 구현해야 합니다.

@CsvRecord(separator = ",")
@FormatFactories({OrderNumberFormatFactory.class})
public static class Order {

    @DataField(pos = 1)
    private OrderNumber orderNr;

    @DataField(pos = 2)
    private String firstName;
}

public static class OrderNumber {
    private int orderNr;

    public static OrderNumber ofString(String orderNumber) {
        OrderNumber result = new OrderNumber();
        result.orderNr = Integer.valueOf(orderNumber);
        return result;
    }
}

public static class OrderNumberFormatFactory extends AbstractFormatFactory {

    {
        supportedClasses.add(OrderNumber.class);
    }

    @Override
    public Format<?> build(FormattingOptions formattingOptions) {
        return new Format<OrderNumber>() {
            @Override
            public String format(OrderNumber object) throws Exception {
                return String.valueOf(object.orderNr);
            }

            @Override
            public OrderNumber parse(String string) throws Exception {
                return OrderNumber.ofString(string);
            }
        };
    }
}

48.13. 지원되는 데이터 유형

DefaultFormatFactory는 제공된 FormattingOptions를 기반으로 인터페이스 FormatFactoryInterface의 인스턴스를 반환하여 다음 데이터 형식을 사용할 수 있습니다.

  • BigDecimal
  • BigInteger
  • 부울
  • byte
  • 문자
  • 날짜
  • double
  • enums
  • float
  • 정수
  • LocalDate ( 2.18.0 이후의java 8)
  • LocalDateTime ( 2.18.0 이후의java 8)
  • localtime ( 2.18.0 이후java 8)
  • long
  • short
  • 문자열

DefaultFormatFactory는 사용 중인 레지스트리에 FactoryRegistry 인스턴스를 제공하여 재정의할 수 있습니다(예: Spring 또는 JNDI).

48.14. Java DSL 사용

다음 단계는 이 레코드 유형과 연결된 DataFormat bindy 클래스를 인스턴스화하고 Java 패키지 이름을 매개 변수로 제공하는 것입니다.

예를 들어 다음에서는 BindyCsvDataFormat 클래스를 사용하며 CSV 레코드 유형과 연결된 클래스에 해당하는 클래스를 com.acme.model 패키지 이름으로 구성하여 이 패키지에 구성된 모델 개체를 초기화합니다.For example, the following uses the class BindyCsvDataFormat (who correspond to the class associated with the CSV record type) which is configured with com.acme.model package name to initialize the model objects configured in this package.

// Camel 2.15 or older (configure by package name)
DataFormat bindy = new BindyCsvDataFormat("com.acme.model");

 
// Camel 2.16 onwards (configure by class name)
DataFormat bindy = new BindyCsvDataFormat(com.acme.model.MyModel.class);

48.14.1. 로케일 설정

Bindy는 다음과 같이 dataformat의 로캘 구성을 지원합니다. 

// Camel 2.15 or older (configure by package name)
BindyCsvDataFormat bindy = new BindyCsvDataFormat("com.acme.model");
// Camel 2.16 onwards (configure by class name)
BindyCsvDataFormat bindy = new BindyCsvDataFormat(com.acme.model.MyModel.class);

bindy.setLocale("us");

또는 플랫폼 기본 로케일을 사용하려면 로케일 이름으로 "default"를 사용합니다. Camel 2.14/2.13.3/2.12.5가 필요합니다.

// Camel 2.15 or older (configure by package name)
BindyCsvDataFormat bindy = new BindyCsvDataFormat("com.acme.model");
// Camel 2.16 onwards (configure by class name)
BindyCsvDataFormat bindy = new BindyCsvDataFormat(com.acme.model.MyModel.class);

bindy.setLocale("default");

이전 릴리스의 경우 다음과 같이 Java 코드를 사용하여 설정할 수 있습니다.

// Camel 2.15 or older (configure by package name)
BindyCsvDataFormat bindy = new BindyCsvDataFormat("com.acme.model");
// Camel 2.16 onwards (configure by class name)
BindyCsvDataFormat bindy = new BindyCsvDataFormat(com.acme.model.MyModel.class);

bindy.setLocale(Locale.getDefault().getISO3Country());

48.14.2. Unmarshaling

from("file://inbox")
  .unmarshal(bindy)
  .to("direct:handleOrders");

또는 Spring XML 파일과 같이 레지스트리에 정의된 다음 데이터 형식에 대해 명명된 참조를 사용할 수 있습니다.

from("file://inbox")
  .unmarshal("myBindyDataFormat")
  .to("direct:handleOrders");

Camel 경로는 inbox 디렉터리의 파일 선택, unmarshall CSV 레코드를 모델 오브젝트 컬렉션으로 선택하고 컬렉션
을 'handleOrders'에서 참조하는 경로로 보냅니다.

반환된 컬렉션은 Map 오브젝트의 목록입니다. 목록의 각 맵에는 CSV의 각 줄에서 마샬링된 모델 개체가 포함되어 있습니다. 이 문제의 원인은 각 행이 두 개 이상의 오브젝트에 해당할 수 있기 때문입니다. 이는 단순히 한 줄에 하나의 개체가 반환될 것으로 예상하면 혼동될 수 있습니다.

각 오브젝트는 해당 클래스 이름을 사용하여 검색할 수 있습니다.

List<Map<String, Object>> unmarshaledModels = (List<Map<String, Object>>) exchange.getIn().getBody();

int modelCount = 0;
for (Map<String, Object> model : unmarshaledModels) {
  for (String className : model.keySet()) {
     Object obj = model.get(className);
     LOG.info("Count : " + modelCount + ", " + obj.toString());
  }
 modelCount++;
}

LOG.info("Total CSV records received by the csv bean : " + modelCount);

경로의 처리를 위해 이 맵에서 단일 Order 오브젝트를 추출하려는 경우 다음 내용에 따라 Splitter와 Processor의 조합을 사용할 수 있습니다.

from("file://inbox")
    .unmarshal(bindy)
    .split(body())
        .process(new Processor() {
            public void process(Exchange exchange) throws Exception {
                Message in = exchange.getIn();
                Map<String, Object> modelMap = (Map<String, Object>) in.getBody();
                in.setBody(modelMap.get(Order.class.getCanonicalName()));
            }
        })
        .to("direct:handleSingleOrder")
    .end();

Bindy는 unmarshalling을 위해 수신한 입력 스트림의 문자 세트 변환을 수행하기 위해 Exchange 인터페이스에서 정의된 사용자 이름 또는 CHARSET_NAME 헤더를 사용합니다. 일부 생산자(예: file-endpoint)에서는 문자 집합을 정의할 수 있습니다. 이 프로듀서의 변환은 이미 수행 할 수 있습니다. 때로는 unmarshal으로 보내기 전에 교환에서 이 속성 또는 헤더를 제거해야 합니다. 이를 제거하지 않으면 변환이 두 번 수행되어 원하지 않는 결과가 발생할 수 있습니다.

from("file://inbox?charset=Cp922")
  .removeProperty(Exchange.CHARSET_NAME)
  .unmarshal("myBindyDataFormat")
  .to("direct:handleOrders");

48.14.3. 마샬링

모델 오브젝트 컬렉션에서 CSV 레코드를 생성하려면 다음 경로를 생성합니다.

from("direct:handleOrders")
   .marshal(bindy)
   .to("file://outbox")

48.15. Spring XML 사용

이것은 camel-bindy에 사용할 경로를 선언하기 위해 선호하는 DSL 언어로 Spring을 사용하기 쉽습니다. 다음 예제에서는 파일에서 첫 번째 레코드를 선택하는 두 개의 경로를 보여줍니다. 즉, 콘텐츠를 압축 해제하고 해당 모델에 바인딩합니다. 그러면 그 결과가 pojo로 보내(특별하지 않음) 큐에 배치합니다.

두 번째 경로는 큐에서 pojos를 추출하고 콘텐츠를 마샬링하여 csv 레코드가 포함된 파일을 생성합니다. 위의 예는 Camel 2.16 이상을 사용하는 것입니다.

spring dsl

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
       http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://camel.apache.org/schema/spring
       http://camel.apache.org/schema/spring/camel-spring.xsd">

    <!-- Queuing engine - ActiveMq - work locally in mode virtual memory -->
    <bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent">
        <property name="brokerURL" value="vm://localhost:61616"/>
    </bean>

    <camelContext xmlns="http://camel.apache.org/schema/spring">
        <dataFormats>
          <bindy id="bindyDataformat" type="Csv" classType="org.apache.camel.bindy.model.Order"/>
        </dataFormats>

        <route>
            <from uri="file://src/data/csv/?noop=true" />
            <unmarshal ref="bindyDataformat" />
            <to uri="bean:csv" />
            <to uri="activemq:queue:in" />
        </route>

        <route>
            <from uri="activemq:queue:in" />
            <marshal ref="bindyDataformat" />
            <to uri="file://src/data/csv/out/" />
        </route>
    </camelContext>
</beans>
참고

모델 클래스가 serializable을 구현했는지 확인하십시오. 그렇지 않으면 큐 관리자가 오류를 발생시킵니다.

48.16. 종속 항목

camel 경로에서 Bindy를 사용하려면 이 데이터 형식을 구현하는 camel-bindy 에 종속성을 추가해야 합니다.

maven을 사용하는 경우 pom.xml에 다음을 추가하면 최신 및 가장 큰 릴리스의 버전 번호를 대체합니다(최신 버전의 다운로드 페이지 참조).

<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-bindy</artifactId>
  <version>x.x.x</version>
</dependency>

49장. Camel에서 OSGi 청사진 사용

블루프린트용 사용자 지정 XML 네임스페이스가 생성되어 우수한 XML 전화 기능을 활용할 수 있습니다. Blueprint 사용자 지정 네임스페이스가 아직 표준화되지 않은 경우 이 네임스페이스는 Apache Karaf에서 사용하는 Apache Aries Blueprint 구현에서만 사용할 수 있습니다.

49.1. 개요

XML 스키마는 주로 Spring용 항목과 동일하므로 Spring XML을 참조하는 설명서 전체의 모든 xml 스니펫도 Blueprint 경로에 적용됩니다.

청사진을 사용하는 매우 간단한 경로 정의는 다음과 같습니다.

<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">

    <camelContext xmlns="http://camel.apache.org/schema/blueprint">
        <route>
            <from uri="timer:test" />
            <to uri="log:test" />
        </route>
    </camelContext>

</blueprint>

이 시점에서 지원되는 xml 요소( Spring xml 구문 비교)에 대한 몇 가지 제한 사항이 있습니다.

  • beanPostProcessor는 Spring에만 해당되며 허용되지 않습니다.

그러나 OSGi enviroment에 애플리케이션을 배포할 때 청사진을 사용하면 다음과 같은 몇 가지 이점이 있습니다.

  • 새로운 camel 버전으로 업그레이드할 때 번들에서 가져오는 camel 패키지를 기반으로 올바른 버전이 선택되므로 네임스페이스를 변경할 필요가 없습니다.
  • 사용자 정의 네임스페이스 및 번들과 관련하여 시작 순서 문제가 없음
  • Blueprint 속성 자리 표시자를 사용할 수 있습니다.

49.2. camel-blueprint 사용

OSGi의 camel-blueprint를 활용하려면 Aries Blueprint 번들과 camel-blueprint 번들뿐만 아니라 camel-core 및 해당 종속 항목만 있으면 됩니다.

Karaf를 사용하는 경우 모든 필수 번들을 설치하는 camel-blueprint라는 기능을 사용할 수 있습니다.

50장. Bonita 구성 요소

Camel 버전 2.19에서 사용 가능

원격 Bonita BPM 프로세스 엔진과 통신하는 데 사용됩니다.

50.1. URI 형식

bonita://[operation]?[options]

여기서 작업 은 Bonita에서 수행해야 하는 특정 작업입니다.

50.2. 일반 옵션

Bonita 구성 요소에는 옵션이 없습니다.

Bonita 엔드포인트는 URI 구문을 사용하여 구성됩니다.

bonita:operation

다음 경로 및 쿼리 매개변수를 사용합니다.

50.2.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

작업

사용하는 데 필요한 작업

 

BonitaOperation

50.2.2. 쿼리 매개변수(9 매개변수):

Expand
이름설명기본값유형

bridgeErrorHandler (consumer)

소비자를 Camel 라우팅 오류 처리기에 브리징할 수 있습니다. 이는 소비자가 들어오는 메시지를 선택하는 동안 예외가 발생한 것을 의미하며, 이제 메시지로 처리되어 라우팅 오류 처리기에 의해 처리됩니다. 기본적으로 소비자는 org.apache.camel.spi.ExceptionHandler를 사용하여 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

false

boolean

호스트 이름 (consumer)

Bonita 엔진이 실행되는 호스트 이름

localhost

문자열

포트 (소비자)

Bonita 엔진을 호스팅하는 서버 포트

8080

문자열

ProcessName (consumer)

작업에 관련된 프로세스의 이름입니다.

 

문자열

예외 처리기 (consumer)

소비자가 사용자 지정 ExceptionHandler를 사용하도록 하려면 다음을 수행합니다. bridgeErrorHandler 옵션이 활성화되어 있는지 확인한 후 이 옵션이 사용되지 않습니다. 기본적으로 소비자는 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

 

ExceptionHandler

exchangePattern (consumer)

소비자가 교환을 생성할 때 교환 패턴을 설정합니다.

 

ExchangePattern

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

암호 (보안)

Bonita 엔진에 인증하기 위한 암호.

 

문자열

사용자 이름 (보안)

Bonita 엔진에 인증할 사용자 이름입니다.

 

문자열

50.3. 본문 콘텐츠

startCase 작업의 경우 입력 변수가 본문 메시지에서 검색됩니다. Map<String,Serializable>을 포함해야 합니다.

50.4. 예제

다음 예제에서는 Bonita에서 새 케이스를 시작합니다.

from("direct:start").to("bonita:startCase?hostname=localhost&amp;port=8080&amp;processName=TestProcess&amp;username=install&amp;password=install")

50.5. 종속 항목

Camel 경로에서 Bonita를 사용하려면 구성 요소를 구현하는 camel-bonita 에 종속성을 추가해야 합니다.

Maven을 사용하는 경우 pom.xml에 다음을 추가하여 최신 버전과 가장 큰 릴리스의 버전 번호를 대체합니다(최신 버전의 다운로드 페이지 참조).

<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-bonita</artifactId>
  <version>x.x.x</version>
</dependency>

51장. boon DataFormat

Camel 버전 2.16에서 사용 가능

boon은 Boon JSON 마샬링 라이브러리를 사용하여 JSON 페이로드를 Java 객체로 분리하거나 Java 개체를 JSON 페이로드로 마샬링하는 데이터 형식입니다. boon은 현재 사용되는 다른 일반 파서보다 간단하고  른 파서가되는 것을 목표로 합니다.

51.1. 옵션

Boon dataformat은 아래 나열된 3가지 옵션을 지원합니다.

Expand
이름기본값Java Type설명

unmarshalTypeName

 

문자열

armshalling할 때 사용할 Java 유형의 클래스 이름

useList

false

부울

맵 목록 또는 Pojo 목록에 대한 총합을 해제하려면 다음을 수행합니다.

contentTypeHeader

false

부울

데이터 형식이 데이터 형식에서 수행할 수 있는 경우 데이터 형식의 유형으로 Content-Type 헤더를 설정해야 하는지 여부입니다. 예를 들어 데이터 형식을 XML로 마샬링하거나, JSon으로 마샬링되는 데이터 형식에 대한 application/json 등이 있습니다.

51.2. Java DSL 사용

DataFormat boonDataFormat = new BoonDataFormat("com.acme.model.Person");

from("activemq:My.Queue")
  .unmarshal(boonDataFormat)
  .to("mqseries:Another.Queue");

51.3. Blueprint XML 사용

<bean id="boonDataFormat" class="org.apache.camel.component.boon.BoonDataFormat">
  <argument value="com.acme.model.Person"/>
</bean>

<camelContext id="camel" xmlns="http://camel.apache.org/schema/blueprint">
  <route>
    <from uri="activemq:My.Queue"/>
    <unmarshal ref="boonDataFormat"/>
    <to uri="mqseries:Another.Queue"/>
  </route>
</camelContext>

51.4. 종속 항목

<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-boon</artifactId>
  <version>x.x.x</version>
</dependency>

52장. 박스 구성 요소

Camel 버전 2.14로 사용 가능

Box 구성 요소를 사용하면 https://github.com/box/box-java-sdk 을 사용하여 액세스할 수 있는 모든 Box.com API에 액세스할 수 있습니다. 이를 통해 파일을 업로드하고 다운로드하고 폴더를 생성, 편집 및 관리하는 메시지를 생성할 수 있습니다. 또한 사용자 계정 업데이트 및 엔터프라이즈 계정 변경 등을 폴링할 수 있는 API도 지원합니다.

box.com은 모든 클라이언트 애플리케이션 인증에 OAuth2.0을 사용해야 합니다. 계정에 camel-box를 사용하려면 Box.com 내에 새 애플리케이션을 https://developer.box.com. Box 애플리케이션의 클라이언트 ID 및 시크릿을 사용하면 현재 사용자가 필요한 Box API에 액세스할 수 있습니다. 사용자 액세스 토큰은 최종 사용자에 대한 API에서 생성하고 관리합니다.

Maven 사용자는 이 구성 요소를 위해 다음 종속성을 pom.xml에 추가해야 합니다.

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-box</artifactId>
    <version>${camel-version}</version>
</dependency>

52.1. 연결 인증 유형

Box 구성 요소는 인증된 세 가지 유형의 인증된 연결을 지원합니다.

52.1.1. 표준 인증

표준 인증OAuth 2.0 3 계층 인증 프로세스 를 사용하여 Box.com으로 연결을 인증합니다. 이 유형의 인증을 사용하면 Box 관리 사용자와 외부 사용자 가 Box 구성 요소를 통해 Box 콘텐츠에 액세스, 편집 및 저장할 수 있습니다.

52.1.2. App Enterprise Authentication

App Enterprise AuthenticationJSON Web Tokens(JWT)와 OAuth 2.0 을 사용하여 Box Application서비스 계정 으로 연결을 인증합니다. 이 유형의 인증을 사용하면 서비스 계정이 Box 구성 요소를 통해 Box Application 의 Box 콘텐츠에 액세스, 편집 및 저장할 수 있습니다.

52.1.3. 앱 사용자 인증

App User AuthenticationJSON Web Tokens(JWT)와 OAuth 2.0 을 사용하여 Box ApplicationApp User 로 연결을 인증합니다. 이러한 유형의 인증을 통해 앱 사용자는 Box 구성 요소를 통해 Box Application 에 액세스, 편집 및 저장할 수 있습니다.

52.2. 박스 옵션

Box 구성 요소는 아래 나열된 두 가지 옵션을 지원합니다.

Expand
이름설명기본값유형

구성 (일반)

공유 구성을 사용하려면To use the shared configuration

 

BoxConfiguration

resolveProperty Placeholders (advanced)

구성 요소가 시작 시 자체적으로 속성 자리 표시자를 확인해야 하는지 여부입니다. String 유형의 속성만 속성 자리 표시자를 사용할 수 있습니다.Only properties which are of String type can use property placeholders.

true

boolean

Box 엔드포인트는 URI 구문을 사용하여 구성됩니다.

box:apiName/methodName

다음 경로 및 쿼리 매개변수를 사용합니다.

52.2.1. 경로 매개 변수(2 매개변수):

Expand
이름설명기본값유형

apiName

떤 종류의 작업을 수행해야 합니까?

 

BoxApiName

methodName

선택한 작업에 사용할 하위 작업 필요

 

문자열

52.2.2. 쿼리 매개변수 (20 매개변수):

Expand
이름설명기본값유형

clientID( 일반)

box 애플리케이션 클라이언트 ID

 

문자열

enterpriseId (공용)

앱 엔터프라이즈에 사용할 엔터프라이즈 ID입니다.

 

문자열

InBody (일반)

교환 In Body에서 전달할 매개 변수의 이름을 설정합니다.

 

문자열

userid (common)

앱 사용자에 사용할 사용자 ID입니다.

 

문자열

bridgeErrorHandler (consumer)

소비자를 Camel 라우팅 오류 처리기에 브리징할 수 있습니다. 이는 소비자가 들어오는 메시지를 선택하는 동안 예외가 발생한 것을 의미하며, 이제 메시지로 처리되어 라우팅 오류 처리기에 의해 처리됩니다. 기본적으로 소비자는 org.apache.camel.spi.ExceptionHandler를 사용하여 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

false

boolean

예외 처리기 (consumer)

소비자가 사용자 지정 ExceptionHandler를 사용하도록 하려면 다음을 수행합니다. bridgeErrorHandler 옵션이 활성화되어 있는지 확인한 후 이 옵션이 사용되지 않습니다. 기본적으로 소비자는 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

 

ExceptionHandler

exchangePattern (consumer)

소비자가 교환을 생성할 때 교환 패턴을 설정합니다.

 

ExchangePattern

httpParams (고급)

프록시 호스트와 같은 설정에 대한 사용자 정의 HTTP 매개변수

 

map

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

accessTokenCache (security)

액세스 토큰을 저장하고 검색하는 데 사용되는 사용자 정의 액세스 토큰 캐시입니다.

 

IAccessTokenCache

clientSecret (보안)

박스 애플리케이션 클라이언트 시크릿

 

문자열

encryptionAlgorithm (보안)

JWT의 암호화 알고리즘 유형입니다. 지원되는 알고리즘: RSA_SHA_256 RSA_SHA_384 RSA_SHA_512

RSA_SHA_256

EncryptionAlgorithm

maxCacheEntries (보안)

캐시의 최대 액세스 토큰 수입니다.

100

int

authenticationType (authentication)

연결의 인증 유형입니다. 인증 유형: STANDARD_AUTHENTICATION - OAuth 2.0 (3-legged) SERVER_AUTHENTICATION - OAuth 2.0 with JSON Web Tokens

APP_USER_AUTHENTICATION

문자열

privateKeyFile (security)

JWT 서명을 생성하는 개인 키입니다.

 

문자열

privateKeyPassword (보안)

개인 키의 암호입니다.

 

문자열

publicKeyId (security)

JWT 서명을 검증하기 위한 공개 키의 ID입니다.

 

문자열

sslContextParameters (security)

SSLContextParameters를 사용하여 보안을 구성하려면 다음을 수행합니다.

 

SSLContextParameters

사용자 이름 (보안)

사용자 이름, 제공되어야 합니다.

 

문자열

userPassword (보안)

authSecureStorage가 설정되지 않은 경우 박스 사용자 비밀번호를 제공하거나 첫 번째 통화 시 null을 반환해야 합니다.

 

문자열

52.3. URI 형식

box:apiName/methodName

apiName은 다음 중 하나일 수 있습니다.

  • 협업
  • 주석
  • event-logs
  • 파일
  • 폴더
  • groups
  • events
  • search
  • tasks
  • 사용자

52.4. 생산자 끝점:

생산자 엔드포인트는 엔드포인트 접두사 뒤에 다음에 설명된 끝점 이름 및 관련 옵션을 사용할 수 있습니다. 일부 엔드포인트에서는 단축 별칭을 사용할 수 있습니다. 엔드포인트 URI에는 접두사가 포함되어야 합니다.

필수가 아닌 엔드포인트 옵션은 [] 로 표시됩니다. 끝점에 대한 필수 옵션이 없는 경우 [] 옵션 세트 중 하나를 제공해야 합니다. 생산자 엔드포인트는 Camel Exchange In 메시지에 포함된 엔드포인트 옵션의 이름을 포함해야 하는 특수 옵션 inBody 를 사용할 수도 있습니다.

끝점 URI에서 또는 메시지 헤더에서 동적으로 끝점 옵션을 제공할 수 있습니다. 메시지 헤더 이름은 CamelBox.<option> 형식이어야 합니다. inBody 옵션은 메시지 헤더를 덮어씁니다. 즉 inBody=option 의 endpoint 옵션은 CamelBox.option 헤더를 재정의합니다.

끝점 URI 또는 메시지 헤더에 있는 옵션 defaultRequest에 대해 값이 제공되지 않으면 null 로 간주됩니다. null 값은 다른 옵션이 일치하는 엔드 포인트를 충족하지 않는 경우에만 사용됩니다.

Box API 오류가 발생하는 경우 끝점에서 com.box.sdk.BoxAPIException 파생 예외를 사용하여 RuntimeCamelException을 throw합니다.

52.4.1. 끝점 접두사 협업

박스 협업에 대한 자세한 내용은 https://developer.box.com/reference#collaboration-object 에서 참조하십시오. 다음과 같이 접두사 협업 을 사용하여 다음 끝점을 호출할 수 있습니다.

box:collaborations/endpoint?[options]
Expand
끝점단축 별칭옵션결과 본문 유형

addFolderCollaboration

add

folderId, collaborator, role

com.box.sdk.BoxCollaboration

addFolderCollaborationByEmail

addByEmail

folderId, email, role

com.box.sdk.BoxCollaboration

deleteCollaboration

delete

collaborationId

 

getFolderCollaborations

협업

folderId

java.util.Collection

getPendingCollaborations

pendingCollaborations

 

java.util.Collection

getCollaborationInfo

info

collaborationId

com.box.sdk.BoxCollaboration.Info

updateCollaborationInfo

updateInfo

collaborationId, info

com.box.sdk.BoxCollaboration

협업을 위한 URI 옵션

Expand
이름유형

collaborationId

문자열

협력자

com.box.sdk.BoxCollaborator

role

com.box.sdk.BoxCollaboration.Role

folderId

문자열

email

문자열

info

com.box.sdk.BoxCollaboration.Info

52.4.2. 끝점 접두사 주석

Box 주석에 대한 자세한 내용은 https://developer.box.com/reference#comment-object 을 참조하십시오. 다음과 같이 접두사 주석 을 사용하여 다음 끝점을 호출할 수 있습니다.

box:comments/endpoint?[options]
Expand
끝점단축 별칭옵션결과 본문 유형

addFileComment

add

fileId, message

com.box.sdk.BoxFile

changeCommentMessage

updateMessage

commentId, message

com.box.sdk.BoxComment

deleteComment

delete

commentId

 

getCommentInfo

info

commentId

com.box.sdk.BoxComment.Info

getFileComments

주석

fileId

java.util.List

replyToComment

응답

commentId, message

com.box.sdk.BoxComment

협업을 위한 URI 옵션

Expand
이름유형

commentId

문자열

fileId

문자열

message

문자열

52.4.3. 끝점 접두사 events-logs

Box 이벤트 로그에 대한 자세한 내용은 https://developer.box.com/reference#events 을 참조하십시오. 다음과 같이 접두사 이벤트 를 사용하여 다음 끝점을 호출할 수 있습니다.

box:event-logs/endpoint?[options]
Expand
끝점단축 별칭옵션결과 본문 유형

getEnterpriseEvents

events

위치, 후, 전, [타입]

java.util.List

이벤트로그에 대한 URI 옵션

Expand
이름유형

위치

문자열

after

날짜

before

날짜

types

com.box.sdk.BoxEvent.Types[]

52.4.4. 끝점 접두사 파일

박스 파일에 대한 자세한 내용은 https://developer.box.com/reference#file-object 에서 참조하십시오. 다음과 같이 접두사 파일 을 사용하여 다음 엔드포인트를 호출할 수 있습니다.

box:files/endpoint?[options]
Expand
끝점단축 별칭옵션결과 본문 유형

uploadFile

업로드

parentFolderId, content, fileName, [created], [modified], [size], [listener]

com.box.sdk.BoxFile

downloadFile

다운로드

fileId, output, [rangeStart], [rangeEnd], [listener]

java.io.OutputStream

copyFile

copy

fileId, destinationFolderId, [newName]

com.box.sdk.BoxFile

moveFile

move

fileId, destinationFolderId, [newName]

com.box.sdk.BoxFile

renameFile

rename

fileId, newFileName

com.box.sdk.BoxFile

createFileSharedLink

link

fileId, access, [unshareDate], [permissions]

com.box.sdk.BoxSharedLink

deleteFile

delete

fileId

 

uploadNewFileVersion

uploadVersion

fileId, fileContent, [modified], [fileSize], [listener]

com.box.boxsdk.BoxFile

promoteFileVersion

promoteVersion

fileId, version

com.box.sdk.BoxFileVersion

getFileVersions

버전

fileId

java.util.Collection

downloadPreviousFileVersions

downloadVersion

fileId, version, output, [listener]

java.io.OutputStream

deleteFileVersion

deleteVersion

fileId, version

 

getFileInfo

info

fileId, fields

com.box.sdk.BoxFile.Info

updateFileInfo

updateInfo

fileId, info

com.box.sdk.BoxFile

createFileMetadata

createMetadata

fileId, metadata, [typeName]

com.box.sdk.Metadata

getFileMetadata

metadata

fileId, [typeName]

com.box.sdk.Metadata

updateFileMetadata

updateMetadata

fileId, metadata

com.box.sdk.Metadata

deleteFileMetadata

deleteMetadata

fileId

 

getDownloadUrl

url

fileId

java.net.URL

getPreviewLink

미리 보기

fileId

java.net.URL

getFileThumbnail

thumbnail

fileId, fileType, minWidth, minHeight, maxWidth, maxHeight

byte[]

파일의 URI 옵션

Expand
이름유형

parentFolderId

문자열

내용

java.io.InputStream

fileName

문자열

created

날짜

modified

날짜

크기

long

listener

com.box.sdk.ProgressListener

출력

java.io.OutputStream

rangeStart

long

rangeEnd

long

outputStreams

java.io.OutputStream[]

destinationFolderId

문자열

newName

문자열

필드

string[]

info

com.box.sdk.BoxFile.Info

fileSize

long

version

정수

액세스

com.box.sdk.BoxSharedLink.Access

unshareDate

날짜

권한

com.box.sdk.BoxSharedLink.Permissions

fileType

com.box.sdk.BoxFile.ThumbnailFileType

minWidth

정수

minHeight

정수

maxWidth

정수

maxHeight

정수

metadata

com.box.sdk.Metadata

typeName

문자열

52.4.5. 끝점 접두사 폴더

박스 폴더에 대한 자세한 내용은 https://developer.box.com/reference#folder-object 에서 참조하십시오. 다음과 같이 접두사 폴더 를 사용하여 다음 엔드포인트를 호출할 수 있습니다.

box:folders/endpoint?[options]
Expand
끝점단축 별칭옵션결과 본문 유형

getRootFolder

루트

 

com.box.sdk.BoxFolder

createFolder

create

parentFolderId, folderName

com.box.sdk.BoxFolder

createFolder

create

parentFolderId, path

com.box.sdk.BoxFolder

copyFolder

copy

folderId, destinationfolderId, [newName]

com.box.sdk.BoxFolder

moveFolder

move

folderId, destinationFolderId, newName

com.box.sdk.BoxFolder

renameFolder

rename

folderId, newFolderName

com.box.sdk.BoxFolder

createFolderSharedLink

link

folderId, access, [unsharedDate], [permissions]

java.util.List

deleteFolder

delete

folderId

 

getFolder

폴더

경로

com.box.sdk.BoxFolder

getFolderInfo

info

folderId, fields

com.box.sdk.BoxFolder.Info

getFolderItems

items

folderId, offset, limit, fields

com.box.sdk.BoxFolder

updateFolderInfo

updateInfo

folderId, info

com.box.sdk.BoxFolder

폴더에 대한 URI 옵션

Expand
이름유형

경로

string[]

folderId

문자열

offset

long

제한

long

필드

string[]

parentFolderId

문자열

folderName

문자열

destinationFolderId

문자열

newName

문자열

newFolderName

문자열

info

문자열

액세스

com.box.sdk.BoxSharedLink.Access

unshareDate

날짜

권한

com.box.sdk.BoxSharedLink.Permissions

52.4.6. 끝점 접두사 그룹

박스 그룹에 대한 자세한 내용은 https://developer.box.com/reference#group-object 에서 참조하십시오. 다음과 같이 접두사 그룹 을 사용하여 다음 끝점을 호출할 수 있습니다.

box:groups/endpoint?[options]
Expand
끝점단축 별칭옵션결과 본문 유형

createGroup

create

name, [provenance, externalSyncIdentifier, description, invitabilityLevel, memberViewabilityLevel]

com.box.sdk.BoxGroup

addGroupMembership

createMembership

groupId, userId, role

com.box.sdk.BoxGroupMembership

deleteGroup

delete

groupId

 

getAllGroups

groups

 

java.util.Collection

getGroupInfo

info

groupId

com.box.sdk.BoxGroup.Info

updateGroupInfo

updateInfo

groupId, groupInfo

com.box.sdk.BoxGroup

addGroupMembership

addMembership

groupId, userId, role

com.box.sdk.BoxGroupMembership

deleteGroupMembership

deleteMembership

groupMembershipId

 

getGroupMemberships

memberships

groupId

java.uti.Collection

getGroupMembershipInfo

membershipInfo

groupMembershipId

com.box.sdk.BoxGroup.Info

updateGroupMembershipInfo

updateMembershipInfo

groupMembershipId, info

com.box.sdk.BoxGroupMembership

그룹의 URI 옵션

Expand
이름유형

name

문자열

groupId

문자열

userId

문자열

role

com.box.sdk.BoxGroupMembership.Role

groupMembershipId

문자열

info

com.box.sdk.BoxGroupMembership.Info

52.4.7. 끝점 접두사 검색

Box 검색 API에 대한 자세한 내용은 https://developer.box.com/reference#searching-for-content 에서 참조하십시오. 다음과 같이 접두사 검색 을 사용하여 다음 끝점을 호출할 수 있습니다.

box:search/endpoint?[options]
Expand
끝점단축 별칭옵션결과 본문 유형

searchFolder

search

folderId, query

java.util.Collection

검색URI 옵션

Expand
이름유형

folderId

문자열

query

문자열

52.4.8. 끝점 접두사 작업

박스 작업에 대한 자세한 내용은 https://developer.box.com/reference#task-object-1 에서 참조하십시오. 다음과 같이 접두사 작업 을 사용하여 다음 끝점을 호출할 수 있습니다.

box:tasks/endpoint?[options]
Expand
끝점단축 별칭옵션결과 본문 유형

addFileTask

add

fileId, action, dueAt, [message]

com.box.sdk.BoxUser

deleteTask

delete

taskId

 

getFileTasks

tasks

fileId

java.util.List

getTaskInfo

info

taskId

com.box.sdk.BoxTask.Info

updateTaskInfo

updateInfo

taskId, info

com.box.sdk.BoxTask

addAssignmentToTask

addAssignment

taskId, assignTo

com.box.sdk.BoxTask

deleteTaskAssignment

deleteAssignment

taskAssignmentId

 

getTaskAssignments

할당

taskId

java.util.List

getTaskAssignmentInfo

assignmentInfo

taskAssignmentId

com.box.sdk.BoxTaskAssignment.Info

작업에대한 URI 옵션

Expand
이름유형

fileId

문자열

작업

com.box.sdk.BoxTask.Action

dueAt

날짜

message

문자열

taskId

문자열

info

com.box.sdk.BoxTask.Info

assignTo

com.box.sdk.BoxUser

taskAssignmentId

문자열

52.4.9. 끝점 접두사 사용자

박스 사용자에 대한 자세한 내용은 https://developer.box.com/reference#user-object 에서 참조하십시오. 다음과 같이 접두사 사용자 를 사용하여 다음 끝점을 호출할 수 있습니다.

box:users/endpoint?[options]
Expand
끝점단축 별칭옵션결과 본문 유형

getCurrentUser

currentUser

 

com.box.sdk.BoxUser

getAllEnterpriseOrExternalUsers

사용자

filterTerm, [fields]

com.box.sdk.BoxUser

createAppUser

create

name, [params]

com.box.sdk.BoxUser

createEnterpriseUser

create

login, name, [params]

com.box.sdk.BoxUser

deleteUser

delete

userId, notifyUser, force

 

getUserEmailAlias

emailAlias

userId

com.box.sdk.BoxUser

deleteUserEmailAlias

deleteEmailAlias

userId, emailAliasId

java.util.List

getUserInfo

info

userId

com.box.sdk.BoxUser.Info

updateUserInfo

updateInfo

userId, info

com.box.sdk.BoxUser

moveFolderToUser

-

userId, sourceUserId

com.box.sdk.BoxFolder.Info

사용자를 위한 URI 옵션

Expand
이름유형

defaultRequest

com.box.restclientv2.requestsbase.BoxDefaultRequestObject

emailAliasRequest

com.box.boxjavalibv2.requests.requestobjects.BoxEmailAliasRequestObject

emailId

문자열

filterTerm

문자열

folderId

문자열

simpleUserRequest

com.box.boxjavalibv2.requests.requestobjects.BoxSimpleUserRequestObject

userDeleteRequest

com.box.boxjavalibv2.requests.requestobjects.BoxUserDeleteRequestObject

userId

문자열

userRequest

com.box.boxjavalibv2.requests.requestobjects.BoxUserRequestObject

userUpdateLoginRequest

com.box.boxjavalibv2.requests.requestobjects.BoxUserUpdateLoginRequestObject

52.5. 소비자 끝점:

박스 이벤트에 대한 자세한 내용은 https://developer.box.com/reference#events 에서 참조하십시오. 소비자 끝점은 다음에 예제와 같이 끝점 접두사 이벤트 만 사용할 수 있습니다.

box:events/endpoint?[options]
Expand
끝점단축 별칭옵션결과 본문 유형

events

 

[startingPosition]

com.box.sdk.BoxEvent

이벤트에대한 URI 옵션

Expand
이름유형

startingPosition

long

52.6. 메시지 헤더

CamelBox. 접두사를 사용하는 생산자 끝점의 메시지 헤더에 모든 옵션을 제공할 수 있습니다.

52.7. 메시지 본문

모든 결과 메시지 본문은 Box Java SDK에서 제공하는 오브젝트를 활용합니다. 생산자 끝점 매개 변수는 inBody 엔드포인트 매개 변수에서 들어오는 메시지 본문에 대한 옵션 이름을 지정할 수 있습니다.

52.8. 샘플

다음 경로는 새 파일을 사용자의 루트 폴더에 업로드합니다.

from("file:...")
    .to("box://files/upload/inBody=fileUploadRequest");

다음 경로는 업데이트를 위해 사용자 계정을 폴링합니다.

from("box://events/listen?startingPosition=-1")
    .to("bean:blah");

다음 경로는 동적 헤더 옵션이 있는 생산자를 사용합니다. fileId 속성에는 Box 파일 ID가 있고 출력 속성에는 파일 콘텐츠의 출력 스트림이 있으므로 다음과 같이 CamelBox.fileId 헤더 및 CamelBox.output 헤더에 각각 할당됩니다.

from("direct:foo")
    .setHeader("CamelBox.fileId", header("fileId"))
    .setHeader("CamelBox.output", header("output"))
    .to("box://files/download")
    .to("file://...");

53장. Braintree 구성 요소

Camel 버전 2.17로 사용 가능

Braintree 구성 요소는 Java SDK 를 통해 Braintree Payments 에 대한 액세스를 제공합니다.

모든 클라이언트 애플리케이션은 지불을 처리하기 위해 API 자격 증명이 필요합니다. 계정과 함께 camel-braintree를 사용하려면 새 Sandbox 또는 Production 계정을 만들어야 합니다.

Maven 사용자는 이 구성 요소를 위해 다음 종속성을 pom.xml에 추가해야 합니다.

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-braintree</artifactId>
    <version>${camel-version}</version>
</dependency>

 

53.1. Braintree Options

Braintree 구성 요소는 아래 나열된 두 가지 옵션을 지원합니다.

Expand
이름설명기본값유형

구성 (일반)

공유 구성을 사용하려면To use the shared configuration

 

BraintreeConfiguration

resolveProperty Placeholders (advanced)

구성 요소가 시작 시 자체적으로 속성 자리 표시자를 확인해야 하는지 여부입니다. String 유형의 속성만 속성 자리 표시자를 사용할 수 있습니다.Only properties which are of String type can use property placeholders.

true

boolean

Braintree 끝점은 URI 구문을 사용하여 구성됩니다.

braintree:apiName/methodName

다음 경로 및 쿼리 매개변수를 사용합니다.

53.1.1. 경로 매개 변수(2 매개변수):

Expand
이름설명기본값유형

apiName

떤 종류의 작업을 수행해야 합니까?

 

BraintreeApiName

methodName

선택한 작업에 사용할 하위 작업

 

문자열

53.1.2. 쿼리 매개변수(14 매개변수):

Expand
이름설명기본값유형

환경 (공용)

SANDBOX 또는 ProductION 환경

 

문자열

InBody (일반)

교환 In Body에서 전달할 매개 변수의 이름을 설정합니다.

 

문자열

memberId (일반)

Braintree에서 제공하는 판매자 ID입니다.

 

문자열

privateKey (common)

Braintree에서 제공하는 개인 키입니다.

 

문자열

publickey (공용)

Braintree에서 제공하는 공개 키입니다.

 

문자열

bridgeErrorHandler (consumer)

소비자를 Camel 라우팅 오류 처리기에 브리징할 수 있습니다. 이는 소비자가 들어오는 메시지를 선택하는 동안 예외가 발생한 것을 의미하며, 이제 메시지로 처리되어 라우팅 오류 처리기에 의해 처리됩니다. 기본적으로 소비자는 org.apache.camel.spi.ExceptionHandler를 사용하여 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

false

boolean

예외 처리기 (consumer)

소비자가 사용자 지정 ExceptionHandler를 사용하도록 하려면 다음을 수행합니다. bridgeErrorHandler 옵션이 활성화되어 있는지 확인한 후 이 옵션이 사용되지 않습니다. 기본적으로 소비자는 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

 

ExceptionHandler

exchangePattern (consumer)

소비자가 교환을 생성할 때 교환 패턴을 설정합니다.

 

ExchangePattern

Access Token (advanced)

사용자를 대신하여 트랜잭션을 처리하기 위해 판매자가 부여한 액세스 토큰입니다. 환경, 판매자 ID, 공개 키 및 개인 키 필드 대신 사용됩니다.

 

문자열

httpReadTimeout (advanced)

http 호출에 대한 읽기 시간 제한을 설정합니다.

 

정수

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

httpLogLevel (logging)

http 호출에 대한 로깅 수준을 설정하고 java.util.logging.Level을 참조하십시오.

 

문자열

proxyHost (proxy)

프록시 호스트

 

문자열

proxyPort (proxy)

프록시 포트

 

정수

53.2. URI 형식

 

braintree://endpoint-prefix/endpoint?[options]

 

끝점 접두사는 다음 중 하나일 수 있습니다.

  • addOn
  • 주소
  • clientToken
  • creditCardverification
  • customer
  • discount
  • merchantAccount
  • paymentmethod
  • paymentmethodNonce
  • 계획
  • settlementBatchSummary
  • subscription
  • Transaction
  • webhookNotification

 

53.3. BraintreeComponent

Braintree Component는 아래 옵션을 사용하여 구성할 수 있습니다. 이러한 옵션은 org.apache.camel.component.braintree.BraintreeConfiguration 유형의 구성 요소의 빈 속성 구성을 사용하여 제공할 수 있습니다.

Expand
옵션유형설명

환경

문자열

요청의 대상 위치를 지정하는 값 - 샌드박스 또는 프로덕션

merchantId

문자열

게이트웨이 계정의 고유 식별자이며, 이는 판매자 계정 ID와 다릅니다.

publicKey

문자열

사용자별 공용 식별자

privateKey

문자열

공유해서는 안 되는 사용자별 보안 식별자 - 저희와도 함께!

accessToken

문자열

Braintree Auth를 사용하여 판매자에게 부여된 토큰을 통해 다른 사용자를 대신하여 트랜잭션을 처리할 수 있습니다. 환경, 판매자Id, publicKey 및 privateKey 옵션 대신 사용됩니다.

위의 모든 옵션은 Braintree Payments에서 제공합니다.

53.4. 생산자 끝점:

생산자 엔드포인트는 엔드포인트 접두사 뒤에 다음에 설명된 끝점 이름 및 관련 옵션을 사용할 수 있습니다. 일부 엔드포인트에서는 단축 별칭을 사용할 수 있습니다. 엔드포인트 URI에는 접두사가 포함되어야 합니다.

필수가 아닌 엔드포인트 옵션은 []로 표시됩니다. 끝점에 대한 필수 옵션이 없는 경우 [] 옵션 세트 중 하나를 제공해야 합니다. 생산자 엔드포인트는 Camel Exchange In 메시지에 포함된 엔드포인트 옵션의 이름을 포함해야 하는 특수 옵션 inBody 를 사용할 수도 있습니다.

끝점 URI에서 또는 메시지 헤더에서 동적으로 끝점 옵션을 제공할 수 있습니다. 메시지 헤더 이름은 CamelBraintree.<option> 형식이어야 합니다. inBody 옵션은 메시지 헤더를 덮어씁니다. 즉 inBody=option 의 endpoint 옵션은 CamelBraintree.option 헤더를 재정의합니다.

엔드 포인트 및 옵션에 대한 자세한 내용은 Braintree 참조 ( https://developers.braintreepayments.com/reference/overview참조하십시오.

 

53.4.1. 끝점 접두사 애드온

다음과 같이 접두사 addOn 을 사용하여 다음 끝점을 호출할 수 있습니다.

 

braintree://addOn/endpoint
Expand
끝점단축 별칭옵션결과 본문 유형

all

 

 

List<com.braintreegateway.Addon>

53.4.2. 끝점 접두사 주소

다음과 같이 접두사 주소 를 사용하여 다음 끝점을 호출할 수 있습니다.

 

braintree://address/endpoint?[options]
Expand
끝점단축 별칭옵션결과 본문 유형

create

 

customerId, request

com.braintreegateway.Result<com.braintreegateway.Address>

delete

 

customerId, id

com.braintreegateway.Result<com.braintreegateway.Address> 

find

 

customerId, id

com.braintreegateway.Address

update

 

customerId, id, request

com.braintreegateway.Result<com.braintreegateway.Address> 

주소의 URI 옵션

Expand
이름유형

customerId

문자열

요청

com.braintreegateway.AddressRequest

id

문자열

53.4.3. 끝점 접두사 clientToken

다음과 같이 접두사 clientToken 을 사용하여 다음 끝점을 호출할 수 있습니다.

 

braintree://clientToken/endpoint?[options]
Expand
끝점단축 별칭옵션결과 본문 유형

generate

 

 요청

문자열

clientToken의 URI 옵션

Expand
이름유형

요청

com.braintreegateway.ClientTokenrequest

53.4.4. 끝점 접두사 신용Verification

다음과 같이 접두사 creditCardverification 을 사용하여 다음 엔드포인트를 호출할 수 있습니다.

 

braintree://creditCardVerification/endpoint?[options]
Expand
끝점단축 별칭옵션결과 본문 유형

find

 

 id

com.braintreegateway.CreditCardVerification

search

 

query

com.braintreegateway.ResourceCollection<com.braintreegateway.CreditCardVerification>

신용 카드Verification에대한 URI 옵션

Expand
이름유형

id

문자열

query

com.braintreegateway.CreditCardVerificationSearchRequest

53.4.5. 끝점 접두사 고객

다음과 같이 접두사 customer 를 사용하여 다음 엔드포인트를 호출할 수 있습니다.

 

braintree://customer/endpoint?[options]
Expand
끝점단축 별칭옵션결과 본문 유형

all

 

 

 

create

 

요청

com.braintreegateway.Result<com.braintreegateway.Customer>

delete

 

id

com.braintreegateway.Result<com.braintreegateway.Customer>

find

 

id

com.braintreegateway.Customer

search

 

query

com.braintreegateway.ResourceCollection<com.braintreegateway.Customer>

update

 

ID, 요청

com.braintreegateway.Result<com.braintreegateway.Customer>

고객을 위한 URI 옵션

Expand
이름유형

id

문자열

요청

com.braintreegateway.CustomerRequest

query

com.braintreegateway.CustomerSearchRequest

53.4.6. 끝점 접두사 할인

다음과 같이 접두사 할인을 사용하여 다음 끝점을 호출할 수 있습니다. 

 

braintree://discount/endpoint
Expand
끝점단축 별칭옵션결과 본문 유형

all

 

 

List<com.braintreegateway.Discount>

+
+

53.4.7. 끝점 접두사manAccount

다음과 같이 접두사man Account를 사용하여 다음 엔드포인트를 호출할 수 있습니다.

 

braintree://merchantAccount/endpoint?[options]
Expand
끝점단축 별칭옵션결과 본문 유형

create

 

요청

com.braintreegateway.Result<com.braintreegateway.MerchantAccount>

createForCurrency

 

currencyRequest

com.braintreegateway.Result<com.braintreegateway.MerchantAccount>

find

 

id

com.braintreegateway.MerchantAccount

update

 

ID, 요청

com.braintreegateway.Result<com.braintreegateway.MerchantAccount>

판매 자Account에 대한URI 옵션

Expand
이름유형

id

문자열

요청

com.braintreegateway.MerchantAccountRequest

currencyRequest

com.braintreegateway.MerchantAccountCreateForCurrencyRequest

53.4.8. 끝점 접두사 paymentMethod

다음과 같이 접두사 paymentMethod 를 사용하여 다음 엔드포인트를 호출할 수 있습니다.

 

braintree://paymentMethod/endpoint?[options]
Expand
끝점단축 별칭옵션결과 본문 유형

create

 

요청

com.braintreegateway.Result<com.braintreegateway.PaymentMethod>

delete

 

token, deleteRequest

com.braintreegateway.Result<com.braintreegateway.PaymentMethod>

find

 

토큰

com.braintreegateway.PaymentMethod

update

 

토큰, 요청

com.braintreegateway.Result<com.braintreegateway.PaymentMethod>

paymentMethod의 URI 옵션

Expand
이름유형

토큰

문자열

요청

com.braintreegateway.PaymentMethodRequest

deleteRequest

com.braintreegateway.PaymentMethodDeleteRequest

53.4.9. 끝점 접두사 paymentMethodNonce

다음과 같이 접두사 paymentMethodNonce 를 사용하여 다음 엔드포인트를 호출할 수 있습니다.

 

braintree://paymentMethodNonce/endpoint?[options]
Expand
끝점단축 별칭옵션결과 본문 유형

create

 

paymentMethodToken

com.braintreegateway.Result<com.braintreegateway.PaymentMethodNonce>

find

 

paymentMethodNonce

com.braintreegateway.PaymentMethodNonce

paymentMethodNonce에 대한 URI 옵션

Expand
이름유형

paymentMethodToken

문자열

paymentMethodNonce

문자열

53.4.10. 끝점 접두사 계획

다음과 같이 접두사 계획 을 사용하여 다음 끝점을 호출할 수 있습니다.

 

braintree://plan/endpoint
Expand
끝점단축 별칭옵션결과 본문 유형

all

 

 

List<com.braintreegateway.Plan>

 

53.4.11. 끝점 접두사 OrderBatchSummary

다음과 같이 접두사 settleBatchSummary 를 사용하여 다음 엔드포인트를 호출할 수 있습니다.

 

braintree://settlementBatchSummary/endpoint?[options]
Expand
끝점단축 별칭옵션결과 본문 유형

generate

 

 요청

com.braintreegateway.Result<com.braintreegateway.SettlementBatchSummary>

Order BatchSummary에대한 URI 옵션

Expand
이름유형

settlementDate

일정

groupByCustomField

문자열

53.4.12. 끝점 접두사 서브스크립션

다음과 같이 접두사 서브스크립션 을 사용하여 다음 끝점을 호출할 수 있습니다.

 

braintree://subscription/endpoint?[options]
Expand
끝점단축 별칭옵션결과 본문 유형

cancel

 

 id

 com.braintreegateway.Result<com.braintreegateway.Subscription>

create

 

요청

com.braintreegateway.Result<com.braintreegateway.Subscription>

delete

 

customerId, id

com.braintreegateway.Result<com.braintreegateway.Subscription>

find

 

id

com.braintreegateway.Subscription

retryCharge

 

subscriptionId, amount

com.braintreegateway.Result<com.braintreegateway.Transaction>

search

 

searchRequest

com.braintreegateway.ResourceCollection<com.braintreegateway.Subscription>

update

 

ID, 요청

com.braintreegateway.Result<com.braintreegateway.Subscription>

서브스크립션에대한 URI 옵션

Expand
이름유형

id

문자열

요청

com.braintreegateway.SubscriptionRequest

customerId

문자열

subscriptionId

문자열

수량

BigDecimal

searchRequest

com.braintreegateway.SubscriptionSearchRequest.

 

53.4.13. 끝점 접두사 트랜잭션

다음과 같이 접두사 트랜잭션 을 사용하여 다음 끝점을 호출할 수 있습니다.

 

braintree://transaction/endpoint?[options]
Expand
끝점단축 별칭옵션결과 본문 유형

cancelRelease

 

id

com.braintreegateway.Result<com.braintreegateway.Transaction>

cloneTransaction

 

id, cloneRequest

com.braintreegateway.Result<com.braintreegateway.Transaction>

신용

 

요청

com.braintreegateway.Result<com.braintreegateway.Transaction>

find

 

id

com.braintreegateway.Transaction

holdInEscrow

 

id

com.braintreegateway.Result<com.braintreegateway.Transaction>

releaseFromEscrow

 

id

com.braintreegateway.Result<com.braintreegateway.Transaction>

환불

 

id, amount, refundRequest

com.braintreegateway.Result<com.braintreegateway.Transaction>

판매

 

요청

com.braintreegateway.Result<com.braintreegateway.Transaction>

search

 

query

com.braintreegateway.ResourceCollection<com.braintreegateway.Transaction>

submitForPartialSettlement

 

ID, 양

com.braintreegateway.Result<com.braintreegateway.Transaction>

submitForSettlement

 

ID, 양, 요청

com.braintreegateway.Result<com.braintreegateway.Transaction>

voidTransaction

 

id

com.braintreegateway.Result<com.braintreegateway.Transaction>

트랜잭션URI 옵션

Expand
이름유형

id

문자열

요청

com.braintreegateway.TransactionCloneRequest

cloneRequest

com.braintreegateway.TransactionCloneRequest

refundRequest

com.braintreegateway.TransactionRefundRequest

수량

BigDecimal

query

com.braintreegateway.TransactionSearchRequest

53.4.14. 끝점 접두사 webhookNotification

다음과 같이 접두사 webhookNotification 을 사용하여 다음 끝점을 호출할 수 있습니다.

 

braintree://webhookNotification/endpoint?[options]
Expand
끝점단축 별칭옵션결과 본문 유형

parse

 

 서명, 페이로드

com.braintreegateway.WebhookNotification

확인

 

챌린지

문자열

WebhookNotification에 대한 URI 옵션

Expand
이름유형

서명

문자열

페이로드

문자열

챌린지

문자열

 

53.5. 소비자 끝점

모든 생산자 끝점을 소비자 끝점으로 사용할 수 있습니다. 소비자 엔드포인트는 Scheduled Poll Consumer Options 를 소비자 와 함께 사용하여 엔드포인트 호출을 예약할 수 있습니다. 기본적으로 배열 또는 컬렉션을 반환하는 소비자 엔드포인트는 요소당 하나의 교환을 생성하며 각 교환에 대해 경로가 한 번 실행됩니다. 이 동작을 변경하려면 속성 consumer.splitResults=true 를 사용하여 전체 목록 또는 배열에 대한 단일 교환을 반환합니다. 

53.6. 메시지 헤더

모든 URI 옵션은 CamelBraintree. 접두사가 있는 생산자 끝점의 메시지 헤더에 제공할 수 있습니다.

53.7. 메시지 본문

모든 결과 메시지 본문은 Braintree Java SDK에서 제공하는 오브젝트를 활용합니다. 생산자 끝점 매개 변수는 inBody 엔드포인트 매개 변수에서 들어오는 메시지 본문에 대한 옵션 이름을 지정할 수 있습니다.

 

 

53.8. 예제

Blueprint

<?xml version="1.0"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0"
           xsi:schemaLocation="
             http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0 http://aries.apache.org/schemas/blueprint-cm/blueprint-cm-1.0.0.xsd
             http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
             http://camel.apache.org/schema/blueprint http://camel.apache.org/schema/blueprint/camel-blueprint.xsd">


    <cm:property-placeholder id="placeholder" persistent-id="camel.braintree">
    </cm:property-placeholder>

    <bean id="braintree" class="org.apache.camel.component.braintree.BraintreeComponent">
        <property name="configuration">
            <bean class="org.apache.camel.component.braintree.BraintreeConfiguration">
                <property name="environment" value="${environment}"/>
                <property name="merchantId" value="${merchantId}"/>
                <property name="publicKey" value="${publicKey}"/>
                <property name="privateKey" value="${privateKey}"/>
            </bean>
        </property>
    </bean>

    <camelContext trace="true" xmlns="http://camel.apache.org/schema/blueprint" id="braintree-example-context">
        <route id="braintree-example-route">
            <from uri="direct:generateClientToken"/>
            <to uri="braintree://clientToken/generate"/>
            <to uri="stream:out"/>
        </route>
    </camelContext>

</blueprint>

53.9. 예를 들면 다음과 같습니다.

* Camel 구성 * 구성 요소 * 엔드 포인트 * 시작하기

 

 

54장. 구성 요소 검색

Camel 버전 1.3에서 사용 가능

Browse 구성 요소는 테스트, 시각화 도구 또는 디버깅에 유용할 수 있는 간단한 BrowsableEndpoint를 제공합니다. 엔드포인트로 전송된 교환은 모두 검색할 수 있습니다.

54.1. URI 형식

browse:someName[?options]

여기서 someName 은 끝점을 고유하게 식별하기 위한 문자열일 수 있습니다.

54.2. 옵션

Browse 구성 요소에는 옵션이 없습니다.

Browse 엔드포인트는 URI 구문을 사용하여 구성됩니다.

browse:name

다음 경로 및 쿼리 매개변수를 사용합니다.

54.2.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

name

필수 항목: 끝점을 고유하게 식별하는 문자열일 수 있는 이름입니다.

 

문자열

54.2.2. 쿼리 매개변수 (4 매개변수):

Expand
이름설명기본값유형

bridgeErrorHandler (consumer)

소비자를 Camel 라우팅 오류 처리기에 브리징할 수 있습니다. 이는 소비자가 들어오는 메시지를 선택하는 동안 예외가 발생한 것을 의미하며, 이제 메시지로 처리되어 라우팅 오류 처리기에 의해 처리됩니다. 기본적으로 소비자는 org.apache.camel.spi.ExceptionHandler를 사용하여 WARN/ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

false

boolean

예외 처리기 (consumer)

소비자가 사용자 지정 ExceptionHandler를 사용하도록 하려면 다음을 수행합니다. bridgeErrorHandler 옵션이 활성화되어 있는지 확인한 후 이 옵션이 사용되지 않습니다. 기본적으로 소비자는 WARN/ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

 

ExceptionHandler

exchangePattern (consumer)

Exchange를 만들 때 기본 교환 패턴을 설정합니다.

 

ExchangePattern

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

54.3. 샘플

아래 경로에서 browse: 구성 요소를 삽입하여 통과하는 Exchange를 탐색할 수 있습니다.

from("activemq:order.in").to("browse:orderReceived").to("bean:processOrder");

이제 Java 코드 내에서 수신된 교환을 검사할 수 있습니다.

private CamelContext context;

public void inspectRecievedOrders() {
    BrowsableEndpoint browse = context.getEndpoint("browse:orderReceived", BrowsableEndpoint.class);
    List<Exchange> exchanges = browse.getExchanges();

    // then we can inspect the list of received exchanges from Java
    for (Exchange exchange : exchanges) {
        String payload = exchange.getIn().getBody();
        // do something with payload
    }
}

54.4. 예를 들면 다음과 같습니다.

  • Camel 구성
  • 구성 요소
  • 끝점
  • 시작하기

55장. Ehcache Component(더 이상 사용되지 않음)

Camel 버전 2.1에서 사용 가능

캐시 구성 요소를 사용하면 캐시 구현으로 EHCache를 사용하여 캐싱 작업을 수행할 수 있습니다. 캐시 자체는 요청에 따라 생성되거나 해당 이름의 캐시가 이미 존재하는 경우 원래 설정에서 간단히 사용됩니다.

이 구성 요소는 생산자 및 이벤트 기반 소비자 엔드 포인트를 지원합니다.

캐시 소비자는 이벤트 기반 소비자이며 특정 캐시 활동을 수신하고 응답하는 데 사용할 수 있습니다. 기존 캐시에서 선택 항목을 수행해야 하는 경우 캐시 구성 요소에 대해 정의된 프로세서를 사용합니다.

Maven 사용자는 이 구성 요소를 위해 다음 종속성을 pom.xml 에 추가해야 합니다.

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-cache</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>

55.1. URI 형식

cache://cacheName[?options]

?option=value&option=#beanRef&…​ 형식으로 URI에 쿼리 옵션을 추가할 수 있습니다.

55.2. 옵션

EHCache 구성 요소는 아래 나열된 4 가지 옵션을 지원합니다.

Expand
이름설명기본값유형

cacheManagerFactory (advanced)

주어진 CacheManagerFactory를 사용하여 CacheManager를 만듭니다. 기본적으로 DefaultCacheManagerFactory가 사용됩니다.

 

CacheManagerFactory

구성 (일반)

캐시 구성 설정

 

CacheConfiguration

ConfigurationFile (일반)

classpath 또는 파일 시스템에서 로드할 ehcache.xml 파일의 위치를 설정합니다. 기본적으로 파일은 classpath:ehcache.xml에서 로드됩니다.

classpath:ehcache.xml

문자열

resolveProperty Placeholders (advanced)

구성 요소가 시작 시 자체적으로 속성 자리 표시자를 확인해야 하는지 여부입니다. String 유형의 속성만 속성 자리 표시자를 사용할 수 있습니다.Only properties which are of String type can use property placeholders.

true

boolean

EHCache 엔드포인트는 URI 구문을 사용하여 구성됩니다.

cache:cacheName

다음 경로 및 쿼리 매개변수를 사용합니다.

55.2.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

cacheName

필요한 캐시 이름

 

문자열

55.2.2. 쿼리 매개변수(19 매개변수):

Expand
이름설명기본값유형

DiskExpiryThreadInterval Seconds (common)

디스크 만료 스레드 실행 간격(초)입니다.

 

long

diskPersistent (common)

애플리케이션을 다시 시작하는 동안 디스크 저장소가 지속되는지 여부입니다.

false

boolean

diskStorePath (common)

더 이상 사용되지 않는 이 매개변수는 무시됩니다. CacheManager는 setter 주입을 사용하여 이를 설정합니다.

 

문자열

영구( 일반)

요소가 영구적인지 여부를 설정합니다. 영구적인 경우 시간 제한이 무시되고 요소가 만료되지 않습니다.

false

boolean

(일반)

사용할 기본 키입니다. 키가 메시지 헤더에 제공되는 경우 헤더의 키가 우선합니다.

 

문자열

maxElementsInMemory (common)

메모리의 정의된 캐시에 저장할 수 있는 요소 수입니다.

1000

int

memoryStoreEvictionPolicy (common)

메모리의 최대 요소 수에 도달할 때 사용할 제거 전략은 무엇입니까. 이 전략은 제거할 요소를 정의합니다. LRU - 최근에 가장 많이 사용되는 LFU - Lest Frequently Used FIFO - First In First In First In First In First In First In First In First In First In First In First In First In First In First In First In First In First In First

LFU

MemoryStoreEviction Policy

ObjectCache (common)

직렬화되지 않은 개체를 캐시에 저장할 수 있도록 허용할지 여부입니다. 이 옵션을 활성화하면 디스크에 대한 오버플로도 활성화할 수 없습니다.

false

boolean

작업 (일반)

사용할 기본 캐시 작업입니다. 메시지 헤더에서 작업이 있으면 헤더의 작업이 우선합니다.

 

문자열

overflowToDisk (common)

캐시가 디스크에 오버플로될 수 있는지 여부를 지정합니다.

true

boolean

timeToIdleSeconds (일반)

요소가 만료되기 전 액세스 간 최대 시간

300

long

timeToLiveSeconds (일반)

생성 시간과 요소가 만료되는 시점 사이의 최대 시간입니다. 요소가 영원하지 않은 경우에만 사용됩니다.

300

long

bridgeErrorHandler (consumer)

소비자를 Camel 라우팅 오류 처리기에 브리징할 수 있습니다. 이는 소비자가 들어오는 메시지를 선택하는 동안 예외가 발생한 것을 의미하며, 이제 메시지로 처리되어 라우팅 오류 처리기에 의해 처리됩니다. 기본적으로 소비자는 org.apache.camel.spi.ExceptionHandler를 사용하여 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

false

boolean

예외 처리기 (consumer)

소비자가 사용자 지정 ExceptionHandler를 사용하도록 하려면 다음을 수행합니다. bridgeErrorHandler 옵션이 활성화되어 있는지 확인한 후 이 옵션이 사용되지 않습니다. 기본적으로 소비자는 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

 

ExceptionHandler

exchangePattern (consumer)

소비자가 교환을 생성할 때 교환 패턴을 설정합니다.

 

ExchangePattern

cacheLoaderRegistry (advanced)

CacheLoaderRegistry를 사용하여 cache loader를 구성하려면

 

CacheLoaderRegistry

cacheManagerFactory (advanced)

사용자 지정 CacheManagerFactory를 사용하여 이 끝점에서 사용할 CacheManager를 만듭니다. 기본적으로 CacheManagerFactory 구성 요소가 사용됩니다.

 

CacheManagerFactory

eventListenerRegistry (advanced)

CacheEventListenerRegistry를 사용하여 이벤트 리스너를 구성하려면

 

CacheEventListener Registry

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

55.3. 캐시에서 메시지 전송/취소

55.3.1. Message Headers up to Camel 2.7

Expand
header설명

CACHE_OPERATION

캐시에서 수행할 작업입니다. 유효한 옵션

* GET * CHECK * ADD * UPDATE * DELETEALL
GETCHECKCamel 2.3 이후 필요합니다.

CACHE_KEY

캐시에 메시지를 저장하는 데 사용되는 캐시 키입니다. CACHE_OPERATION이 DELETEALL인 경우 캐시 키는 선택 사항입니다.

55.3.2. Message Headers Camel 2.8+

Camel 2.8의 헤더 변경

헤더 이름과 지원되는 값은 'CamelCache' 접두사로 변경되었으며 혼합된 케이스를 사용합니다. 이렇게 하면 다른 헤더와 분리하여 보다 쉽게 식별하고 유지할 수 있습니다. CacheConstants 변수 이름은 변경되지 않고 그대로 유지되며 해당 값만 변경되었습니다. 또한 이제 캐시 작업이 수행된 후 이러한 헤더가 교환에서 제거됩니다.

Expand
header설명

CamelCacheOperation

캐시에서 수행할 작업입니다. 유효한 옵션은 다음과 같습니다.

* CamelCacheGet * CamelCacheCheck * CamelCacheUpdate * CamelCacheUpdate * CamelCacheDelete * CamelCacheDeleteAll

CamelCacheKey

캐시에 메시지를 저장하는 데 사용되는 캐시 키입니다. CamelCacheOperation이 CamelCacheDeleteAll인 경우 캐시 키가 선택 사항입니다.

CamelCacheAddCamelCacheUpdate 작업은 추가 헤더를 지원합니다.

Expand
header유형설명

CamelCacheTimeToLive

정수

Camel 2.11: 시간(초)입니다.

CamelCacheTimeToIdle

정수

Camel 2.11: 유휴 시간(초)입니다.

CamelCacheEternal

부울

Camel 2.11: 콘텐츠가 영구적인지 여부.

55.3.3. 캐시 Producer

캐시에 데이터를 보내면 교환에서 직접 페이로드를 기존 또는 생성된 온디맨드 캐시에 저장할 수 있습니다. 이 작업을 수행하는 메커니즘은 다음과 같습니다.

  • 위에 표시된 메시지 교환 헤더를 설정합니다.
  • 메시지 교환 본문에 캐시로 전송된 메시지가 포함되어 있는지 확인

55.3.4. Cache Consumer

캐시로부터 데이터를 수신하려면 CacheConsumer가 이벤트Listener를 사용하여 기존 또는 생성된 온디맨드 캐시에서 수신 대기하고 캐시 활동이 수행될 때 자동 알림을 받습니다(예: CamelCacheGet/CamelCacheUpdate/CamelCacheDelete/CamelCacheDelete/CamelCacheDeleteAll). 이러한 활동이 발생하는 경우

  • 메시지 교환 헤더 및 방금 추가/업데이트된 페이로드를 포함하는 메시지 교환이 포함된 교환이 배치되고 전송됩니다.
  • CamelCacheDeleteAll 작업의 경우 Message Exchange Header CamelCacheKey 및 Message Exchange 본문이 채워집니다.

55.3.5. 캐시 프로세서

캐시 조회를 수행하고 선택적으로 페이로드 콘텐츠를 대체할 수 있는 nice 프로세서 세트가 있습니다.

  • body
  • 토큰
  • XPath 수준

55.4. 캐시 사용 샘플

55.4.1. 예 1: 캐시 구성

from("cache://MyApplicationCache" +
          "?maxElementsInMemory=1000" +
          "&memoryStoreEvictionPolicy=" +
              "MemoryStoreEvictionPolicy.LFU" +
          "&overflowToDisk=true" +
          "&eternal=true" +
          "&timeToLiveSeconds=300" +
          "&timeToIdleSeconds=true" +
          "&diskPersistent=true" +
          "&diskExpiryThreadIntervalSeconds=300")

55.4.2. 예 2: 캐시에 키 추가

RouteBuilder builder = new RouteBuilder() {
    public void configure() {
     from("direct:start")
     .setHeader(CacheConstants.CACHE_OPERATION, constant(CacheConstants.CACHE_OPERATION_ADD))
     .setHeader(CacheConstants.CACHE_KEY, constant("Ralph_Waldo_Emerson"))
     .to("cache://TestCache1")
   }
};

55.4.3. 예 2: 캐시의 기존 키 업데이트

RouteBuilder builder = new RouteBuilder() {
    public void configure() {
     from("direct:start")
     .setHeader(CacheConstants.CACHE_OPERATION, constant(CacheConstants.CACHE_OPERATION_UPDATE))
     .setHeader(CacheConstants.CACHE_KEY, constant("Ralph_Waldo_Emerson"))
     .to("cache://TestCache1")
   }
};

55.4.4. 예 3: 캐시에 있는 기존 키 삭제

RouteBuilder builder = new RouteBuilder() {
    public void configure() {
     from("direct:start")
     .setHeader(CacheConstants.CACHE_OPERATION, constant(CacheConstants.CACHE_DELETE))
     .setHeader(CacheConstants.CACHE_KEY", constant("Ralph_Waldo_Emerson"))
     .to("cache://TestCache1")
   }
};

55.4.5. 예 4: 캐시에 있는 모든 기존 키 삭제

RouteBuilder builder = new RouteBuilder() {
    public void configure() {
     from("direct:start")
     .setHeader(CacheConstants.CACHE_OPERATION, constant(CacheConstants.CACHE_DELETEALL))
     .to("cache://TestCache1");
    }
};

55.4.6. 예제 5: 프로세서 및 기타 Producers에 캐시 등록 변경 확인

RouteBuilder builder = new RouteBuilder() {
    public void configure() {
     from("cache://TestCache1")
     .process(new Processor() {
        public void process(Exchange exchange)
               throws Exception {
           String operation = (String) exchange.getIn().getHeader(CacheConstants.CACHE_OPERATION);
           String key = (String) exchange.getIn().getHeader(CacheConstants.CACHE_KEY);
           Object body = exchange.getIn().getBody();
           // Do something
        }
     })
   }
};
RouteBuilder builder = new RouteBuilder() {
   public void configure() {
     //Message Body Replacer
     from("cache://TestCache1")
     .filter(header(CacheConstants.CACHE_KEY).isEqualTo("greeting"))
     .process(new CacheBasedMessageBodyReplacer("cache://TestCache1","farewell"))
     .to("direct:next");

    //Message Token replacer
    from("cache://TestCache1")
    .filter(header(CacheConstants.CACHE_KEY).isEqualTo("quote"))
    .process(new CacheBasedTokenReplacer("cache://TestCache1","novel","#novel#"))
    .process(new CacheBasedTokenReplacer("cache://TestCache1","author","#author#"))
    .process(new CacheBasedTokenReplacer("cache://TestCache1","number","#number#"))
    .to("direct:next");

    //Message XPath replacer
    from("cache://TestCache1").
    .filter(header(CacheConstants.CACHE_KEY).isEqualTo("XML_FRAGMENT"))
    .process(new CacheBasedXPathReplacer("cache://TestCache1","book1","/books/book1"))
    .process (new CacheBasedXPathReplacer("cache://TestCache1","book2","/books/book2"))
    .to("direct:next");
   }
};

55.4.8. 예제 7: 캐시에서 항목 가져오기

from("direct:start")
    // Prepare headers
    .setHeader(CacheConstants.CACHE_OPERATION, constant(CacheConstants.CACHE_OPERATION_GET))
    .setHeader(CacheConstants.CACHE_KEY, constant("Ralph_Waldo_Emerson")).
    .to("cache://TestCache1").
    // Check if entry was not found
    .choice().when(header(CacheConstants.CACHE_ELEMENT_WAS_FOUND).isNull()).
        // If not found, get the payload and put it to cache
        .to("cxf:bean:someHeavyweightOperation").
        .setHeader(CacheConstants.CACHE_OPERATION, constant(CacheConstants.CACHE_OPERATION_ADD))
        .setHeader(CacheConstants.CACHE_KEY, constant("Ralph_Waldo_Emerson"))
        .to("cache://TestCache1")
    .end()
    .to("direct:nextPhase");

55.4.9. 예 8: 캐시의 항목 확인

참고: CHECK 명령은 캐시에 항목이 있지만 본문에 메시지를 배치하지 않습니다.

from("direct:start")
    // Prepare headers
    .setHeader(CacheConstants.CACHE_OPERATION, constant(CacheConstants.CACHE_OPERATION_CHECK))
    .setHeader(CacheConstants.CACHE_KEY, constant("Ralph_Waldo_Emerson")).
    .to("cache://TestCache1").
    // Check if entry was not found
    .choice().when(header(CacheConstants.CACHE_ELEMENT_WAS_FOUND).isNull()).
        // If not found, get the payload and put it to cache
        .to("cxf:bean:someHeavyweightOperation").
        .setHeader(CacheConstants.CACHE_OPERATION, constant(CacheConstants.CACHE_OPERATION_ADD))
        .setHeader(CacheConstants.CACHE_KEY, constant("Ralph_Waldo_Emerson"))
        .to("cache://TestCache1")
    .end();

55.5. EHCache 관리

Ehcache 에는 JMX의 자체 통계 및 관리가 있습니다.

다음은 Spring 애플리케이션 컨텍스트에서 JMX를 통해 노출하는 방법에 대한 코드 조각입니다.

<bean id="ehCacheManagementService" class="net.sf.ehcache.management.ManagementService" init-method="init" lazy-init="false">
  <constructor-arg>
    <bean class="net.sf.ehcache.CacheManager" factory-method="getInstance"/>
  </constructor-arg>
  <constructor-arg>
    <bean class="org.springframework.jmx.support.JmxUtils" factory-method="locateMBeanServer"/>
  </constructor-arg>
  <constructor-arg value="true"/>
  <constructor-arg value="true"/>
  <constructor-arg value="true"/>
  <constructor-arg value="true"/>
</bean>

물론 Java에서도 동일한 작업을 수행할 수 있습니다.

ManagementService.registerMBeans(CacheManager.getInstance(), mbeanServer, true, true, true, true);

캐시 적중, 누락, 메모리 내 적중, 디스크 적중, 크기 통계 등을 가져올 수 있습니다. 즉시 CacheConfiguration 매개 변수를 변경할 수도 있습니다.

55.6. 캐시 복제 Camel 2.8

Camel 캐시 구성 요소는 RMI, JGroups, JMS 및 Cache Server를 비롯한 다양한 복제 메커니즘을 사용하여 서버 노드에 캐시를 배포할 수 있습니다.

작업을 수행하는 두 가지 방법이 있습니다.

1. ehcache.xml 을 수동으로 설정할 수 있습니다.

또는

2. 다음 세 가지 옵션을 구성할 수 있습니다.

  • cacheManagerFactory
  • eventListenerRegistry
  • cacheLoaderRegistry

첫 번째 옵션을 사용하여 Camel Cache 복제를 구성하는 것은 모든 캐시를 별도로 구성해야 하므로 약간의 하드 작업입니다. 따라서 모든 캐시 이름을 알 수 없는 상황에서 ehcache.xml 을 사용하는 것은 좋은 방법이 아닙니다.

두 번째 옵션은 캐시당 옵션을 정의할 필요가 없으므로 많은 다른 캐시를 사용하려는 경우 훨씬 좋습니다. 이는 복제 옵션이 CacheManagerCacheEndpoint 당 설정되어 있기 때문입니다. 또한 캐시 이름이 개발 단계에서 알 수 없는 유일한 방법입니다.

참고: Camel Cache 복제 메커니즘을 더 잘 이해할 수 있도록 EHCache 매뉴얼 을 읽는 것이 유용할 수 있습니다.

55.6.1. 예: JMS 캐시 복제

JMS 복제는 가장 강력하고 안전한 복제 방법입니다. Camel Cache 복제와 함께 사용하면 다소 간단해집니다. 예를 들어 별도의 페이지에서 사용할 수 있습니다.

56장. 카페인 캐시 구성 요소

Camel 버전 2.20에서 사용 가능

카페인 캐시 구성 요소를 사용하면 Caffeine 의 간단한 캐시를 사용하여 캐싱 작업을 수행할 수 있습니다.

Maven 사용자는 이 구성 요소를 위해 다음 종속성을 pom.xml 에 추가해야 합니다.

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-caffeine</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>

56.1. URI 형식

caffeine-cache://cacheName[?options]

?option=value&option=#beanRef&…​ 형식으로 URI에 쿼리 옵션을 추가할 수 있습니다.

56.2. 옵션

Caffeine Cache 구성 요소는 아래 나열된 두 가지 옵션을 지원합니다.

Expand
이름설명기본값유형

구성 (고급)

글로벌 구성 요소 구성 설정

 

CaffeineConfiguration

resolveProperty Placeholders (advanced)

구성 요소가 시작 시 자체적으로 속성 자리 표시자를 확인해야 하는지 여부입니다. String 유형의 속성만 속성 자리 표시자를 사용할 수 있습니다.Only properties which are of String type can use property placeholders.

true

boolean

Caffeine Cache 엔드포인트는 URI 구문을 사용하여 구성됩니다.

caffeine-cache:cacheName

다음 경로 및 쿼리 매개변수를 사용합니다.

56.2.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

cacheName

필요한 캐시 이름

 

문자열

56.2.2. 쿼리 매개변수(19 매개변수):

Expand
이름설명기본값유형

createCacheIfNotExist (common)

캐시가 존재하는 경우 또는 사전 구성할 수 없는 경우 캐시를 생성해야 하는 경우 를 구성합니다.

true

boolean

bridgeErrorHandler (consumer)

소비자를 Camel 라우팅 오류 처리기에 브리징할 수 있습니다. 이는 소비자가 들어오는 메시지를 선택하는 동안 예외가 발생한 것을 의미하며, 이제 메시지로 처리되어 라우팅 오류 처리기에 의해 처리됩니다. 기본적으로 소비자는 org.apache.camel.spi.ExceptionHandler를 사용하여 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

false

boolean

예외 처리기 (consumer)

소비자가 사용자 지정 ExceptionHandler를 사용하도록 하려면 다음을 수행합니다. bridgeErrorHandler 옵션이 활성화되어 있는지 확인한 후 이 옵션이 사용되지 않습니다. 기본적으로 소비자는 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

 

ExceptionHandler

exchangePattern (consumer)

소비자가 교환을 생성할 때 교환 패턴을 설정합니다.

 

ExchangePattern

작업 (producer)

기본 캐시 작업을 구성하려면 다음을 수행합니다. 작업이 메시지 헤더에 설정된 경우 헤더의 작업이 우선합니다.

 

문자열

캐시 (producer)

사용할 이미 인스턴스화된 기본 캐시를 구성하려면 다음을 수행합니다.

 

cache

cacheLoader (producer)

LoadCache 사용 시 CacheLoader를 구성하려면

 

CacheLoader

evictionType (producer)

이 캐시의 제거 유형 설정

SIZE_BASED

EvictionType

expireAfterAccessTime (producer)

시간 기반 Eviction의 경우 액세스 후 만료 날짜(초 단위)를 설정합니다.

300

int

expireAfterWriteTime (producer)

시간 기반 Eviction(초 단위)의 경우 만료 후 액세스 쓰기를 설정합니다.

300

int

initialCapacity (producer)

캐시의 초기 용량 설정

10000

int

(producer)

기본 action 키를 구성하려면 다음을 수행합니다. 메시지가 메시지 헤더에 설정된 경우 헤더의 키가 우선합니다.

 

개체

MaximumSize (producer)

캐시의 최대 크기 설정

10000

int

removalListener (producer)

캐시에 대한 특정 제거 Listener 설정

 

RemovalListener

통계Counter (producer)

캐시 통계에 대한 특정 통계 카운터 설정

 

StatsCounter

통계Enabled (producer)

캐시에서 통계를 사용하려면To enable stats on the cache

false

boolean

keytype (advanced)

캐시 키 유형, 기본 java.lang.Object

java.lang.Object

문자열

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

ValueType (advanced)

캐시 값 유형, 기본 java.lang.Object

java.lang.Object

문자열

57장. 카페인 LoadCache 구성 요소

Camel 버전 2.20에서 사용 가능

카페인 로드 캐시 구성 요소를 사용하면 Caffeine 의 The Load 캐시를 사용하여 캐싱 작업을 수행할 수 있습니다.

Maven 사용자는 이 구성 요소를 위해 다음 종속성을 pom.xml 에 추가해야 합니다.

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-caffeine</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>

57.1. URI 형식

caffeine-loadcache://cacheName[?options]

?option=value&option=#beanRef&…​ 형식으로 URI에 쿼리 옵션을 추가할 수 있습니다.

57.2. 옵션

Caffeine LoadCache 구성 요소는 아래 나열된 두 가지 옵션을 지원합니다.

Expand
이름설명기본값유형

구성 (고급)

글로벌 구성 요소 구성 설정

 

CaffeineConfiguration

resolveProperty Placeholders (advanced)

구성 요소가 시작 시 자체적으로 속성 자리 표시자를 확인해야 하는지 여부입니다. String 유형의 속성만 속성 자리 표시자를 사용할 수 있습니다.Only properties which are of String type can use property placeholders.

true

boolean

Caffeine LoadCache 엔드포인트는 URI 구문을 사용하여 구성됩니다.

caffeine-loadcache:cacheName

다음 경로 및 쿼리 매개변수를 사용합니다.

57.2.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

cacheName

필요한 캐시 이름

 

문자열

57.2.2. 쿼리 매개변수(19 매개변수):

Expand
이름설명기본값유형

createCacheIfNotExist (common)

캐시가 존재하는 경우 또는 사전 구성할 수 없는 경우 캐시를 생성해야 하는 경우 를 구성합니다.

true

boolean

bridgeErrorHandler (consumer)

소비자를 Camel 라우팅 오류 처리기에 브리징할 수 있습니다. 이는 소비자가 들어오는 메시지를 선택하는 동안 예외가 발생한 것을 의미하며, 이제 메시지로 처리되어 라우팅 오류 처리기에 의해 처리됩니다. 기본적으로 소비자는 org.apache.camel.spi.ExceptionHandler를 사용하여 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

false

boolean

예외 처리기 (consumer)

소비자가 사용자 지정 ExceptionHandler를 사용하도록 하려면 다음을 수행합니다. bridgeErrorHandler 옵션이 활성화되어 있는지 확인한 후 이 옵션이 사용되지 않습니다. 기본적으로 소비자는 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

 

ExceptionHandler

exchangePattern (consumer)

소비자가 교환을 생성할 때 교환 패턴을 설정합니다.

 

ExchangePattern

작업 (producer)

기본 캐시 작업을 구성하려면 다음을 수행합니다. 작업이 메시지 헤더에 설정된 경우 헤더의 작업이 우선합니다.

 

문자열

캐시 (producer)

사용할 이미 인스턴스화된 기본 캐시를 구성하려면 다음을 수행합니다.

 

cache

cacheLoader (producer)

LoadCache 사용 시 CacheLoader를 구성하려면

 

CacheLoader

evictionType (producer)

이 캐시의 제거 유형 설정

SIZE_BASED

EvictionType

expireAfterAccessTime (producer)

시간 기반 Eviction의 경우 액세스 후 만료 날짜(초 단위)를 설정합니다.

300

int

expireAfterWriteTime (producer)

시간 기반 Eviction(초 단위)의 경우 만료 후 액세스 쓰기를 설정합니다.

300

int

initialCapacity (producer)

캐시의 초기 용량 설정

10000

int

(producer)

기본 action 키를 구성하려면 다음을 수행합니다. 메시지가 메시지 헤더에 설정된 경우 헤더의 키가 우선합니다.

 

개체

MaximumSize (producer)

캐시의 최대 크기 설정

10000

int

removalListener (producer)

캐시에 대한 특정 제거 Listener 설정

 

RemovalListener

통계Counter (producer)

캐시 통계에 대한 특정 통계 카운터 설정

 

StatsCounter

통계Enabled (producer)

캐시에서 통계를 사용하려면To enable stats on the cache

false

boolean

keytype (advanced)

캐시 키 유형, 기본 java.lang.Object

java.lang.Object

문자열

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

ValueType (advanced)

캐시 값 유형, 기본 java.lang.Object

java.lang.Object

문자열

58장. castor DataFormat(더 이상 사용되지 않음)

Camel 버전 2.1에서 사용 가능

캐스터는 Castor XML 라이브러리를 사용하여 XML 페이로드를 Java 객체로 마샬링하거나 Java 개체를 XML 페이로드로 마샬링하는 데이터 형식입니다.

일반적으로 Java DSL 또는 Spring XML을 사용하여 Castor 데이터 형식으로 작업할 수 있습니다.

58.1. Java DSL 사용

from("direct:order").
  marshal().castor().
  to("activemq:queue:order");

예를 들어 다음에서는 기본 Castor 데이터 바인딩 기능을 사용하는 Castor의 DataFormat을 사용합니다.For example the following uses a named DataFormat of Castor which uses default Castor data binding features.

CastorDataFormat castor = new CastorDataFormat ();

from("activemq:My.Queue").
  unmarshal(castor).
  to("mqseries:Another.Queue");

데이터 형식에 대한 명명된 참조를 사용하려는 경우(예: Spring XML 파일을 통해) 레지스트리에 정의할 수 있습니다.

from("activemq:My.Queue").
  unmarshal("mycastorType").
  to("mqseries:Another.Queue");

매핑 파일을 제공하여 기본 매핑 스키마를 재정의하려면 다음과 같이 설정할 수 있습니다.

CastorDataFormat castor = new CastorDataFormat ();
castor.setMappingFile("mapping.xml");

또한 Castor Marshaller 및 Unmarshaller에 대한 더 많은 제어 권한을 원한다면 아래와 같이 액세스 할 수 있습니다.

castor.getMarshaller();
castor.getUnmarshaller();

58.2. Spring XML 사용

다음 예제에서는 Castor를 사용하여 캐스트라 데이터 유형을 구성하는 Spring을 사용하여 해상을 해제하는 방법을 보여줍니다.

<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
  <route>
    <from uri="direct:start"/>
    <unmarshal>
      <castor validation="true" />
    </unmarshal>
    <to uri="mock:result"/>
  </route>
</camelContext>

이 예에서는 데이터 유형을 한 번만 구성하고 여러 경로에서 재사용하는 방법을 보여줍니다. <castor> 요소를 <camelContext>에서 직접 설정해야 합니다.

<camelContext>
<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
  <dataFormats>
    <castor id="myCastor"/>
  </dataFormats>

  <route>
    <from uri="direct:start"/>
    <marshal ref="myCastor"/>
    <to uri="direct:marshalled"/>
  </route>
  <route>
    <from uri="direct:marshalled"/>
    <unmarshal ref="myCastor"/>
    <to uri="mock:result"/>
  </route>

</camelContext>

58.3. 옵션

Castor dataformat은 아래에 나열된 9가지 옵션을 지원합니다.

Expand
이름기본값Java Type설명

mappingFile

 

문자열

classpath에서 로드할 Castor 매핑 파일의 경로입니다.

whitelistEnabled

true

부울

Whitelist 기능이 활성화되어 있는지 여부를 정의합니다.

allowedUnmarshallObjects

 

문자열

허용되는 오브젝트를 unmarshalled로 정의합니다. 허용되는 개체의 FQN 클래스 이름을 지정하고 쉼표를 사용하여 여러 항목을 분리할 수 있습니다. 또한 링크 org.apache.camel.util.EndpointHelpermatchPattern(String, String)에서 정의한 패턴을 기반으로 하는 와일드카드 및 정규식을 사용할 수도 있습니다. 거부된 개체는 허용된 오브젝트보다 우선합니다.

deniedUnmarshallObjects

 

문자열

거부된 오브젝트를 unmarshalled로 정의합니다. 분기된 개체의 FQN 클래스 이름을 지정하고, 쉼표를 사용하여 여러 항목을 구분할 수 있습니다. 또한 링크 org.apache.camel.util.EndpointHelpermatchPattern(String, String)에서 정의한 패턴을 기반으로 하는 와일드카드 및 정규식을 사용할 수도 있습니다. 거부된 개체는 허용된 오브젝트보다 우선합니다.

검증

true

부울

유효성 검사가 꺼져 있는지 여부입니다. 는 기본적으로 true입니다.

인코딩

UTF-8

문자열

개체를 XML로 마샬링할 때 사용할 인코딩입니다. 기본값은 UTF-8입니다.

패키지

 

string[]

Castor XmlContext에 추가 패키지 추가

클래스

 

string[]

Castor XmlContext에 추가 클래스 이름 추가

contentTypeHeader

false

부울

데이터 형식이 데이터 형식에서 수행할 수 있는 경우 데이터 형식의 유형으로 Content-Type 헤더를 설정해야 하는지 여부입니다. 예를 들어 데이터 형식을 XML로 마샬링하거나, JSon으로 마샬링되는 데이터 형식에 대한 application/json 등이 있습니다.

58.4. 종속 항목

camel 경로에서 Castor를 사용하려면 이 데이터 형식을 구현하는 camel-castor 에 종속성을 추가해야 합니다.

maven을 사용하는 경우 pom.xml에 다음을 추가하면 최신 및 가장 큰 릴리스의 버전 번호를 대체합니다(최신 버전의 다운로드 페이지 참조).

<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-castor</artifactId>
  <version>x.x.x</version>
</dependency>

59장. Camel CDI

Camel CDI 구성 요소는 convention-over-configuration 을 기반으로 CDI를 종속성 주입 프레임워크로 사용하여 Apache Camel에 대한 자동 구성을 제공합니다. 애플리케이션에서 사용할 수 있는 Camel 경로를 자동으로 탐지하고 엔드포인트FluentProducerTemplate,ProducerTemplate 또는 TypeConverter 와 같은 일반적인 Camel 프리미티브에 대한 빈을 제공합니다. @Consume@Produce 및 @PropertyInject 와 같은 Camel 주석을 CDI 빈에서 원활하게 사용할 수 있도록 표준 Camel 빈 통합을 구현합니다. 또한 Camel 이벤트(예: RouteAddedEvent,CamelContextStartedEventExchangeCompletedEvent, …​)를 CDI 이벤트로 연결하고 /에서 Camel 경로에서 CDI 이벤트를 생성/생성하는 데 사용할 수 있는 CDI 이벤트 끝점을 제공합니다.

Camel 2.10 에서 Camel CDI 구성 요소를 사용할 수 있지만 CDI 프로그래밍 모델에 더 잘 부합하도록 Camel 2.17 에서 다시 작성됩니다. 따라서 Camel 이벤트와 CDI 이벤트 브리지와 CDI 이벤트 끝점과 같은 일부 기능은 Camel 2.17부터만 적용됩니다.

Camel CDI 애플리케이션을 테스트하는 방법에 대한 자세한 내용은 Camel CDI 테스트에서 확인할 수 있습니다.

Important

Camel-cdi는 OSGi에서 더 이상 사용되지 않으며 지원되지 않습니다. OSGi와 함께 Camel을 사용하는 경우 OSGi Blueprint를 사용합니다.

59.1. 자동 구성된 Camel 컨텍스트

Camel CDI는 CamelContext 빈을 자동으로 배포 및 구성합니다. CDI 컨테이너가 초기화(resp. shuts down)할 때 CamelContext 빈이 자동으로 인스턴스화, 구성 및 시작(resp. stopped)됩니다. 다음과 같이 애플리케이션에 삽입할 수 있습니다.

@Inject
CamelContext context;

기본 CamelContext 빈은 기본 제공 @Default 한정자로 정규화되며 범위가 @ApplicationScoped 이며 DefaultCamelContext 유형입니다.

이 빈은 프로그래밍 방식으로 사용자 지정할 수 있으며 기타 Camel 컨텍스트 빈을 애플리케이션에도 배포할 수 있습니다.

59.2. Camel 경로 자동 감지

Camel CDI는 애플리케이션의 모든 RoutesBuilder 빈을 자동으로 수집하여 CDI 컨테이너를 초기화할 때 CamelContext 빈 인스턴스에 추가합니다. 예를 들어 Camel 경로를 추가하는 것은 다음과 같이 클래스를 선언하는 것만큼 간단합니다.

class MyRouteBean extends RouteBuilder {
 
    @Override
    public void configure() {
        from("jms:invoices").to("file:/invoices");
    }
}

원하는 만큼 RoutesBuilder 빈을 선언할 수 있습니다. 또한 RouteContainer 빈은 컨테이너가 초기화할 때 Camel CDI에서 관리하는 CamelContext 빈 인스턴스에 자동으로 수집, 인스턴스화 및 추가됩니다.

Camel 2.19에서 사용 가능

일부 상황에서는 RouteBuilderRouteContainer 빈의 자동 구성을 비활성화해야 할 수 있습니다. 이는 CdiCamelConfiguration 이벤트를 관찰하여 수행할 수 있습니다. 예를 들면 다음과 같습니다.

static void configuration(@Observes CdiCamelConfiguration configuration) {
    configuration.autoConfigureRoutes(false);
}

마찬가지로 구성된 CamelContext 빈의 자동 시작을 비활성화합니다. 예를 들면 다음과 같습니다.

static void configuration(@Observes CdiCamelConfiguration configuration) {
    configuration.autoStartContexts(false);
}

59.3. 자동 구성된 Camel 기본 사항

Camel CDI는 모든 CDI 빈에 삽입할 수 있는 공통 Camel 프리미티브에 대한 빈을 제공합니다. 예를 들면 다음과 같습니다.

@Inject
@Uri("direct:inbound")
ProducerTemplate producerTemplate;

@Inject
@Uri("direct:inbound")
FluentProducerTemplate fluentProducerTemplate;

@Inject
MockEndpoint outbound; // URI defaults to the member name, i.e. mock:outbound

@Inject
@Uri("direct:inbound")
Endpoint endpoint;

@Inject
TypeConverter converter;

59.4. Camel 컨텍스트 구성

기본 CamelContext 빈의 이름만 변경하려면 Camel CDI에서 제공하는 @ContextName 한정자를 사용할 수 있습니다. 예를 들면 다음과 같습니다.

@ContextName("camel-context")
class MyRouteBean extends RouteBuilder {
 
    @Override
    public void configure() {
        from("jms:invoices").to("file:/invoices");
    }
}

사용자 지정이 필요한 경우 CamelContext 클래스를 사용하여 사용자 지정 Camel 컨텍스트 빈을 선언할 수 있습니다. 그런 다음 @PostConstruct 및 @PreDestroy 라이프사이클 콜백을 수행하여 사용자 지정을 수행할 수 있습니다. 예를 들면 다음과 같습니다.

@ApplicationScoped
class CustomCamelContext extends DefaultCamelContext {

    @PostConstruct
    void customize() {
        // Set the Camel context name
        setName("custom");
        // Disable JMX
        disableJMX();
    }

    @PreDestroy
    void cleanUp() {
        // ...
    }
}

Producer 및 disposer 메서드를 사용하여 Camel 컨텍스트 빈을 사용자 지정할 수도 있습니다. 예를 들면 다음과 같습니다.

class CamelContextFactory {

    @Produces
    @ApplicationScoped
    CamelContext customize() {
        DefaultCamelContext context = new DefaultCamelContext();
        context.setName("custom");
        return context;
    }

    void cleanUp(@Disposes CamelContext context) {
        // ...
    }
}

마찬가지로 producer 필드를 사용할 수 있습니다. 예를 들면 다음과 같습니다.

@Produces
@ApplicationScoped
CamelContext context = new CustomCamelContext();

class CustomCamelContext extends DefaultCamelContext {

    CustomCamelContext() {
        setName("custom");
    }
}

예를 들어, setAutoStartup 메서드를 호출하여 컨테이너가 초기화될 때 Camel 컨텍스트 경로가 자동으로 시작되지 않도록 하는 등의 방법으로 이 패턴을 사용할 수 있습니다.

@ApplicationScoped
class ManualStartupCamelContext extends DefaultCamelContext {

    @PostConstruct
    void manual() {
        setAutoStartup(false);
    }
}

59.5. 여러 Camel 컨텍스트

위의 설명대로 애플리케이션에서 CamelContext 빈을 실제로 선언할 수 있습니다. 이 경우 이러한 CamelContext 빈에 선언된 CDI 한정자는 Camel 경로 및 기타 Camel 프리미티브를 해당 Camel 컨텍스트에 바인딩하는 데 사용됩니다. 예를 들어 다음 빈이 선언되는 경우:

@ApplicationScoped
@ContextName("foo")
class FooCamelContext extends DefaultCamelContext {
}

@ApplicationScoped
@BarContextQualifier
class BarCamelContext extends DefaultCamelContext {
}
 
@ContextName("foo")
class RouteAddedToFooCamelContext extends RouteBuilder {

    @Override
    public void configure() {
        // ...
    }
}
 
@BarContextQualifier
class RouteAddedToBarCamelContext extends RouteBuilder {

    @Override
    public void configure() {
        // ...
    }
}
 
@ContextName("baz")
class RouteAddedToBazCamelContext extends RouteBuilder {

    @Override
    public void configure() {
        // ...
    }
}
 
@MyOtherQualifier
class RouteNotAddedToAnyCamelContext extends RouteBuilder {

    @Override
    public void configure() {
        // ...
    }
}

@ContextName 으로 정규화된 RoutesBuilder 빈은 Camel CDI를 통해 해당 CamelContext 빈에 자동으로 추가됩니다. 이러한 CamelContext 빈이 없는 경우 RouteAddedToBazCamelContext 빈과 같이 자동으로 생성됩니다. 이는 Camel CDI에서 제공하는 @ContextName 한정자에서만 발생합니다. 따라서 사용자 정의 @My OtherQualifier 한정자를 통해 자격을 갖춘 RouteNotAddedToAnyCamelContext 빈은 Camel 컨텍스트에 추가되지 않습니다. 예를 들어 애플리케이션 실행 중에 나중에 추가해야 할 수 있는 Camel 경로에 유용할 수 있습니다.

참고

Camel 버전 2.17.0부터 Camel CDI는 모든 종류의 CamelContext 빈(예: DefaultCamelContext)을 관리할 수 있습니다. 이전 버전에서는 CdiCamelContext 유형의 빈만 관리할 수 있으므로 확장해야합니다.

CamelContext 빈에 선언된 CDI 한정자도 해당 Camel 프리미티브를 바인딩하는 데 사용됩니다. 예를 들면 다음과 같습니다.

@Inject
@ContextName("foo")
@Uri("direct:inbound")
ProducerTemplate producerTemplate;

@Inject
@ContextName("foo")
@Uri("direct:inbound")
FluentProducerTemplate fluentProducerTemplate;

@Inject
@BarContextQualifier
MockEndpoint outbound; // URI defaults to the member name, i.e. mock:outbound

@Inject
@ContextName("baz")
@Uri("direct:inbound")
Endpoint endpoint;

59.6. 구성 속성

속성 자리 표시자를 해결하기 위해 Camel에서 사용하는 구성 속성의 소싱을 구성하려면 @Named("properties") 로 자격을 갖춘 PropertiesComponent 빈을 선언할 수 있습니다. 예를 들면 다음과 같습니다.

@Produces
@ApplicationScoped
@Named("properties")
PropertiesComponent propertiesComponent() {
    Properties properties = new Properties();
    properties.put("property", "value");
    PropertiesComponent component = new PropertiesComponent();
    component.setInitialProperties(properties);
    component.setLocation("classpath:placeholder.properties");
    return component;
}

DeltaSpike 구성 메커니즘 을 사용하려면 다음 PropertiesComponent 빈을 선언할 수 있습니다.

@Produces
@ApplicationScoped
@Named("properties")
PropertiesComponent properties(PropertiesParser parser) {
    PropertiesComponent component = new PropertiesComponent();
    component.setPropertiesParser(parser);
    return component;
}

// PropertiesParser bean that uses DeltaSpike to resolve properties
static class DeltaSpikeParser extends DefaultPropertiesParser {
    @Override
    public String parseProperty(String key, String value, Properties properties) {
        return ConfigResolver.getPropertyValue(key);
    }
}

DeltaSpike 구성 메커니즘을 사용하는 Camel CDI 애플리케이션의 작동 예시에 대한 camel-example-cdi-properties 예제를 확인할 수 있습니다.

59.7. 자동 구성된 유형 변환기

@Converter 주석이 주석이 추가된 CDI 빈은 배포된 Camel 컨텍스트(예:)에 자동으로 등록됩니다.

@Converter
public class MyTypeConverter {

    @Converter
    public Output convert(Input input) {
        //...
    }
}

CDI 주입은 변환기 내에서 지원됩니다.

59.8. Camel 빈 통합

59.8.1. Camel 주석

Camel 빈 통합의 일부로 Camel에는 Camel CDI에서 원활하게 지원하는 일련의 주석이 제공됩니다. http://camel.apache.org/bean-integration.html#BeanIntegration-Annotations 따라서 CDI 빈에서 이러한 주석을 사용할 수 있습니다. 예를 들면 다음과 같습니다.

Expand
 Camel 주석CDI와 동일

구성 속성

@PropertyInject("key")
String value;

DeltaSpike 구성 메커니즘 을 사용하는 경우:

@Inject
@ConfigProperty(name = "key")
String value;

자세한 내용은 구성 속성을 참조하십시오.

생산자 템플릿 삽입(기본 Camel 컨텍스트)

@Produce(uri = "mock:outbound")
ProducerTemplate producer;

@Produce(uri = "mock:outbound")
FluentProducerTemplate producer;
@Inject
@Uri("direct:outbound")
ProducerTemplate producer;

@Produce(uri = "direct:outbound")
FluentProducerTemplate producer;

끝점 삽입(기본 Camel 컨텍스트)

@EndpointInject(uri = "direct:inbound")
Endpoint endpoint;
@Inject
@Uri("direct:inbound")
Endpoint endpoint;

끝점 주입 (이름별 컨텍스트)

@EndpointInject(uri = "direct:inbound",
                context = "foo")
Endpoint contextEndpoint;
@Inject
@ContextName("foo")
@Uri("direct:inbound")
Endpoint contextEndpoint;

빈 주입(유형별)

@BeanInject
MyBean bean;
@Inject
MyBean bean;

빈 주입(이름별)

@BeanInject("foo")
MyBean bean;
@Inject
@Named("foo")
MyBean bean;

POJO 사용

@Consume(uri = "seda:inbound")
void consume(@Body String body) {
    //...
}

 

59.8.2. 빈 구성 요소

Java Camel DSL과 같은 유형의 DSL에서 CDI 빈을 참조할 수 있습니다.

class MyBean {
    //...
}

from("direct:inbound").bean(MyBean.class);

또는 Java DSL에서 이름으로 CDI 빈을 조회하려면 다음을 수행합니다.

@Named("foo")
class MyNamedBean {
    //...
}

from("direct:inbound").bean("foo");

59.8.3. 끝점 URI에서 빈 참조

URI 구문을 사용하여 끝점을 구성할 때 # 표기법을 사용하여 레지스트리의 빈을 참조할 수 있습니다. URI 매개변수 값이 # 기호로 시작하는 경우 Camel CDI는 지정된 유형의 빈을 이름별로 조회합니다. 예를 들면 다음과 같습니다.

from("jms:queue:{{destination}}?transacted=true&transactionManager=#jtaTransactionManager").to("...");

@Named("jtaTransactionManager") 로 다음 CDI 빈을 사용할 수 있어야 합니다.

@Produces
@Named("jtaTransactionManager")
PlatformTransactionManager createTransactionManager(TransactionManager transactionManager, UserTransaction userTransaction) {
    JtaTransactionManager jtaTransactionManager = new JtaTransactionManager();
    jtaTransactionManager.setUserTransaction(userTransaction);
    jtaTransactionManager.setTransactionManager(transactionManager);
    jtaTransactionManager.afterPropertiesSet();
    return jtaTransactionManager;
}

59.9. Camel 이벤트를 CDI 이벤트로

Camel 2.17로 사용 가능

Camel은 Camel 컨텍스트, 서비스, 경로 및 교환 이벤트를 수신 대기하기 위해 서브스크립션할 수 있는 관리 이벤트 세트를 제공합니다. Camel CDI는 이러한 Camel 이벤트를 CDI 관찰 자 방법 을 사용하여 관찰할 수 있는 CDI 이벤트로 원활하게 변환합니다. 예를 들면 다음과 같습니다.

void onContextStarting(@Observes CamelContextStartingEvent event) {
    // Called before the default Camel context is about to start
}

Camel 2.18부터 특정 경로(RouteAddedEvent,RouteStartedEvent,RouteStoppedEventRouteRemovedEvent)에 대한 이벤트를 확인할 수 있습니다. 예를 들면 다음과 같습니다.

from("...").routeId("foo").to("...");

void onRouteStarted(@Observes @Named("foo") RouteStartedEvent event) {
    // Called after the route "foo" has started
}

CDI 컨테이너에 여러 Camel 컨텍스트가 있는 경우 @ContextName 와 같은 Camel 컨텍스트 빈 한정자를 사용하여 관찰자 메서드 확인을 관찰자 확인에 지정된 대로 특정 Camel 컨텍스트로 구체화할 수 있습니다. 예를 들면 다음과 같습니다. http://docs.jboss.org/cdi/spec/1.2/cdi-spec.html#observer_resolution

void onRouteStarted(@Observes @ContextName("foo") RouteStartedEvent event) {
    // Called after the route 'event.getRoute()' for the Camel context 'foo' has started
}
 
void onContextStarted(@Observes @Manual CamelContextStartedEvent event) {
    // Called after the the Camel context qualified with '@Manual' has started
}

마찬가지로 @Default 한정자를 사용하여 여러 컨텍스트가 있는 경우 기본 Camel 컨텍스트에 대한 Camel 이벤트를 관찰할 수 있습니다. 예를 들면 다음과 같습니다.

void onExchangeCompleted(@Observes @Default ExchangeCompletedEvent event) {
    // Called after the exchange 'event.getExchange()' processing has completed
}

이 예에서는 한정자를 지정하지 않으면 @Any 한정자가 암시적으로 가정되므로 모든 Camel 컨텍스트에 대한 해당 이벤트가 수신됩니다.

Camel 이벤트를 CDI 이벤트로 변환하는 지원은 배포에서 Camel 이벤트를 수신하는 관찰자 메서드 및 Camel 컨텍스트별로 감지되는 경우에만 활성화됩니다.

59.10. CDI 이벤트 끝점

Camel 2.17로 사용 가능

CDI 이벤트 끝점은 Camel 경로를 사용하여 CDI 이벤트 를 브리지하므로 Camel 소비자(C Camel 프로듀서에서 일시 중지)에서 CDI 이벤트를 원활하게 관찰/사용/시행할 수 있습니다.

Camel CDI에서 제공하는 CdiEventEndpoint<T > 빈을 사용하여 이벤트 유형이 T 인 CDI 이벤트 를 관찰하거나 사용할 수 있습니다. 예를 들면 다음과 같습니다.

@Inject
CdiEventEndpoint<String> cdiEventEndpoint;

from(cdiEventEndpoint).log("CDI event received: ${body}");

이는 쓰기와 동일합니다.

@Inject
@Uri("direct:event")
ProducerTemplate producer;

void observeCdiEvents(@Observes String event) {
    producer.sendBody(event);
}

from("direct:event").log("CDI event received: ${body}");

반대로 CdiEventEndpoint<T > 빈을 사용하여 이벤트 유형이 T 인 / fire CDI 이벤트 를 생성할 수 있습니다. 예를 들면 다음과 같습니다.

@Inject
CdiEventEndpoint<String> cdiEventEndpoint;

from("direct:event").to(cdiEventEndpoint).log("CDI event sent: ${body}");

이는 쓰기와 동일합니다.

@Inject
Event<String> event;

from("direct:event").process(new Processor() {
    @Override
    public void process(Exchange exchange) {
        event.fire(exchange.getBody(String.class));
    }
}).log("CDI event sent: ${body}");

또는 Java 8 람다 식을 사용할 수 있습니다.

@Inject
Event<String> event;

from("direct:event")
    .process(exchange -> event.fire(exchange.getIn().getBody(String.class)))
    .log("CDI event sent: ${body}");

특정 CdiEventEndpoint< T > 삽입 지점의 유형 변수 T (resp. 한정자)는 다음과 같이 매개 변수가 있는 이벤트 유형 (예: 이벤트 한정자로) 자동으로 변환됩니다.

@Inject
@FooQualifier
CdiEventEndpoint<List<String>> cdiEventEndpoint;

from("direct:event").to(cdiEventEndpoint);

void observeCdiEvents(@Observes @FooQualifier List<String> event) {
    logger.info("CDI event: {}", event);
}

CDI 컨테이너에 여러 Camel 컨텍스트가 있는 경우 @ContextName 와 같은 Camel 컨텍스트 빈 한정자를 사용하여 CdiEventEndpoint<T > 삽입 지점을 받을 수 있습니다. 예를 들면 다음과 같습니다.

@Inject
@ContextName("foo")
CdiEventEndpoint<List<String>> cdiEventEndpoint;
// Only observes / consumes events having the @ContextName("foo") qualifier
from(cdiEventEndpoint).log("Camel context (foo) > CDI event received: ${body}");
// Produces / fires events with the @ContextName("foo") qualifier
from("...").to(cdiEventEndpoint);

void observeCdiEvents(@Observes @ContextName("foo") List<String> event) {
    logger.info("Camel context (foo) > CDI event: {}", event);
}

CDI 이벤트 Camel 엔드포인트는 이벤트 유형 및 이벤트 한정 자의 각각의 고유한 조합에 대해 관찰자 방법 을 동적으로 추가하고 컨테이너 유형 안전 관찰자 해상도 에만 의존하여 가능한 한 효율적으로 구현을 유도합니다.

또한 CDI의 유형 안전 속성과 Camel 구성 요소 모델의 동적 특성이 매우 높기 때문에 URI 를 통해 CDI 이벤트 Camel 엔드포인트의 인스턴스를 생성할 수 없습니다. 실제로 CDI 이벤트 구성 요소의 URI 형식은 다음과 같습니다.

cdi-event://PayloadType<T1,...,Tn>[?qualifiers=QualifierType1[,...[,QualifierTypeN]...]]

authority PayloadType (resp. the QualifierType)을 사용하는 경우 페이로드 매개 변수 유형에 대한 각도 괄호로 구분된 페이로드(resp. modifier) 원시 유형의 URI로 이스케이프된 URI가 됩니다. 이는  숙한 URI로 이어집니다. 예를 들면 다음과 같습니다.

cdi-event://org.apache.camel.cdi.example.EventPayload%3Cjava.lang.Integer%3E?qualifiers=org.apache.camel.cdi.example.FooQualifier%2Corg.apache.camel.cdi.example.BarQualifier

그러나 근본적으로는 CDI 컨테이너가 배포 단계에서 Camel 컨텍스트 모델을 검색할 수 없기 때문에 엔드포인트 인스턴스와 관찰자 메서드 간의 효율적인 바인딩을 방지할 수 있습니다.

59.11. Camel XML 구성 가져오기

Camel 2.18에서 사용 가능

CDI는 형식이 안전한 종속성 주입 메커니즘을 선호하지만 기존 Camel XML 구성 파일을 Camel CDI 애플리케이션으로 재사용하는 것이 유용할 수 있습니다. 다른 사용 사례에서는 Camel XML DSL을 사용하여 Camel 컨텍스트를 구성하는 것이 편리할 수 있습니다.

CDI 빈에서 Camel CDI가 제공하는 @ImportResource 주석을 사용할 수 있으며 Camel CDI는 다음과 같이 지정된 위치에 Camel XML 구성을 자동으로 로드합니다.

@ImportResource("camel-context.xml")
class MyBean {
}

Camel CDI는 classpath에서 지정된 위치에 리소스를 로드합니다(다른 프로토콜도 나중에 추가할 수 있음).

가져온 리소스의 모든 CamelContext 요소 및 기타 Camel 프리미티브 는 컨테이너 부트스트랩 중에 CDI 빈으로 자동 배포되므로 Camel CDI에서 제공하는 자동 구성을 활용하고 런타임에 주입할 수 있습니다. 이러한 요소에 명시적 id 속성이 설정된 경우 다음 Camel XML 구성이 제공됨과 같이 @Named 한정자를 사용하여 해당 CDI 빈이 정규화됩니다.

<camelContext id="foo">
    <endpoint id="bar" uri="seda:inbound">
        <property key="queue" value="#queue"/>
        <property key="concurrentConsumers" value="10"/>
    </endpoint>
<camelContext/>

해당 CDI 빈은 자동으로 배포되며 다음과 같이 삽입할 수 있습니다.

@Inject
@ContextName("foo")
CamelContext context;

@Inject
@Named("bar")
Endpoint endpoint;

CamelContext 빈은 @Named 및 @ContextName 한정자를 모두 사용하여 자동으로 정규화됩니다. 가져온 CamelContext 요소에 id 속성이 없는 경우 해당 빈은 기본 제공 @Default 한정자와 함께 배포됩니다.

반대로 애플리케이션에 배포된 CDI 빈은 일반적으로 ref 특성(예: 다음 빈이 선언된 경우) Camel XML 구성에서 참조할 수 있습니다.

@Produces
@Named("baz")
Processor processor = exchange -> exchange.getIn().setHeader("qux", "quux");

가져온 Camel XML 구성에서 해당 빈에 대한 참조를 선언할 수 있습니다. 예를 들면 다음과 같습니다.

<camelContext id="foo">
    <route>
        <from uri="..."/>
        <process ref="baz"/>
    </route>
<camelContext/>

59.12. 트랜잭션 지원

Camel 2.19에서 사용 가능

Camel CDI는 JTA를 사용하여 Camel 트랜잭션 클라이언트를 지원합니다.

이 지원은 선택 사항이므로 Maven을 사용할 때 종속성으로 JTA를 명시적으로 추가하여 애플리케이션 클래스 경로에 JTA를 포함해야 합니다.

<dependency>
    <groupId>javax.transaction</groupId>
    <artifactId>javax.transaction-api</artifactId>
    <scope>runtime</scope>
</dependency>

JTA 지원 컨테이너에 애플리케이션을 배포하거나 독립 실행형 JTA 구현을 제공해야 합니다.

Important

트랜잭션 관리자는 Java :/TransactionManager 키를 사용하여 JNDI 리소스로 조회됩니다.

광범위한 배포 시나리오를 지원하기 위해 더 유연한 전략이 향후 추가됩니다.

59.12.1. 트랜잭션 정책

Camel CDI는 일반적으로 지원되는 Camel TransactedPolicy 를 CDI 빈으로 구현할 수 있습니다. 이러한 정책은 트랜잭션된 EIP를 사용하여 이름으로 검색할 수 있습니다. 예를 들면 다음과 같습니다.

class MyRouteBean extends RouteBuilder {

    @Override
    public void configure() {
        from("activemq:queue:foo")
            .transacted("PROPAGATION_REQUIRED")
            .bean("transformer")
            .to("jpa:my.application.entity.Bar")
            .log("${body.id} inserted");
    }
}

다음과 같습니다.

class MyRouteBean extends RouteBuilder {

    @Inject
    @Named("PROPAGATION_REQUIRED")
    Policy required;

    @Override
    public void configure() {
        from("activemq:queue:foo")
            .policy(required)
            .bean("transformer")
            .to("jpa:my.application.entity.Bar")
            .log("${body.id} inserted");
    }
}

지원되는 트랜잭션 정책 이름 목록은 다음과 같습니다.

  • PROPAGATION_NEVER,
  • PROPAGATION_NOT_SUPPORTED,
  • PROPAGATION_SUPPORTS,
  • PROPAGATION_REQUIRED,
  • PROPAGATION_REQUIRES_NEW,
  • PROPAGATION_NESTED,
  • PROPAGATION_MANDATORY.

59.12.2. 트랜잭션 오류 처리기

Camel CDI는 redelivery 오류 처리기를 확장하는 트랜잭션 오류 처리기를 제공하며, 예외가 발생할 때마다 롤백을 강제하고 각 재전송마다 새 트랜잭션을 생성합니다.

Camel CDI는 다음과 같이 구성에 빠르게 액세스할 수 있도록 transactionErrorHandler 도우미 메서드를 노출하는 CdiRouteBuilder 클래스를 제공합니다.

class MyRouteBean extends CdiRouteBuilder {

    @Override
    public void configure() {
        errorHandler(transactionErrorHandler()
            .setTransactionPolicy("PROPAGATION_SUPPORTS")
            .maximumRedeliveries(5)
            .maximumRedeliveryDelay(5000)
            .collisionAvoidancePercent(10)
            .backOffMultiplier(1.5));
    }
}

59.13. auto-configured OSGi 통합

Camel 2.17로 사용 가능

Camel 컨텍스트 빈은 Camel CDI에 의해 자동으로 조정되므로 OSGi 서비스로 등록되고 ComponentResolver 및 DataFormatResolver와 같은 다양한 확인자(예: ComponentResolver 및 DataFormatResolver)가 OSGi 레지스트리에 통합되도록 Camel CDI에 의해 자동으로 조정됩니다. 즉, Karaf Camel 명령을 사용하여 Camel CDI에서 자동으로 구성할 수 있습니다. 예를 들면 다음과 같습니다.

karaf@root()> camel:context-list
 Context        Status              Total #       Failed #     Inflight #   Uptime
 -------        ------              -------       --------     ----------   ------
 camel-cdi      Started                   1              0              0   1 minute

Camel CDI OSGi 통합의 작동 예는 camel-example-cdi-osgi 예제를 참조하십시오.

59.14. lazy injection / Programmatic Lookup

CDI programmatic 모델은 애플리케이션 초기화 시 발생하는 typesafe resolution 메커니즘을 선호하지만 나중에 프로그래밍 방식 조회 메커니즘을 사용하여 애플리케이션 실행 중에 동적 / 지연 삽입을 수행할 수 있습니다.

Camel CDI는 Camel 프리미티브의 표준 주입에 사용할 수 있는 CDI 한정자에 해당하는 주석 리터럴을 편의를 제공합니다. 이러한 주석 리터럴은 지연 주입 / 프로그램 조회를 수행하는 CDI 진입점인 javax.enterprise.inject.Instance 인터페이스와 함께 사용할 수 있습니다.

예를 들어 @Uri 한정자에 대해 제공된 주석 리터럴을 사용하여 Camel 기본에 대해 지체적으로 조회할 수 있습니다(예: ProducerTemplate 빈의 경우).

@Any
@Inject
Instance<ProducerTemplate> producers;

ProducerTemplate inbound = producers
    .select(Uri.Literal.of("direct:inbound"))
    .get();

또는 Endpoint 빈의 경우 다음을 수행합니다.

@Any
@Inject
Instance<Endpoint> endpoints;

MockEndpoint outbound = endpoints
    .select(MockEndpoint.class, Uri.Literal.of("mock:outbound"))
    .get();

마찬가지로 @ContextName 한정자에 대해 제공된 주석 리터럴을 사용하여 CamelContext 빈을 지연할 수 있습니다. 예를 들면 다음과 같습니다.

@Any
@Inject
Instance<CamelContext> contexts;

CamelContext context = contexts
    .select(ContextName.Literal.of("foo"))
    .get();

Camel 컨텍스트 유형을 기반으로 선택 사항을 구체화할 수도 있습니다. 예를 들면 다음과 같습니다.

@Any
@Inject
Instance<CamelContext> contexts;

// Refine the selection by type
Instance<DefaultCamelContext> context = contexts.select(DefaultCamelContext.class);

// Check if such a bean exists then retrieve a reference
if (!context.isUnsatisfied())
    context.get();

Camel 컨텍스트를 선택하는 단계를 반복할 수도 있습니다. 예를 들면 다음과 같습니다.

@Any
@Inject
Instance<CamelContext> contexts;

for (CamelContext context : contexts)
    context.setUseBreadcrumb(true);

59.15. Maven Archetype

사용 가능한 Camel Maven archetypes 중에서 제공된 camel-archetype-cdi 을 사용하여 Camel CDI Maven 프로젝트를 생성할 수 있습니다. 예를 들면 다음과 같습니다.

mvn archetype:generate -DarchetypeGroupId=org.apache.camel.archetypes -DarchetypeArtifactId=camel-archetype-cdi

59.16. 지원되는 컨테이너

Camel CDI 구성 요소는 CDI 1.0, CDI 1.1 및 CDI 1.2 호환 런타임과 호환됩니다. 다음 런타임에 대해 성공적으로 테스트되었습니다.

Expand
컨테이너버전런타임

weld SE

1.1.28.Final

CDI 1.0 / Java SE 7

OpenWebBeans

1.2.7

CDI 1.0 / Java SE 7

weld SE

2.4.2.Final

CDI 1.2 / Java SE 7

OpenWebBeans

1.7.2

CDI 1.2 / Java SE 7

WildFly

8.2.1.Final

CDI 1.2 / Java EE 7

WildFly

9.0.1.Final

CDI 1.2 / Java EE 7

WildFly

10.1.0.Final

CDI 1.2 / Java EE 7

59.17. 예제

다음 예제는 Camel 프로젝트의 예제 디렉터리에서 확인할 수 있습니다.

Expand
예제설명

camel-example-cdi

구성 요소, 끝점 및 빈을 구성하기 위해 CDI를 사용하여 Camel과 함께 작업하는 방법을 설명합니다.

camel-example-cdi-kubernetes

Camel, CDI 및 Kubernetes 간의 통합을 설명합니다.

camel-example-cdi-metrics

Camel, Dropwizard Metrics 및 CDI 간의 통합을 보여줍니다.

camel-example-cdi-properties

구성 속성을 위한 Camel, DeltaSpike 및 CDI 간의 통합을 보여줍니다.

camel-example-cdi-osgi

PAX CDI를 사용하여 OSGi 컨테이너 내에서 실행할 수 있는 SJMS 구성 요소를 사용하는 CDI 애플리케이션

camel-example-cdi-rest-servlet

CDI를 종속성 주입 프레임워크로 사용하는 웹 애플리케이션에서 Camel REST DSL 사용 방법을 설명합니다.

camel-example-cdi-test

Camel과 CDI 간의 통합의 일부로 제공되는 테스트 기능을 보여줍니다.

camel-example-cdi-xml

Camel XML 구성 파일을 Camel CDI 애플리케이션으로 사용하는 방법을 설명합니다.

camel-example-openapi-cdi

CDI와 함께 REST DSL 및 OpenAPI Java 사용 예

camel-example-swagger-cdi

CDI와 함께 REST DSL 및 Swagger Java 사용 예

camel-example-widget-gadget-cdi

CDI 종속성 주입이 있는 Java에서 구현된 EIP 책의 위젯 및 Gadget 사용 사례

59.18. 예를 들면 다음과 같습니다.

59.19. {wildfly-camel}에 있는 EAR 배포를 위한 Camel CDI

{wildfly-camel}의 Camel CDI EAR 배포는 표준 WAR 또는 JAR 배포와 비교하여 클래스 및 리소스 로드 동작에서 몇 가지 차이점이 있습니다.

{Wildfly} EAR 배포 ClassLoader. {wildfly}를 사용하여 수집된 부트스트랩도 모든 EAR 하위 배포에서 단일 CDI 확장만 생성하고 공유하도록 합니다.

그러면 EAR 배포 ClassLoader를 사용하여 클래스 및 리소스를 동적으로 로드하기 위해 '자동 구성' CDI Camel Context가 생성됩니다. 기본적으로 이 ClassLoader는 EAR 하위 배포 내의 리소스에 액세스할 수 없습니다.

EAR 배포의 경우 'Auto-configured' CDI Camel Context를 사용하지 않도록 하고 RouteBuilder 클래스에 @ContextName 로 주석을 달거나 @ImportResource 주석을 통해 CamelContext 를 만들거나 CDI 생산자 메서드 및 필드를 통해 생성하는 것이 좋습니다. 이는 {wildfly-camel}에서 Camel과 함께 사용할 올바른 ClassLoader를 결정하는 데 도움이 됩니다.

60장. Chronicle Engine 구성 요소

Camel 버전 2.18로 사용 가능

camel chronicle-engine 구성 요소를 사용하면 OpenHFT의 Chronicle-Engine의 이점을 활용할 수 있습니다.

60.1. URI 형식

chronicle-engine:addresses/path[?options]

60.2. URI 옵션

Chronicle Engine 구성 요소에는 옵션이 없습니다.

Chronicle Engine 엔드포인트는 URI 구문을 사용하여 구성됩니다.

chronicle-engine:addresses/path

다음 경로 및 쿼리 매개변수를 사용합니다.

60.2.1. 경로 매개 변수(2 매개변수):

Expand
이름설명기본값유형

addresses

필수 엔진 주소. 여러 주소는 쉼표로 구분할 수 있습니다.

 

문자열

path

필수 엔진 경로

 

문자열

60.2.2. 쿼리 매개변수(12 매개변수):

Expand
이름설명기본값유형

작업 (일반)

유효한 값을 수행하는 기본 동작은 - PUBLISH - PPUBLISH_AND_INDEX - PGET_AND_AND_PUT - PPUT_IF_ABSENT - PGET - PGET_AND_REMOVE - PGET - PGET_AND_REMOVE - PISOVE - PISOVE - PISEE - PGET_AND_AND_PUT - PGET_IF_ABSENT - PGET - PGET_AND_AND_PUT - PGET_IF_ABSENT - PGET - PGET_AND_AND_REMOVE - PISEE - PISE_MPE

 

문자열

clustername (일반)

큐의 클러스터 이름

 

문자열

filteredMapEvents (일반)

filer에 대한 Map 이벤트 유형의 쉼표로 구분된 목록, 유효한 값은 INSERT, UPDATE, REMOVE입니다.

 

문자열

영구 (일반)

데이터 지속성 활성화/비활성화

true

boolean

subscribeMapEvents (일반)

소비자가 맵 이벤트인 default true로 구독해야 하는 경우 설정합니다.

true

boolean

subscribeTopicEvents (일반)

소비자가 TopicEvents,d efault false로 가입해야 하는 경우 설정합니다.

false

boolean

subscribeTopologicalEvents (일반)

소비자가 TopologicalEvents,d efault false로 가입해야 하는 경우 설정합니다.

false

boolean

wireType (common)

사용할 유선 유형입니다. 기본값은 바이너리 와이어입니다.

BINARY

문자열

bridgeErrorHandler (consumer)

소비자를 Camel 라우팅 오류 처리기에 브리징할 수 있습니다. 이는 소비자가 들어오는 메시지를 선택하는 동안 예외가 발생한 것을 의미하며, 이제 메시지로 처리되어 라우팅 오류 처리기에 의해 처리됩니다. 기본적으로 소비자는 org.apache.camel.spi.ExceptionHandler를 사용하여 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

false

boolean

예외 처리기 (consumer)

소비자가 사용자 지정 ExceptionHandler를 사용하도록 하려면 다음을 수행합니다. bridgeErrorHandler 옵션이 활성화되어 있는지 확인한 후 이 옵션이 사용되지 않습니다. 기본적으로 소비자는 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

 

ExceptionHandler

exchangePattern (consumer)

소비자가 교환을 생성할 때 교환 패턴을 설정합니다.

 

ExchangePattern

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

61장. 청크 구성 요소

Camel 버전 2.15에서 사용 가능

chunk: 구성 요소를 사용하면 Chunk 템플릿을 사용하여 메시지를 처리할 수 있습니다. Templating을 사용하여 요청에 대한 응답을 생성할 때 이상적입니다.

Maven 사용자는 이 구성 요소를 위해 다음 종속성을 pom.xml 에 추가해야 합니다.

<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-chunk</artifactId>
<version>x.x.x</version> <!-- use the same version as your Camel core version -->
</dependency>

61.1. URI 형식

chunk:templateName[?options]

여기서 templateName 은 호출할 템플릿의 classpath-local URI입니다.

다음 형식 ?option=value&option=value&…​로 URI에 쿼리 옵션을 추가할 수 있습니다.

61.2. 옵션

Chunk 구성 요소에는 옵션이 없습니다.

Chunk 엔드포인트는 URI 구문을 사용하여 구성됩니다.

chunk:resourceUri

다음 경로 및 쿼리 매개변수를 사용합니다.

61.2.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

resourceUri

리소스의 필수 경로입니다. classpath, file, http, ref 또는 bean. classpath, file 및 http를 사용하여 접두사를 추가할 수 있습니다. (classpath는 기본값임) 이러한 프로토콜을 사용하여 리소스를 로드할 수 있습니다. ref는 registry. 빈의 리소스를 조회하여 리소스로 사용할 빈 메서드를 호출합니다. 빈의 경우 점 다음에 메서드 이름을 지정할 수 있습니다. eg bean:myBean.myMethod.

 

문자열

61.2.2. 쿼리 매개변수(7 매개변수):

Expand
이름설명기본값유형

contentCache (producer)

리소스 콘텐츠 캐시 사용 여부를 설정

false

boolean

인코딩 (producer)

본문의 인코딩을 정의합니다.

 

문자열

확장 (producer)

템플릿의 파일 확장자를 정의합니다.

 

문자열

themeFolder (producer)

검사할 테마 폴더를 정의합니다.

 

문자열

themeLayer (producer)

자세히 보기 위해 테마 계층 정의

 

문자열

themeSubfolder (producer)

검사할 subject 하위 폴더를 정의합니다.

 

문자열

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

청크 구성 요소는 확장 .chtml 또는 _.cxml이 있는 테마 폴더에서 특정 템플릿을 찾습니다. _ 다른 폴더 또는 확장 기능을 지정해야하는 경우 위에 나열된 특정 옵션을 사용해야합니다.

61.3. 청크 컨텍스트

Camel은 Chunk 컨텍스트( 조정)에서 교환 정보를 제공합니다. 교환은 다음과 같이 전송됩니다.

 

Expand
keyvalue

exchange

교환은 그 자체다.

exchange.properties

Exchange 속성.

headers

In 메시지의 헤더입니다.

camelContext

Camel 컨텍스트입니다.

요청

In 메시지입니다.

body

메시지 본문에 있습니다.

응답

Out(Out) 메시지(InOut 메시지 교환 패턴에만 해당)입니다.

61.4. 동적 템플릿

Camel은 템플릿 또는 템플릿 콘텐츠 자체에 대해 다른 리소스 위치를 정의할 수 있는 두 개의 헤더를 제공합니다. 이러한 헤더 중 하나라도 설정되면 Camel은 구성된 엔드포인트에서 이 헤더를 사용합니다. 이를 통해 런타임 시 동적 템플릿을 제공할 수 있습니다.

Expand
header유형설명지원 버전

ChunkConstants.CHUNK_RESOURCE_URI

문자열

구성된 엔드포인트 대신 사용할 템플릿 리소스의 URI입니다.

 

ChunkConstants.CHUNK_TEMPLATE

문자열

구성된 엔드포인트 대신 사용할 템플릿입니다.

 

61.5. 샘플

예를 들어 다음과 같은 것을 사용할 수 있습니다.

from("activemq:My.Queue").
to("chunk:template");

Chunk 템플릿을 사용하여 InOut 메시지 교환( JMSReplyTo 헤더가 있는 경우) 메시지에 대한 응답을 공식화합니다.

InOnly를 사용하고 메시지를 사용하고 다른 목적지로 보내려면 다음을 사용할 수 있습니다.

from("activemq:My.Queue").
to("chunk:template").
to("activemq:Another.Queue");

예를 들어 구성 요소에서 헤더를 통해 동적으로 사용해야 하는 템플릿을 지정할 수 있습니다.

from("direct:in").
setHeader(ChunkConstants.CHUNK_RESOURCE_URI).constant("template").
to("chunk:dummy");

Chunk 구성 요소 옵션의 예는 다음과 같습니다.

from("direct:in").
to("chunk:file_example?themeFolder=template&themeSubfolder=subfolder&extension=chunk");

이 예에서 Chunk 구성 요소는 template/subfolder 폴더에 있는 file_example.chunk 파일을 찾습니다.

61.6. 이메일 샘플

이 샘플에서는 주문 확인 이메일을 위해 Chunk templating을 사용합니다. 이메일 템플릿은 Chunk에 다음과 같이 배치됩니다.

 
Dear {$headers.lastName}, {$headers.firstName}

Thanks for the order of {$headers.item}.

Regards Camel Riders Bookstore
{$body}

61.7. 예를 들면 다음과 같습니다.

  • Camel 구성
  • 구성 요소
  • 끝점
  • 시작하기

62장. 클래스 구성 요소

Camel 버전 2.4로 사용 가능

class: 구성 요소는 Camel 메시지 교환에 빈을 바인딩합니다. 빈 구성 요소와 동일한 방식으로 작동하지만 레지스트리에서 을 찾는 대신 클래스 이름을 기반으로 빈을 생성합니다.

62.1. URI 형식

class:className[?options]

여기서 className 은 빈으로 생성하고 사용할 정규화된 클래스 이름입니다.

62.2. 옵션

Class 구성 요소에는 옵션이 없습니다.

클래스 엔드포인트는 URI 구문을 사용하여 구성됩니다.

class:beanName

다음 경로 및 쿼리 매개변수를 사용합니다.

62.2.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

beanName

필요한 빈의 이름 설정

 

문자열

62.2.2. 쿼리 매개변수 (5 매개변수):

Expand
이름설명기본값유형

방법 (producer)

빈에서 호출할 메서드의 이름을 설정합니다.

 

문자열

cache (advanced)

이 기능을 활성화하면 Camel이 첫 번째 레지스트리 조회 결과를 캐시합니다. 레지스트리의 빈이 Singleton 범위로 정의된 경우 캐시를 활성화할 수 있습니다.

false

boolean

multiParameterArray (advanced)

더 이상 사용되지 않는 방법 메시지 본문에서 전달되는 매개 변수를 처리하는 방법; true인 경우 메시지 본문이 매개 변수의 배열이어야 합니다. 참고: 이 옵션은 Camel에 의해 내부적으로 사용되며 최종 사용자가 사용할 수 없습니다. 사용 중단 참고: 이 옵션은 Camel에 의해 내부적으로 사용되며 최종 사용자가 사용할 수 없습니다.

false

boolean

매개변수 (고급)

빈에서 추가 속성을 구성하는 데 사용됩니다.

 

map

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

62.3. 사용

대신 정규화된 class name을 지정하면 구성 요소로만 클래스 구성 요소를 사용할 수 있습니다.
예를 들어 MyFooBean 을 사용하려면 다음과 같이 수행해야 합니다.

    from("direct:start").to("class:org.apache.camel.component.bean.MyFooBean").to("mock:result");

MyFooBean 에서 호출할 메서드를 지정할 수도 있습니다(예: hello ):

    from("direct:start").to("class:org.apache.camel.component.bean.MyFooBean?method=hello").to("mock:result");

62.4. 생성된 인스턴스에서 속성 설정

끝점 uri에서 생성된 인스턴스에 설정할 속성을 지정할 수 있습니다(예: setPrefix 메서드의 경우).

   // Camel 2.17 onwards
   from("direct:start")
        .to("class:org.apache.camel.component.bean.MyPrefixBean?bean.prefix=Bye")
        .to("mock:result");
 
   // Camel 2.16 and older 
   from("direct:start")
        .to("class:org.apache.camel.component.bean.MyPrefixBean?prefix=Bye")
        .to("mock:result");

또한 # 구문을 사용하여 레지스트리에서 조회할 속성을 참조할 수도 있습니다.

    // Camel 2.17 onwards
    from("direct:start")
        .to("class:org.apache.camel.component.bean.MyPrefixBean?bean.cool=#foo")
        .to("mock:result");

    // Camel 2.16 and older
    from("direct:start")
        .to("class:org.apache.camel.component.bean.MyPrefixBean?cool=#foo")
        .to("mock:result");

레지스트리의 빈을 id foo 로 조회하고 MyPrefixBean 클래스의 생성된 인스턴스에서 setCool 메서드를 호출합니다.

TIP: 클래스 구성 요소 거의 동일한 방식으로 작동하므로 빈 구성 요소에서 자세히 설명합니다.

62.5. 예를 들면 다음과 같습니다.

  • Camel 구성
  • 구성 요소
  • 끝점
  • 시작하기
  • 빈 바인딩
  • 빈 통합

63장. CMIS 구성 요소

Camel 버전 2.11로 사용 가능

cmis 구성 요소는 Apache Chemistry 클라이언트 API를 사용하며 CMIS 호환 콘텐츠 리포지토리에서 노드를 추가하거나 읽을 수 있습니다.

63.1. URI 형식

cmis://cmisServerUrl[?options]

다음 형식 ?options=value&option2=value&…​로 URI에 쿼리 옵션을 추가할 수 있습니다.

63.2. CMIS 옵션

CMIS 구성 요소는 아래 나열된 두 가지 옵션을 지원합니다.

Expand
이름설명기본값유형

sessionFacadeFactory (일반)

사용자 지정 CMISSessionFacadeFactory를 사용하여 CMISSessionFacade 인스턴스를 만듭니다.

 

CMISSessionFacade Factory

resolveProperty Placeholders (advanced)

구성 요소가 시작 시 자체적으로 속성 자리 표시자를 확인해야 하는지 여부입니다. String 유형의 속성만 속성 자리 표시자를 사용할 수 있습니다.Only properties which are of String type can use property placeholders.

true

boolean

CMIS 끝점은 URI 구문을 사용하여 구성됩니다.

cmis:cmsUrl

다음 경로 및 쿼리 매개변수를 사용합니다.

63.2.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

cmsUrl

cmis 저장소에 필요한 URL

 

문자열

63.2.2. 쿼리 매개변수(13 매개변수):

Expand
이름설명기본값유형

pageSize (일반)

페이지당 검색할 노드 수

100

int

ReadContent (일반)

true로 설정하면 속성 외에 문서 노드의 콘텐츠가 검색됩니다.

false

boolean

readCount (일반)

읽을 최대 노드 수

 

int

repositoryId (common)

사용할 저장소의 ID입니다. 첫 번째 사용 가능한 리포지토리를 지정하지 않은 경우

 

문자열

bridgeErrorHandler (consumer)

소비자를 Camel 라우팅 오류 처리기에 브리징할 수 있습니다. 이는 소비자가 들어오는 메시지를 선택하는 동안 예외가 발생한 것을 의미하며, 이제 메시지로 처리되어 라우팅 오류 처리기에 의해 처리됩니다. 기본적으로 소비자는 org.apache.camel.spi.ExceptionHandler를 사용하여 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

false

boolean

쿼리 (consumer)

리포지토리에 대해 실행할 cmis 쿼리입니다. 지정하지 않으면 소비자는 콘텐츠 트리를 재귀적으로 반복하여 콘텐츠 리포지토리에서 모든 노드를 검색합니다.

 

문자열

예외 처리기 (consumer)

소비자가 사용자 지정 ExceptionHandler를 사용하도록 하려면 다음을 수행합니다. bridgeErrorHandler 옵션이 활성화되어 있는지 확인한 후 이 옵션이 사용되지 않습니다. 기본적으로 소비자는 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

 

ExceptionHandler

exchangePattern (consumer)

소비자가 교환을 생성할 때 교환 패턴을 설정합니다.

 

ExchangePattern

queryMode (producer)

true인 경우, 는 메시지 본문에서 cmis 쿼리를 실행하고 결과를 반환합니다. 그렇지 않으면 cmis 저장소에 노드를 만듭니다.

false

boolean

sessionFacadeFactory (advanced)

사용자 지정 CMISSessionFacadeFactory를 사용하여 CMISSessionFacade 인스턴스를 만듭니다.

 

CMISSessionFacade Factory

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

암호 (보안)

cmis 저장소의 암호

 

문자열

사용자 이름 (보안)

cmis 리포지토리의 사용자 이름

 

문자열

63.3. 사용법

63.3.1. 생산자가 평가한 메시지 헤더

Expand
header기본값설명

CamelCMISFolderPath

/

실행 중에 사용할 현재 폴더입니다. 지정하지 않으면 루트 폴더를 사용합니다.

CamelCMISRetrieveContent

false

queryMode 에서 이 헤더는 생산자가 문서 노드의 콘텐츠를 검색하도록 강제 적용합니다.

CamelCMISReadSize

0

읽을 최대 노드 수입니다.

cmis:path

null

CamelCMISFolderPath 가 설정되지 않은 경우, 는 이 cmis 속성에서 노드의 경로를 확인하려고 시도하며 이름이 이름입니다.

cmis:name

null

CamelCMISFolderPath 가 설정되지 않은 경우, 는 이 cmis 속성에서 노드의 경로를 확인하려고 합니다. 이 경로입니다.

cmis:objectTypeId

null

노드의 유형입니다.

cmis:contentStreamMimeType

null

문서에 설정할 mimetype

63.3.2. Producer 작업을 쿼리하는 동안 메시지 헤더 설정

Expand
header유형설명

CamelCMISResultCount

정수

쿼리에서 반환된 노드 수입니다.

메시지 본문에는 맵의 각 항목이 cmis 속성 및 해당 값인 맵 목록이 포함됩니다. CamelCMISRetrieveContent 헤더가 true로 설정된 경우 CamelCMISContent 키의 맵의 추가 항목에는 문서 유형 문서 유형의 InputStream 이 포함됩니다.

63.4. 종속 항목

Maven 사용자는 다음 종속성을 pom.xml에 추가해야 합니다.

pom.xml

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-cmis</artifactId>
    <version>${camel-version}</version>
</dependency>

여기서 ${camel-version}은 Camel의 실제 버전(2.11 이상)으로 교체해야 합니다.

63.5. 예를 들면 다음과 같습니다.

  • Camel 구성
  • 구성 요소
  • 끝점
  • 시작하기

64장. CM SMS 게이트웨이 구성 요소

Camel 버전 2.18로 사용 가능

Camel-Cm-Sms 는 [CM SMS 게이트웨이](https://www.cmtelecom.com위한 Apache Camel 구성 요소입니다.

이를 통해 CM SMS API를 camel 구성 요소로 애플리케이션에 통합할 수 있습니다.

유효한 계정이 있어야 합니다. 자세한 내용은 CM Telecom 에서 확인할 수 있습니다.

cm-sms://sgw01.cm.nl/gateway.ashx?defaultFrom=DefaultSender&defaultMaxNumberOfParts=8&productToken=xxxxx

Maven 사용자는 이 구성 요소를 위해 다음 종속성을 pom.xml에 추가해야 합니다.

<dependency>
 <groupId>org.apache.camel</groupId>
 <artifactId>camel-cm-sms</artifactId>
 <version>x.x.x</version>
 <!-- use the same version as your Camel core version -->
</dependency>

64.1. 옵션

CM SMS 게이트웨이 구성 요소에는 옵션이 없습니다.

CM SMS 게이트웨이 끝점은 URI 구문을 사용하여 구성됩니다.

cm-sms:host

다음 경로 및 쿼리 매개변수를 사용합니다.

64.1.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

host

스키마가 포함된 필수 SMS 공급자 호스트

 

문자열

64.1.2. 쿼리 매개변수 (5 매개변수):

Expand
이름설명기본값유형

defaultFrom (producer)

보낸 사람 이름입니다. 최대 길이는 11자입니다.

 

문자열

defaultMaxNumberOfParts (producer)

다중 파트 메시지인 경우 최대 번호가 적용됩니다. 메시지는 잘릴 수 있습니다. 기술적으로 게이트웨이는 먼저 메시지가 160자보다 큰지 확인합니다. 이 경우 메시지는 이러한 매개 변수에 의해 제한되는 153자 부분으로 잘립니다.

8

int

productToken (producer)

필수 항목: 사용할 고유 토큰

 

문자열

TestConnectionOnStartup (producer)

시작 시 SMS 게이트웨이에 대한 연결을 테스트할지 여부

false

boolean

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

64.2. 샘플

이 프로젝트 를 통해 camel-cm-sms를 camel 경로에 통합할 수 있는 방법을 확인할 수 있습니다.

65장. CoAP 구성 요소

Camel 버전 2.16에서 사용 가능

Camel-CoAP 는 시스템 간 작업을 위한 경량 REST 유형 프로토콜인 CoAP와 함께 작업할 수 있는 Apache Camel 구성 요소입니다. CoAP, Constrained Application Protocol은 제한된 노드 및 제한된 네트워크와 함께 사용할 수 있는 특수화된 웹 전송 프로토콜이며 RFC 7252를 기반으로 합니다.

Maven 사용자는 이 구성 요소를 위해 다음 종속성을 pom.xml에 추가해야 합니다.

<dependency>
 <groupId>org.apache.camel</groupId>
 <artifactId>camel-coap</artifactId>
 <version>x.x.x</version>
 <!-- use the same version as your Camel core version -->
</dependency>

65.1. 옵션

CoAP 구성 요소에는 옵션이 없습니다.

CoAP 엔드포인트는 URI 구문을 사용하여 구성됩니다.

coap:uri

다음 경로 및 쿼리 매개변수를 사용합니다.

65.1.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

uri

CoAP 끝점의 URI

 

URI

65.1.2. 쿼리 매개변수 (5 매개변수):

Expand
이름설명기본값유형

bridgeErrorHandler (consumer)

소비자를 Camel 라우팅 오류 처리기에 브리징할 수 있습니다. 이는 소비자가 들어오는 메시지를 선택하는 동안 예외가 발생한 것을 의미하며, 이제 메시지로 처리되어 라우팅 오류 처리기에 의해 처리됩니다. 기본적으로 소비자는 org.apache.camel.spi.ExceptionHandler를 사용하여 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

false

boolean

coapMethodRestrict (consumer)

CoAP 소비자가 바인딩할 메서드의 쉼표로 구분된 목록입니다. 기본값은 모든 메서드(DELETE, GET, POST, PUT)에 바인딩하는 것입니다.

 

문자열

예외 처리기 (consumer)

소비자가 사용자 지정 ExceptionHandler를 사용하도록 하려면 다음을 수행합니다. bridgeErrorHandler 옵션이 활성화되어 있는지 확인한 후 이 옵션이 사용되지 않습니다. 기본적으로 소비자는 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

 

ExceptionHandler

exchangePattern (consumer)

소비자가 교환을 생성할 때 교환 패턴을 설정합니다.

 

ExchangePattern

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

65.2. 메시지 헤더

Expand
이름유형설명

CamelCoapMethod

문자열

CoAP 생산자가 대상 CoAP 서버 URI를 호출할 때 사용해야 하는 요청 방법입니다. 유효한 옵션은 DELETE, GET, PING, POST & PUT입니다.

CamelCoapResponseCode

문자열

외부 서버에서 보낸 CoAP 응답 코드입니다. 각 코드가 무엇을 의미하는지에 대한 자세한 내용은 RFC 7252를 참조하십시오.

CamelCoapUri

문자열

호출할 CoAP 서버의 URI입니다. 는 엔드포인트에 직접 구성된 기존 URI를 재정의합니다.

65.2.1. CoAP 생산자 요청 방법 구성

다음 규칙은 CoAP 생산자가 대상 URI를 호출하는 데 사용할 요청 방법을 결정합니다.

  1. CamelCoapMethod 헤더의 값
  2. 대상 CoAP 서버 URI에 쿼리 문자열이 제공되는 경우 GET
  3. 메시지 교환 본문이 null이 아닌 경우 POST 입니다.
  4. 그렇지 않으면 GET 입니다.

66장. 일정 언어

Camel 버전 1.5로 사용 가능

Constant Expression Language는 상수 문자열을 표현식 유형으로 지정하는 방법일 뿐입니다.

참고

이는 경로를 시작하는 동안 한 번만 설정된 고정 상수 값이며 라우팅 중에 동적 값을 원하는 경우에는 사용하지 마십시오.

66.1. 일정 옵션

Constant 언어는 아래 나열된 1 개의 옵션을 지원합니다.

Expand
이름기본값Java Type설명

trim

true

부울

선행 공백과 후행 공백과 줄 바꿈을 제거할 값을 조정할지 여부입니다.

66.2. 사용 예

Spring DSL의 setHeader 요소는 다음과 같은 상수 표현식을 사용할 수 있습니다.

<route>
  <from uri="seda:a"/>
  <setHeader headerName="theHeader">
    <constant>the value</constant>
  </setHeader>
  <to uri="mock:b"/>
</route>

이 경우 seda:a Endpoint에서 들어오는 Message에는 'theHeader' 헤더가 상수 값 'the value'로 설정됩니다.

Java DSL을 사용하는 것과 동일한 예입니다.

from("seda:a")
  .setHeader("theHeader", constant("the value"))
  .to("mock:b");

66.3. 종속 항목

Constant 언어는 camel-core 의 일부입니다.

67장. CometD Component

Camel 버전 2.0에서 사용 가능

cometd: 구성 요소는 cometd/bayeux 프로토콜jetty 구현 작업을 위한 전송입니다.
이 구성 요소를 dojo Toolkit 라이브러리와 함께 사용하면 AJAX 기반 메커니즘을 사용하여 Camel 메시지를 브라우저로 직접 푸시할 수 있습니다.

Maven 사용자는 이 구성 요소를 위해 다음 종속성을 pom.xml 에 추가해야 합니다.

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-cometd</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>

67.1. URI 형식

cometd://host:port/channelName[?options]

channelName 은 Camel 엔드포인트에서 서브스크립션할 수 있는 주제를 나타냅니다.

67.2. 예제

cometd://localhost:8080/service/mychannel
cometds://localhost:8443/service/mychannel

여기서 cometds: SSL 구성된 끝점을 나타냅니다.

67.3. 옵션

CometD 구성 요소는 아래에 나열된 8 가지 옵션을 지원합니다.

Expand
이름설명기본값유형

sslKeyPassword (보안)

SSL을 사용하는 경우 키 저장소의 암호입니다.

 

문자열

sslPassword (보안)

SSL을 사용하는 경우 암호입니다.

 

문자열

sslKeystore (보안)

키 저장소 경로입니다.

 

문자열

SecurityPolicy (보안)

사용자 정의 구성된 SecurityPolicy를 사용하여 권한 부여 제어

 

SecurityPolicy

확장 (공용)

들어오고 나가는 요청을 수정할 수 있는 사용자 정의 BayeuxServer.Extension 목록을 사용하려면 다음을 수행합니다.

 

list

sslContextParameters (security)

SSLContextParameters를 사용하여 보안 구성

 

SSLContextParameters

useGlobalSslContext 매개변수 (보안)

글로벌 SSL 컨텍스트 매개 변수의 사용을 활성화합니다.

false

boolean

resolveProperty Placeholders (advanced)

구성 요소가 시작 시 자체적으로 속성 자리 표시자를 확인해야 하는지 여부입니다. String 유형의 속성만 속성 자리 표시자를 사용할 수 있습니다.Only properties which are of String type can use property placeholders.

true

boolean

CometD 엔드포인트는 URI 구문을 사용하여 구성됩니다.

cometd:host:port/channelName

다음 경로 및 쿼리 매개변수를 사용합니다.

67.3.1. 경로 매개 변수(3 매개변수):

Expand
이름설명기본값유형

host

필수 호스트 이름

 

문자열

port

필수 호스트 포트 번호

 

int

channelName

필수 channelName은 Camel 엔드포인트에서 서브스크립션할 수 있는 주제를 나타냅니다.

 

문자열

67.3.2. 쿼리 매개변수(16 매개변수):

Expand
이름설명기본값유형

allowedOrigins (common)

CrosssOriginFilterOn이 true인 경우 crosssOriginFilterOn을 지원하는 origins 도메인

*

문자열

baseResource (common)

웹 리소스 또는 classpath의 루트 디렉터리입니다. 구성 요소가 파일 시스템 또는 classpath에서 리소스를 로드하려면 프로토콜 file: 또는 classpath:를 사용합니다. classpath는 리소스가 jar에 패키지된 OSGI 배포에 필요합니다.

 

문자열

crossOriginFilterOn (일반)

true인 경우 서버는 도메인 간 필터링을 지원합니다.

false

boolean

filterPath (common)

filterPath는 CrossOriginFilterOn이 true인 경우 CrossOriginFilterOn에서 사용합니다.

 

문자열

간격 (일반)

클라이언트 측 폴링 시간(밀리초)입니다. 클라이언트에서 다시 연결 대기 시간

 

int

jsonCommented (일반)

true인 경우 서버는 주석에서 JSON을 래핑하고 주석에 JSON 래핑을 생성합니다. 이는 Ajax Hijacking에 대한 방어입니다.

true

boolean

loglevel (common)

로깅 수준. 0=none, 1=info, 2=debug.

1

int

maxInterval (common)

최대 클라이언트 쪽 폴링 시간(밀리초)입니다. 이 시점에 연결이 수신되지 않으면 클라이언트가 제거됩니다.

30000

int

multiFrameInterval (common)

동일한 브라우저에서 여러 개의 연결이 감지되는 경우 클라이언트 측 폴링 시간 초과입니다.

1500

int

시간 초과 (일반)

서버 측 폴링 시간 초과(밀리초)입니다. 이는 서버가 응답하기 전에 다시 연결 요청을 유지하는 시간입니다.

240000

int

bridgeErrorHandler (consumer)

소비자를 Camel 라우팅 오류 처리기에 브리징할 수 있습니다. 이는 소비자가 들어오는 메시지를 선택하는 동안 예외가 발생한 것을 의미하며, 이제 메시지로 처리되어 라우팅 오류 처리기에 의해 처리됩니다. 기본적으로 소비자는 org.apache.camel.spi.ExceptionHandler를 사용하여 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

false

boolean

sessionHeadersEnabled (consumer)

수신 요청을 위해 Camel Message를 생성할 때 Camel 메시지에 서버 세션 헤더를 포함할지 여부입니다.

false

boolean

예외 처리기 (consumer)

소비자가 사용자 지정 ExceptionHandler를 사용하도록 하려면 다음을 수행합니다. bridgeErrorHandler 옵션이 활성화되어 있는지 확인한 후 이 옵션이 사용되지 않습니다. 기본적으로 소비자는 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

 

ExceptionHandler

exchangePattern (consumer)

소비자가 교환을 생성할 때 교환 패턴을 설정합니다.

 

ExchangePattern

disconnectLocalSession (producer)

메시지를 채널에 게시한 후 로컬 세션의 연결을 끊을지 여부입니다. 로컬 세션의 연결을 해제하는 것은 기본적으로 CometD에 의해 방해되지 않으므로 메모리가 부족해질 수 있습니다.

false

boolean

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

다음 형식 ?option=value&option=value&…​로 URI에 쿼리 옵션을 추가할 수 있습니다.

매개 변수를 전달하는 방법에 대한 몇 가지 예는 다음과 같습니다.

파일(Web Application 디렉토리 -Cinder cometd://localhost:8080?resourceBase=file./webapp
classpath의 경우)의 경우(예: 웹 리소스가 webapp 폴더 -qcow cometd://localhost:80?resource=classpath:80?resource=classpath:webapp 내에 패키징된 경우)

67.4. 인증

Camel 2.8 사용

여기에 설명된대로 인증을 사용할 수 있는 'CometdComponent's 사용자 정의 SecurityPolicy 및 Extension 's를 구성할 수 있습니다.

67.5. Cometd Component에 대한 SSL 설정

67.5.1. JSSE 구성 유틸리티 사용

Camel 2.9부터 Cometd 구성 요소는 Camel JSSE 구성 유틸리티를 통해 SSL/TLS 구성을 지원합니다.  이 유틸리티는 작성하는 데 필요한 구성 요소별 코드의 양을 크게 줄이고 엔드포인트 및 구성 요소 수준에서 구성할 수 있습니다.  다음 예제에서는 Cometd 구성 요소와 함께 유틸리티를 사용하는 방법을 보여줍니다. CometdComponent에서 SSL을 구성해야 합니다.

구성 요소의 프로그래밍 구성

KeyStoreParameters ksp = new KeyStoreParameters();
ksp.setResource("/users/home/server/keystore.jks");
ksp.setPassword("keystorePassword");

KeyManagersParameters kmp = new KeyManagersParameters();
kmp.setKeyStore(ksp);
kmp.setKeyPassword("keyPassword");

TrustManagersParameters tmp = new TrustManagersParameters();
tmp.setKeyStore(ksp);

SSLContextParameters scp = new SSLContextParameters();
scp.setKeyManagers(kmp);
scp.setTrustManagers(tmp);

CometdComponent commetdComponent = getContext().getComponent("cometds", CometdComponent.class);
commetdComponent.setSslContextParameters(scp);

끝점의 Spring DSL 기반 구성

...
  <camel:sslContextParameters
      id="sslContextParameters">
    <camel:keyManagers
        keyPassword="keyPassword">
      <camel:keyStore
          resource="/users/home/server/keystore.jks"
          password="keystorePassword"/>
    </camel:keyManagers>
    <camel:trustManagers>
      <camel:keyStore
          resource="/users/home/server/keystore.jks"
          password="keystorePassword"/>
    </camel:keyManagers>
  </camel:sslContextParameters>...
 
  <bean id="cometd" class="org.apache.camel.component.cometd.CometdComponent">
    <property name="sslContextParameters" ref="sslContextParameters"/>
  </bean>
...
  <to uri="cometds://127.0.0.1:443/service/test?baseResource=file:./target/test-classes/webapp&timeout=240000&interval=0&maxInterval=30000&multiFrameInterval=1500&jsonCommented=true&logLevel=2"/>...

67.6. 예를 들면 다음과 같습니다.

  • Camel 구성
  • 구성 요소
  • 끝점
  • 시작하기

68장. Consul 구성 요소

Camel 버전 2.18로 사용 가능

Consul 구성 요소는 애플리케이션을 Consul과 통합하기 위한 구성 요소입니다.

Maven 사용자는 이 구성 요소를 위해 다음 종속성을 pom.xml에 추가해야 합니다.

    <dependency>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-consul</artifactId>
        <version>${camel-version}</version>
    </dependency>

68.1. URI 형식

    consul://domain?[options]

다음 형식으로 URI에 쿼리 옵션을 추가할 수 있습니다.

    ?option=value&option=value&...

68.2. 옵션

Consul 구성 요소는 아래에 나열된 9 가지 옵션을 지원합니다.

Expand
이름설명기본값유형

URL (공용)

Consul 에이전트 URL

 

문자열

데이터 센터 (공용)

데이터 센터

 

문자열

sslContextParameters (common)

org.apache.camel.util.jsse.SSLContextParameters 인스턴스를 사용하는 SSL 구성입니다.

 

SSLContextParameters

useGlobalSslContext 매개변수 (보안)

글로벌 SSL 컨텍스트 매개 변수의 사용을 활성화합니다.

false

boolean

aclToken (일반)

Consul과 함께 사용할 ACL 토큰 설정

 

문자열

사용자 이름 (공용)

기본 인증에 사용할 사용자 이름 설정

 

문자열

암호 (공용)

기본 인증에 사용할 암호를 설정합니다.

 

문자열

구성 (고급)

끝점 간에 공유되는 공통 구성을 설정합니다.

 

ConsulConfiguration

resolveProperty Placeholders (advanced)

구성 요소가 시작 시 자체적으로 속성 자리 표시자를 확인해야 하는지 여부입니다. String 유형의 속성만 속성 자리 표시자를 사용할 수 있습니다.Only properties which are of String type can use property placeholders.

true

boolean

Consul 엔드포인트는 URI 구문을 사용하여 구성됩니다.

consul:apiEndpoint

다음 경로 및 쿼리 매개변수를 사용합니다.

68.2.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

apiEndpoint

필수 API 끝점

 

문자열

68.2.2. 쿼리 매개변수 (4 매개변수):

Expand
이름설명기본값유형

bridgeErrorHandler (consumer)

소비자를 Camel 라우팅 오류 처리기에 브리징할 수 있습니다. 이는 소비자가 들어오는 메시지를 선택하는 동안 예외가 발생한 것을 의미하며, 이제 메시지로 처리되어 라우팅 오류 처리기에 의해 처리됩니다. 기본적으로 소비자는 org.apache.camel.spi.ExceptionHandler를 사용하여 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

false

boolean

예외 처리기 (consumer)

소비자가 사용자 지정 ExceptionHandler를 사용하도록 하려면 다음을 수행합니다. bridgeErrorHandler 옵션이 활성화되어 있는지 확인한 후 이 옵션이 사용되지 않습니다. 기본적으로 소비자는 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

 

ExceptionHandler

exchangePattern (consumer)

소비자가 교환을 생성할 때 교환 패턴을 설정합니다.

 

ExchangePattern

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

68.3. headers

Expand
이름유형설명

CamelConsulAction

문자열

Producer 작업

CamelConsulKey

문자열

작업을 적용해야 하는 키입니다.

CamelConsulEventId

문자열

이벤트 ID(소비자만 해당)

CamelConsulEventName

문자열

이벤트 이름(consumer만 해당)

CamelConsulEventLTime

long

이벤트 LTime

CamelConsulNodeFilter

문자열

Node 필터

CamelConsulTagFilter

문자열

태그 필터

CamelConsulSessionFilter

문자열

세션 필터

CamelConsulVersion

int

데이터 버전

CamelConsulFlags

long

값과 연결된 플래그

CamelConsulCreateIndex

long

항목이 생성될 때 표시되는 내부 인덱스 값입니다.

CamelConsulLockIndex

long

잠금에서 이 키를 성공적으로 취득한 횟수

CamelConsulModifyIndex

long

이 키를 수정한 마지막 인덱스입니다.

CamelConsulOptions

개체

요청과 관련된 옵션

CamelConsulResult

boolean

응답의 결과가 있는 경우 True

CamelConsulSession

문자열

세션 ID

CamelConsulValueAsString

boolean

KV 엔드포인트의 Consul i.e.에서 문자열로 검색된 값을 변환하려면 다음을 수행하십시오.

69장. Control Bus 구성 요소

Camel 버전 2.11로 사용 가능

EIP 패턴의 Control Bus 를 사용하면 통합 시스템이 프레임워크 내에서 모니터링 및 관리할 수 있습니다.

image

Control Bus를 사용하여 엔터프라이즈 통합 시스템 관리. Control Bus는 애플리케이션 데이터에 사용되는 동일한 메시징 메커니즘을 사용하지만 별도의 채널을 사용하여 메시지 흐름과 관련된 구성 요소 관리와 관련된 데이터를 전송합니다.

Camel에서는 JMX를 사용하거나 CamelContext 에서 Java API를 사용하거나 org.apache.camel.api.management 패키지에서 Java API를 사용하거나 여기에 예제가 있는 event notifier를 사용하여 관리 및 모니터링할 수 있습니다.

Camel 2.11 이후부터는 그에 따라 반응하는 제어 버스 끝점에 메시지를 보낼 수 있는 새로운 ControlBus 구성 요소 를 도입했습니다.

69.1. ControlBus Component

Camel 2.11에서 사용 가능

controlbus: 구성 요소는 Control Bus EIP 패턴을 기반으로 Camel 애플리케이션을 쉽게 관리할 수 있습니다. 예를 들어, 메시지를 끝점으로 보내면 경로의 라이프사이클을 제어하거나 성능 통계를 수집할 수 있습니다.

controlbus:command[?options]

임의의 문자열이 될 수 있는 명령은 사용할 명령 유형을 식별합니다.

69.2. 명령

Expand
명령설명

Route

routeIdaction 매개변수를 사용하여 경로를 제어합니다.

language

메시지 본문을 평가하는 데 사용할 언어 를 지정할 수 있습니다. 평가에서 결과가 있는 경우 결과는 메시지 본문에 배치됩니다.

69.3. 옵션

Control Bus 구성 요소에는 옵션이 없습니다.

Control Bus 엔드포인트는 URI 구문을 사용하여 구성됩니다.

controlbus:command:language

다음 경로 및 쿼리 매개변수를 사용합니다.

69.3.1. 경로 매개 변수(2 매개변수):

Expand
이름설명기본값유형

command

필수 명령은 경로 또는 언어일 수 있습니다.

 

문자열

language

메시지 본문을 평가하는 데 사용할 언어의 이름을 지정할 수 있습니다. 평가에서 결과가 있는 경우 결과는 메시지 본문에 배치됩니다.

 

언어

69.3.2. 쿼리 매개변수(6 매개변수):

Expand
이름설명기본값유형

작업 (producer)

start, stop 또는 status일 수 있는 작업을 나타냅니다. 경로를 시작하거나 중지하려면 경로 상태를 메시지 본문에 출력으로 가져옵니다. Camel 2.11.1에서 일시 중지 및 재개를 사용하여 경로를 일시 중지하거나 재개할 수 있습니다. 또한 Camel 2.11.1부터 stats를 사용하여 XML 형식으로 반환된 성능 static을 가져올 수 있습니다. routeId 옵션은 routeId가 정의되지 않은 경우 전체 CamelContext에 대한 통계를 얻을 수 있는 경로를 정의하는 데 사용할 수 있습니다. 재시작 작업이 경로를 다시 시작합니다.

 

문자열

async (producer)

제어 버스 작업을 비동기적으로 실행할지 여부입니다. 중요: 이 옵션을 사용하도록 설정한 경우 작업의 모든 결과는 Exchange에 설정되지 않습니다. 이는 작업을 동기적으로 실행하는 경우에만 가능합니다.

false

boolean

loggingLevel (producer)

작업 완료 시 또는 작업을 처리하는 동안 예외가 발생한 경우 로깅에 사용되는 로깅 수준입니다.

INFO

LoggingLevel

restartDelay (producer)

경로를 다시 시작할 때 사용할 밀리코어의 지연입니다.

1000

int

routeId (producer)

ID로 경로를 지정하려면 다음을 수행합니다. 현재 special 키워드는 현재 경로를 나타냅니다.

 

문자열

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

다음 형식 ?option=value&option=value&…​로 URI에 쿼리 옵션을 추가할 수 있습니다.

69.4. 경로 명령 사용

route 명령을 사용하면 지정된 경로에서 일반적인 작업을 쉽게 수행할 수 있습니다(예: 경로를 시작하는 경우 빈 메시지를 이 끝점으로 보낼 수 있습니다.

template.sendBody("controlbus:route?routeId=foo&action=start", null);

경로 상태를 가져오려면 다음을 수행합니다.

String status = template.requestBody("controlbus:route?routeId=foo&action=status", null, String.class);

69.5. 성능 통계 가져오기

Camel 2.11.1에서 사용 가능

이를 위해서는 JMX를 기본적으로 활성화(기본적으로) 활성화해야 하며, 경로당 성능 정적 또는 CamelContext를 가져올 수 있습니다. 예를 들어 foo라는 경로의 static을 가져오려면 다음을 수행할 수 있습니다.

String xml = template.requestBody("controlbus:route?routeId=foo&action=stats", null, String.class);

반환된 static은 XML 형식입니다. ManagedRouteMBean 에서 dumpRouteStatsAsXml 작업을 통해 JMX에서 얻을 수 있는 동일한 데이터를 가져옵니다.

전체 CamelContext에 대한 static을 얻으려면 아래와 같이 routeId 매개변수를 생략하면 됩니다.

String xml = template.requestBody("controlbus:route?action=stats", null, String.class);

69.6. 간단한 언어 사용

예를 들어 특정 경로를 중지하기 위해 제어 버스와 함께 Simple 언어를 사용할 수 있습니다. 다음 메시지가 포함된 "controlbus:language:simple" 엔드포인트에 메시지를 보낼 수 있습니다.

template.sendBody("controlbus:language:simple", "${camelContext.stopRoute('myRoute')}");

이는 void 작업이므로 결과가 반환되지 않습니다. 그러나 경로 상태를 원하는 경우 다음을 수행할 수 있습니다.

String status = template.requestBody("controlbus:language:simple", "${camelContext.getRouteStatus('myRoute')}", String.class);

경로의 라이프사이클을 제어하기 위해 route 명령을 사용하는 것이 더 쉽습니다. language 명령을 사용하면 Groovy 와 같은 강력한 성능을 갖춘 언어 스크립트를 실행하거나 간단 한 언어를 확장할 수 있습니다.

예를 들어 Camel 자체를 종료하려면 다음을 수행할 수 있습니다.

template.sendBody("controlbus:language:simple?async=true", "${camelContext.stop()}");

우리는 async=true 를 사용하여 Camel을 비동기적으로 중지합니다. 그렇지 않으면 컨트롤 버스 구성 요소로 보낸 메시지를 처리하는 동안 Camel을 중지하려고 합니다.

작은 정보

또한 Groovy 등 다른 언어를 사용할 수도 있습니다.

70장. Couchbase 구성 요소

Camel 버전 2.19에서 사용 가능

couchbase: 구성 요소를 사용하면 CouchBase 인스턴스를 메시지의 생산자 또는 소비자로 처리할 수 있습니다.

Maven 사용자는 이 구성 요소를 위해 다음 종속성을 pom.xml 에 추가해야 합니다.

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-couchbase</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>

70.1. URI 형식

couchbase:url

70.2. 옵션

Couchbase 구성 요소에는 옵션이 없습니다.

Couchbase 엔드포인트는 URI 구문을 사용하여 구성됩니다.

couchbase:protocol:hostname:port

다음 경로 및 쿼리 매개변수를 사용합니다.

70.2.1. 경로 매개 변수(3 매개변수):

Expand
이름설명기본값유형

프로토콜

사용할 프로토콜

 

문자열

호스트 이름

사용할 호스트 이름

 

문자열

port

사용할 포트 번호

8091

int

70.2.2. 쿼리 매개변수(47 매개변수):

Expand
이름설명기본값유형

버킷 (공용)

사용할 버킷

 

문자열

(일반)

사용할 키

 

문자열

bridgeErrorHandler (consumer)

소비자를 Camel 라우팅 오류 처리기에 브리징할 수 있습니다. 이는 소비자가 들어오는 메시지를 선택하는 동안 예외가 발생한 것을 의미하며, 이제 메시지로 처리되어 라우팅 오류 처리기에 의해 처리됩니다. 기본적으로 소비자는 org.apache.camel.spi.ExceptionHandler를 사용하여 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

false

boolean

consumerProcessedStrategy (consumer)

사용할 소비자 프로세스 전략 정의

none

문자열

내림 차 (consumer)

이 작업이 내림차순인지 여부를 정의합니다.

false

boolean

DesignDocumentName (consumer)

사용할 디자인 문서 이름입니다.

맥주

문자열

제한 (소비자)

사용할 출력 제한

-1

int

rangeEndKey (consumer)

최종 키 범위를 정의합니다.

 

문자열

rangeStartKey (consumer)

시작 키의 범위를 정의합니다.

 

문자열

sendEmptyMessageWhenIdle (consumer)

폴링 소비자가 파일을 폴링하지 않은 경우 이 옵션을 활성화하여 빈 메시지( 본문 없음)를 대신 보낼 수 있습니다.

false

boolean

자주 는 질문(FAQ)

사용할 건너뛰기 정의

-1

int

viewName (consumer)

사용할 보기 이름입니다.

brewery_beers

문자열

예외 처리기 (consumer)

소비자가 사용자 지정 ExceptionHandler를 사용하도록 하려면 다음을 수행합니다. bridgeErrorHandler 옵션이 활성화되어 있는지 확인한 후 이 옵션이 사용되지 않습니다. 기본적으로 소비자는 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

 

ExceptionHandler

exchangePattern (consumer)

소비자가 교환을 생성할 때 교환 패턴을 설정합니다.

 

ExchangePattern

pollStrategy (consumer)

플러그형 org.apache.camel.PollingConsumerPollingStrategy를 사용하면 Camel에서 Exchange를 생성하고 라우팅하기 전에 폴링 작업 중에 일반적으로 발생한 오류 처리를 제어하는 사용자 정의 구현을 제공할 수 있습니다.

 

PollingConsumerPoll Strategy

autoStartIdForInserts (producer)

삽입 작업을 수행할 때 자동 시작 Id를 원하는 경우 정의

false

boolean

작업 (producer)

수행할 작업

CCB_PUT

문자열

persistTo (producer)

데이터를 보관할 위치

0

int

producerRetryAttempts (producer)

재시도 횟수를 정의합니다.

2

int

producerRetryPause (producer)

다른 시도 간 재시도 일시 중지 정의

5000

int

replicateTo (producer)

데이터 복제 위치

0

int

startingIdForInsertsFrom (producer)

삽입 작업을 수행하는 시작 Id를 정의합니다.

 

long

additionalHosts (advanced)

추가 호스트

 

문자열

maxReconnectDelay (advanced)

다시 연결 중 최대 지연 정의

30000

long

obsPollInterval (advanced)

관찰 폴링 간격을 정의합니다.

400

long

obsTimeout (advanced)

관찰 시간 제한 정의

-1

long

opQueueMaxBlockTime (advanced)

작업이 차단된 큐에 있을 수 있는 최대 시간을 정의합니다.

10000

long

opTimeOut (advanced)

작업 시간 제한 정의

2500

long

readBufferSize (advanced)

버퍼 크기를 정의합니다.

16384

int

shouldOptimize (advanced)

최적화를 사용하기를 원하는 경우 정의

false

boolean

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

timeoutExceptionThreshold (advanced)

시간 초과 예외를 throw하기 위한 임계값 정의

998

int

backoffErrorThreshold (scheduler)

백오프Multipler를 시작하기 전에 발생해야 하는 후속 오류 폴링(일부 오류 발생) 수입니다.

 

int

backoffIdleThreshold (scheduler)

백오프Multipler를 시작하기 전에 발생해야 하는 후속 유휴 폴링 수입니다.

 

int

backoffMultiplier (scheduler)

예약된 폴링 소비자 백오프가 연속된 여러 개의 유휴/errors가 있는 경우 해당 행에 사용할 수 있습니다. multiplier는 다음 실제 시도가 다시 발생하기 전에 건너뛸 폴링 수입니다. 이 옵션을 사용하는 경우 backoffIdleThreshold 및/또는 backoffErrorThreshold도 구성해야 합니다.

 

int

지연 (scheduler)

다음 폴링보다 밀리초입니다. 60초(60초), 5m30초(5분 및 30초) 및 1h(1시간)와 같은 단위를 사용하여 시간 값을 지정할 수도 있습니다.

500

long

greedy (scheduler)

greedy가 활성화된 경우 ScheduledPollConsumer는 이전 실행이 1개 이상의 메시지를 폴링하면 즉시 다시 실행됩니다.

false

boolean

initialDelay (scheduler)

첫 번째 폴링이 시작되기 전까지의 밀리초입니다. 60초(60초), 5m30초(5분 및 30초) 및 1h(1시간)와 같은 단위를 사용하여 시간 값을 지정할 수도 있습니다.

1000

long

runLoggingLevel (scheduler)

소비자는 폴링할 때 시작/완료 로그 행을 기록합니다. 이 옵션을 사용하면 로깅 수준을 구성할 수 있습니다.

TRACE

LoggingLevel

scheduledExecutorService (scheduler)

소비자에 사용할 사용자 지정/공유 스레드 풀을 구성할 수 있습니다. 기본적으로 각 소비자는 자체 스레드 스레드 풀이 있습니다.

 

ScheduledExecutor Service

스케줄러 (scheduler)

camel-spring 또는 camel-quartz2 구성 요소에서 cron 스케줄러를 사용하려면

none

ScheduledPollConsumer Scheduler

스케줄러 속성 (scheduler)

사용자 지정 스케줄러 또는 Quartz2, Spring 기반 스케줄러를 사용할 때 추가 속성을 구성하려면 다음을 수행합니다.

 

map

StartScheduler (scheduler)

스케줄러가 자동으로 시작되어야 하는지 여부입니다.

true

boolean

timeUnit (scheduler)

initialDelay 및 지연 옵션의 시간 단위입니다.

밀리초

TimeUnit

UseFixedDelay (scheduler)

고정 지연 또는 고정 속도가 사용되는 경우 제어합니다. 자세한 내용은 JDK의 ScheduledExecutorService를 참조하십시오.

true

boolean

암호 (보안)

사용할 암호

 

문자열

사용자 이름 (보안)

사용할 사용자 이름

 

문자열

71장. CouchDB Component

Camel 버전 2.11로 사용 가능

couchdb: 구성 요소를 사용하면 CouchDB 인스턴스를 메시지의 생산자 또는 소비자로 처리할 수 있습니다. 경량 LightCouch API를 사용하면 이 도구 구성 요소에는 다음과 같은 기능이 있습니다.

  • 소비자로서 삽입, 업데이트, 삭제 및 메시지 전송에 대한 couch changesets를 통해 camel 경로에 이를 게시합니다.
  • 생산자로서 Camel 2.18 삭제에서 저장, 업데이트 및 ( DELETE 값이 있는 CouchDbMethod를 사용하여) 문서를 공동 저장할 수 있습니다.
  • 필요에 따라 많은 끝점을 지원할 수 있으며, 예를 들어 여러 인스턴스에서 여러 데이터베이스를 사용할 수 있습니다.
  • 삭제에만 이벤트 트리거를 지정할 수 있으며, 삽입/업데이트 또는 모두(기본값)만 가능합니다.
  • sequenceId, 문서 버전, 문서 ID 및 HTTP 메서드 유형에 대해 설정된 헤더입니다.

Maven 사용자는 이 구성 요소를 위해 다음 종속성을 pom.xml 에 추가해야 합니다.

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-couchdb</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>

71.1. URI 형식

couchdb:http://hostname[:port]/database?[options]

여기서 hostname 은 실행 중인 couchdb 인스턴스의 호스트 이름입니다. port는 선택 사항이며 지정하지 않으면 기본값은 5984입니다.

71.2. 옵션

CouchDB 구성 요소에는 옵션이 없습니다.

CouchDB 엔드포인트는 URI 구문을 사용하여 구성됩니다.

couchdb:protocol:hostname:port/database

다음 경로 및 쿼리 매개변수를 사용합니다.

71.2.1. 경로 매개 변수 (4 매개변수):

Expand
이름설명기본값유형

프로토콜

필수 데이터베이스 통신에 사용할 프로토콜입니다.

 

문자열

호스트 이름

실행 중인 couchdb 인스턴스의 필수 호스트 이름

 

문자열

port

실행 중인 couchdb 인스턴스의 포트 번호

5984

int

database

사용할 데이터베이스 의 이름입니다.The name of the database to use.

 

문자열

71.2.2. 쿼리 매개변수(12 매개변수):

Expand
이름설명기본값유형

createDatabase (일반)

데이터베이스가 아직 없는 경우 해당 데이터베이스를 생성합니다.

false

boolean

bridgeErrorHandler (consumer)

소비자를 Camel 라우팅 오류 처리기에 브리징할 수 있습니다. 이는 소비자가 들어오는 메시지를 선택하는 동안 예외가 발생한 것을 의미하며, 이제 메시지로 처리되어 라우팅 오류 처리기에 의해 처리됩니다. 기본적으로 소비자는 org.apache.camel.spi.ExceptionHandler를 사용하여 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

false

boolean

삭제 (consumer)

문서 삭제가 이벤트로 게시됩니다.

true

boolean

하트비트 (consumer)

소켓을 밀리코어로 유지하기 위해 빈 메시지를 보내는 빈도

30000

long

이후 ( consumer)

지정된 업데이트 시퀀스 직후 변경 내용 추적을 시작합니다. 기본값 null은 최신 시퀀스에서 모니터링을 시작합니다.

 

문자열

스타일 (consumer)

변경 배열에 반환되는 버전 수를 지정합니다. 기본 main_only는 현재 승리된 버전만 반환합니다. all_docs는 모든 리프 버전 ( 충돌 및 삭제된 이전 충돌 포함)을 반환합니다.

main_only

문자열

업데이트 (consumer)

문서 삽입/업데이트는 이벤트로 게시

true

boolean

예외 처리기 (consumer)

소비자가 사용자 지정 ExceptionHandler를 사용하도록 하려면 다음을 수행합니다. bridgeErrorHandler 옵션이 활성화되어 있는지 확인한 후 이 옵션이 사용되지 않습니다. 기본적으로 소비자는 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

 

ExceptionHandler

exchangePattern (consumer)

소비자가 교환을 생성할 때 교환 패턴을 설정합니다.

 

ExchangePattern

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

암호 (보안)

인증된 데이터베이스의 암호

 

문자열

사용자 이름 (보안)

인증된 데이터베이스의 경우 사용자 이름

 

문자열

71.3. headers

다음 헤더는 메시지 전송 중에 교환에 설정됩니다.

Expand
속성

CouchDbDatabase

메시지에서 가져온 데이터베이스입니다.

CouchDbSeq

Couchdb changeset 업데이트/삭제 메시지의 시퀀스 번호

CouchDbId

couchdb 문서 ID

CouchDbRev

couchdb 문서 개정

CouchDbMethod

방법(삭제/업데이트)

헤더는 메시지가 수신되면 소비자가 설정합니다. 또한 삽입/업데이트가 완료되면 다운스트림 프로세서의 헤더도 설정합니다. 생산자보다 먼저 설정된 헤더는 무시됩니다. 예를 들어 CouchDbId를 헤더로 설정하면 삽입용 id로 사용되지 않는 경우 문서의 ID가 사용됩니다.

71.4. 메시지 본문

구성 요소는 삽입할 문서로 메시지 본문을 사용합니다. 본문이 String의 인스턴스이면 삽입하기 전에 GSON 개체로 마샬링됩니다. 즉, 문자열이 유효한 JSON이어야 합니다. 그렇지 않으면 삽입/업데이트가 실패합니다. 본문이 com.google.gson.JsonElement의 인스턴스인 경우 그대로 삽입됩니다. 그렇지 않으면 생산자가 지원되지 않는 본문 유형의 예외를 throw합니다.

71.5. 샘플

예를 들어 포트 9999에서 로컬로 실행되는 CouchDB 인스턴스에서 모든 삽입, 업데이트 및 삭제를 사용하려면 다음을 사용할 수 있습니다.

from("couchdb:http://localhost:9999").process(someProcessor);

삭제에만 관심이 있는 경우 다음을 사용할 수 있습니다.

from("couchdb:http://localhost:9999?updates=false").process(someProcessor);

메시지를 문서로 삽입하려면 교환의 본문이 사용됩니다.

from("someProducingEndpoint").process(someProcessor).to("couchdb:http://localhost:9999")

72장. Cassandra CQL 구성 요소

Camel 버전 2.15에서 사용 가능

Apache Cassandra 는 상용 하드웨어에서 대량으로 처리하도록 설계된 오픈 소스 NoSQL 데이터베이스입니다. Amazon의 DynamoDB와 마찬가지로 Cassandra는 단일 장애 지점과 고가용성을 방지하기 위해 피어 투 피어 및 마스터리스 아키텍처를 보유하고 있습니다. Google의 BigTable과 마찬가지로 Cassandra 데이터는 Thrift RPC API 또는 CQL이라는 SQL 유사 API를 통해 액세스할 수 있는 열 제품군을 사용하여 구성됩니다.

이 구성 요소는 CQL3 API를 사용하는 Cassandra 2.0 이상(Trift API가 아님)을 통합하는 것을 목표로 합니다. 이는 DataStax에서 제공하는 Cassandra Java 드라이버 를 기반으로 합니다.

Maven 사용자는 pom.xml 에 다음 종속성을 추가해야 합니다.

pom.xml

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-cassandraql</artifactId>
    <version>x.y.z</version>
    <!-- use the same version as your Camel core version -->
</dependency>

72.1. URI 형식

엔드포인트는 Cassandra 연결을 시작하거나 기존 연결을 사용할 수 있습니다.

Expand
URI설명

cql:localhost/keyspace

테스트용 단일 호스트, 기본 포트

cql:host1,host2/keyspace

멀티 호스트, 기본 포트

cql:host1,host2:9042/keyspace

다중 호스트, 사용자 정의 포트

cql:host1,host2

기본 포트 및 키 공간

cql:bean:sessionRef

제공된 세션 참조

cql:bean:clusterRef/keyspace

제공된 클러스터 참조

Cassandra 연결(SSL 옵션, 풀링 옵션, 로드 밸런싱 정책, 재시도 정책, reconnection policy…​을 미세 조정)하려면 고유한 클러스터 인스턴스를 생성하고 Camel 엔드포인트에 제공합니다.

72.2. Cassandra 옵션

Cassandra CQL 구성 요소에는 옵션이 없습니다.

Cassandra CQL 엔드포인트는 URI 구문을 사용하여 구성됩니다.

cql:beanRef:hosts:port/keyspace

다음 경로 및 쿼리 매개변수를 사용합니다.

72.2.1. 경로 매개 변수 (4 매개변수):

Expand
이름설명기본값유형

beanRef

bean:id를 사용하여 beanRef가 정의되어 있습니다.

 

문자열

호스트

호스트 이름(s) cassansdra 서버. 여러 호스트는 쉼표로 구분할 수 있습니다.

 

문자열

port

cassansdra 서버의 포트 번호

 

정수

keyspace

사용할 키 공간

 

문자열

72.2.2. 쿼리 매개변수(29 매개변수):

Expand
이름설명기본값유형

클러스터 (공용)

클러스터 인스턴스를 사용하려면 (일반적으로 이 옵션을 사용하지 않습니다)

 

Cluster

clustername (일반)

클러스터 이름

 

문자열

consistencyLevel (일반)

사용할 일관성 수준

 

ConsistencyLevel

C QL (일반)

실행할 CQL 쿼리입니다. CamelCqlQuery 키를 사용하여 메시지 헤더를 재정의할 수 있습니다.

 

문자열

loadBalancingPolicy (일반)

특정 LoadBalancingPolicy를 사용하려면

 

문자열

암호 (공용)

세션 인증의 암호

 

문자열

prepareStatements (일반)

PreparedStatements 또는 Regular Statements 사용 여부

true

boolean

resultSetConversionStrategy (common)

ResultSet을 메시지 본문 ALL, LIMIT_10, LIMIT_100…​로 변환하는 사용자 정의 클래스를 사용하기 위해

 

문자열

session (common)

세션 인스턴스를 사용하려면 (일반적으로 이 옵션을 사용하지 않습니다.)

 

session

사용자 이름 (공용)

세션 인증의 사용자 이름

 

문자열

bridgeErrorHandler (consumer)

소비자를 Camel 라우팅 오류 처리기에 브리징할 수 있습니다. 이는 소비자가 들어오는 메시지를 선택하는 동안 예외가 발생한 것을 의미하며, 이제 메시지로 처리되어 라우팅 오류 처리기에 의해 처리됩니다. 기본적으로 소비자는 org.apache.camel.spi.ExceptionHandler를 사용하여 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

false

boolean

sendEmptyMessageWhenIdle (consumer)

폴링 소비자가 파일을 폴링하지 않은 경우 이 옵션을 활성화하여 빈 메시지( 본문 없음)를 대신 보낼 수 있습니다.

false

boolean

예외 처리기 (consumer)

소비자가 사용자 지정 ExceptionHandler를 사용하도록 하려면 다음을 수행합니다. bridgeErrorHandler 옵션이 활성화되어 있는지 확인한 후 이 옵션이 사용되지 않습니다. 기본적으로 소비자는 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

 

ExceptionHandler

exchangePattern (consumer)

소비자가 교환을 생성할 때 교환 패턴을 설정합니다.

 

ExchangePattern

pollStrategy (consumer)

플러그형 org.apache.camel.PollingConsumerPollingStrategy를 사용하면 Camel에서 Exchange를 생성하고 라우팅하기 전에 폴링 작업 중에 일반적으로 발생한 오류 처리를 제어하는 사용자 정의 구현을 제공할 수 있습니다.

 

PollingConsumerPoll Strategy

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

backoffErrorThreshold (scheduler)

백오프Multipler를 시작하기 전에 발생해야 하는 후속 오류 폴링(일부 오류 발생) 수입니다.

 

int

backoffIdleThreshold (scheduler)

백오프Multipler를 시작하기 전에 발생해야 하는 후속 유휴 폴링 수입니다.

 

int

backoffMultiplier (scheduler)

예약된 폴링 소비자 백오프가 연속된 여러 개의 유휴/errors가 있는 경우 해당 행에 사용할 수 있습니다. multiplier는 다음 실제 시도가 다시 발생하기 전에 건너뛸 폴링 수입니다. 이 옵션을 사용하는 경우 backoffIdleThreshold 및/또는 backoffErrorThreshold도 구성해야 합니다.

 

int

지연 (scheduler)

다음 폴링보다 밀리초입니다. 60초(60초), 5m30초(5분 및 30초) 및 1h(1시간)와 같은 단위를 사용하여 시간 값을 지정할 수도 있습니다.

500

long

greedy (scheduler)

greedy가 활성화된 경우 ScheduledPollConsumer는 이전 실행이 1개 이상의 메시지를 폴링하면 즉시 다시 실행됩니다.

false

boolean

initialDelay (scheduler)

첫 번째 폴링이 시작되기 전까지의 밀리초입니다. 60초(60초), 5m30초(5분 및 30초) 및 1h(1시간)와 같은 단위를 사용하여 시간 값을 지정할 수도 있습니다.

1000

long

runLoggingLevel (scheduler)

소비자는 폴링할 때 시작/완료 로그 행을 기록합니다. 이 옵션을 사용하면 로깅 수준을 구성할 수 있습니다.

TRACE

LoggingLevel

scheduledExecutorService (scheduler)

소비자에 사용할 사용자 지정/공유 스레드 풀을 구성할 수 있습니다. 기본적으로 각 소비자는 자체 스레드 스레드 풀이 있습니다.

 

ScheduledExecutor Service

스케줄러 (scheduler)

camel-spring 또는 camel-quartz2 구성 요소에서 cron 스케줄러를 사용하려면

none

ScheduledPollConsumer Scheduler

스케줄러 속성 (scheduler)

사용자 지정 스케줄러 또는 Quartz2, Spring 기반 스케줄러를 사용할 때 추가 속성을 구성하려면 다음을 수행합니다.

 

map

StartScheduler (scheduler)

스케줄러가 자동으로 시작되어야 하는지 여부입니다.

true

boolean

timeUnit (scheduler)

initialDelay 및 지연 옵션의 시간 단위입니다.

밀리초

TimeUnit

UseFixedDelay (scheduler)

고정 지연 또는 고정 속도가 사용되는 경우 제어합니다. 자세한 내용은 JDK의 ScheduledExecutorService를 참조하십시오.

true

boolean

72.3. messages

72.3.1. 들어오는 메시지

Camel Cassandra 엔드포인트에서는 CQL 문에 쿼리 매개 변수로 바인딩되는 간단한 오브젝트(오브젝트 또는 Object [] 또는 Collection<Object>)가 많이 필요합니다. 메시지 본문이 null이거나 비어 있는 경우 바인딩 매개 변수 없이 CQL 쿼리가 실행됩니다.

headers:

  • CamelCqlQuery (선택 사항, 문자열 또는 정규식 ): CQL 쿼리는 일반 문자열로 쿼리되거나 QueryBuilder 를 사용하여 빌드됩니다.

72.3.2. 발신 메시지

Camel Cassandra 엔드포인트는 resultSetConversionStrategy 에 따라 하나 이상의 Cassandra 행 오브젝트를 생성합니다.

 

  • list<Row > if resultSetSetConversionStrategy ALL 또는 LIMIT_[0-9]+
  • resultSetConversionStrategyONE인 경우 single' Row'
  • 그 외에는, resultSetConversionStrategyResultSetConversionStrategy의 사용자 지정 구현인 경우

72.4. 리포지토리

Cassandra는 멱등 및 집계 EIP에 대한 메시지 키 또는 메시지를 저장하는 데 사용할 수 있습니다.

Cassandra는 아직 사용 사례를 대기열에 넣는 데 가장 적합한 도구가 아닐 수 있으며, 데이터 세트와 같은 Cassandra 안티 패턴 및 대기열 을 읽는 데 사용할 수 있습니다. 이러한 테이블에 대해 LeveledCompaction과 작은 GC 유예 설정을 사용하여 림핑된 행을 신속하게 제거할 수 있도록 하는 것이 좋습니다.

72.5. 멱등 리포지토리

NamedCassandraIdementRepository 은 다음과 같은 Cassandra 테이블에 메시지 키를 저장합니다.

CAMEL_IDEMPOTENT.cql

CREATE TABLE CAMEL_IDEMPOTENT (
  NAME varchar,   -- Repository name
  KEY varchar,    -- Message key
  PRIMARY KEY (NAME, KEY)
) WITH compaction = {'class':'LeveledCompactionStrategy'}
  AND gc_grace_seconds = 86400;

이 리포지토리 구현에서는 경량 트랜잭션(Compare and Set이라고도 함)을 사용하며 Cassandra 2.0.7 이상이 필요합니다.

또는 CassandraIdempotentRepository 에는 NAME 열이 없으며 다른 데이터 모델을 사용하도록 확장할 수 있습니다.

Expand
옵션기본값설명

테이블

CAMEL_IDEMPOTENT

테이블 이름

pkColumns

이름, '키'

기본 키 열

name

 

리포지토리 이름, NAME 열에 사용된 값

ttl

 

자주하는 질문

writeConsistencyLevel

 

ANY,ONE,TWO, QUORUM ,LOCAL_QUORUM 키를 삽입/삭제하는 데 사용되는 일관성 수준.

readConsistencyLevel

 

ONE,TWO, QUORUM ,LOCAL_QUORUM 키를 읽고 확인하는 데 사용되는 일관성 수준.

72.6. 집계 리포지터리

NamedCassandraAggregationRepository 은 다음과 같은 Cassandra 테이블의 키와 상관 관계가 있는 교환 기능을 저장합니다.

CAMEL_AGGREGATION.cql

CREATE TABLE CAMEL_AGGREGATION (
  NAME varchar,        -- Repository name
  KEY varchar,         -- Correlation id
  EXCHANGE_ID varchar, -- Exchange id
  EXCHANGE blob,       -- Serialized exchange
  PRIMARY KEY (NAME, KEY)
) WITH compaction = {'class':'LeveledCompactionStrategy'}
  AND gc_grace_seconds = 86400;

또는 CassandraAggregationRepository 에는 NAME 열이 없으며 다른 데이터 모델을 사용하도록 확장할 수 있습니다.

Expand
옵션기본값설명

테이블

CAMEL_AGGREGATION

테이블 이름

pkColumns

NAME,KEY

기본 키 열

exchangeIdColumn

EXCHANGE_ID

교환 Id 열

exchangeColumn

EXCHANGE

콘텐츠 열 교환

name

 

리포지토리 이름, NAME 열에 사용된 값

ttl

 

자주 묻는 질문

writeConsistencyLevel

 

교환 삽입/삭제에 사용되는 일관성 수준: ANY,ONE,TWO,QUORUM,LOCAL_QUORUM,"

readConsistencyLevel

 

Exchange 읽기/확인에 사용되는 일관성 수준: one,TWO,QUORUM,LOCAL_QUORUM,"

73장. crypto (JCE) 구성 요소

Camel 버전 2.3에서 사용 가능

Camel 암호화 끝점과 Java의 Cryptographic extension을 사용하면 Exchange용 디지털 서명을 쉽게 만들 수 있습니다. Camel은 교환 워크플로의 한 부분에서 교환용 서명을 만든 다음 워크플로의 뒷부분에서 서명을 확인하는 데 사용할 수 있는 유연한 엔드포인트 쌍을 제공합니다.

Maven 사용자는 이 구성 요소를 위해 다음 종속성을 pom.xml 에 추가해야 합니다.

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-crypto</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>

73.1. 소개

디지털 서명은 Asymmetric Cryptographic 기술을 사용하여 메시지에 서명합니다. (very) 높은 수준에서 알고리즘은 하나의 키로 암호화된 데이터를 다른 키로만 해독할 수 있는 특수 속성과 함께 무료 키 쌍을 사용합니다. 하나는 개인 키가 밀접하게 보호되고 다른 공개 키는 서명된 메시지를 확인하는 데 관심이 있는 모든 사용자에게 메시지 서명'에 사용됩니다. 메시지는 개인 키를 사용하여 메시지의 다이제스트를 암호화하여 서명합니다. 이 암호화된 다이제스트는 메시지와 함께 전송됩니다. 다른 측면에서 확인자는 메시지 다이제스트를 다시 계산하고 공개 키를 사용하여 서명에서 다이제스트를 해독합니다. 두 다이제스트가 모두 일치하면 확인기에서 개인 키의 소유자만 알고 있으면 서명을 만들 수 있습니다.

Camel은 Java Cryptographic Extension의 서명 서비스를 사용하여 교환 서명을 생성하는 데 필요한 많은 암호화 상승을 수행합니다. 다음은 Cryptography, 메시지 다이제스트 및 디지털 서명의 메커니즘을 설명하고 JCE와 함께 활용하는 방법을 설명하는 훌륭한 리소스입니다.

  • Bruce Schneier의 Applied Cryptography
  • David Hook에서 Java로 암호화하기
  • 신뢰할 수 있는 Wikipedia Digital_signatures

73.2. URI 형식

언급된 Camel은 서명을 생성하고 확인할 수 있는 암호화 엔드포인트 한 쌍을 제공합니다.

crypto:sign:name[?options]
crypto:verify:name[?options]
  • crypto:sign 은 서명을 생성하고 상수 org.apache.camel.component.crypto.DigitalSignatureConstants.SIGNATURE.SIGNATURE .e.에 의해 연결된 헤더에 저장합니다. "CamelDigitalSignature".
  • crypto:verify 는 이 헤더의 내용을 읽고 확인 계산을 수행합니다.

올바르게 작동하기 위해 서명 및 확인 프로세스에서는 PrivateKey 를 필요로 하고 PublicKey (또는 하나를 포함하는 인증서 )를 확인해야 합니다. JCE를 사용하면 이러한 키 쌍을 생성하는 것은 매우 간단하지만 일반적으로 KeyStore를 사용하여 키를 저장하고 공유하는 것이 가장 안전합니다. DSL은 키가 제공되는 방법에 대해 매우 유연하고 여러 메커니즘을 제공합니다.

참고: crypto:sign 엔드포인트는 일반적으로 한 경로에 정의되고 무료 crypto:verify 는 다른 예제에서 단순화하기 위해 다른 경로로 정의됩니다. 서명과 검증 둘 다 동일하게 구성되어야 한다고 말하지 않습니다.

73.3. 옵션

Crypto (JCE) 구성 요소는 아래 나열된 두 가지 옵션을 지원합니다.

Expand
이름설명기본값유형

구성 (고급)

공유 DigitalSignatureConfiguration을 구성으로 사용하려면

 

DigitalSignature 구성

resolveProperty Placeholders (advanced)

구성 요소가 시작 시 자체적으로 속성 자리 표시자를 확인해야 하는지 여부입니다. String 유형의 속성만 속성 자리 표시자를 사용할 수 있습니다.Only properties which are of String type can use property placeholders.

true

boolean

Crypto(JCE) 엔드포인트는 URI 구문을 사용하여 구성됩니다.

crypto:cryptoOperation:name

다음 경로 및 쿼리 매개변수를 사용합니다.

73.3.1. 경로 매개 변수(2 매개변수):

Expand
이름설명기본값유형

cryptoOperation

required: crypto:sign을 작업으로 설정합니다. 예를 들어, crypto:sign은 끝점의 암호 구성표 뒤에 제공된 Crypto 작업을 설정합니다.

 

CryptoOperation

name

필수 이 작업의 논리 이름입니다.

 

문자열

73.3.2. 쿼리 매개변수(19 매개변수):

Expand
이름설명기본값유형

알고리즘 (producer)

서명자에게 사용해야 하는 알고리즘의 JCE 이름을 설정합니다.

SHA1WithDSA

문자열

별칭 (producer)

KeyStore에서 키에 대해 쿼리하는 데 사용되는 별칭을 설정하고 java.security.cert.Certificate Certificates를 링크하여 교환 서명 및 검증에 사용됩니다. 이 값은 메시지 헤더 링크 org.apache.camel.component.crypto.DigitalSignatureConstantsKEYSTORE_ALIAS를 통해 런타임 시 제공될 수 있습니다.

 

문자열

certificateName (producer)

레지스트리에 둘 수 있는 PrivateKey의 참조 이름을 설정합니다.

 

문자열

키 저장소 (producer)

교환 서명 및 확인에 사용할 키 및 Certficates를 포함할 수 있는 KeyStore를 설정합니다. KeyStore는 일반적으로 경로 정의에 제공된 별칭 또는 메시지 헤더 CamelSignatureKeyStoreAlias를 통해 동적으로 사용됩니다. 별칭을 제공하지 않고 키 저장소에 하나의 항목만 있는 경우 이 단일 항목이 사용됩니다.

 

KeyStore

keystoreName (producer)

레지스트리에 둘 수 있는 Keystore의 참조 이름을 설정합니다.

 

문자열

privateKey (producer)

교환에 서명하는 데 사용해야 하는 PrivateKey 설정

 

PrivateKey

privateKeyName (producer)

레지스트리에 둘 수 있는 PrivateKey의 참조 이름을 설정합니다.

 

문자열

공급자 (producer)

구성된 Signature 알고리즘을 제공하는 보안 공급자의 ID를 설정합니다.

 

문자열

publicKeyName (producer)

컨텍스트가 변경될 때 해결되어야 하는 참조

 

문자열

secureRandomName (producer)

레지스트리에서 처리할 수 있는 SecureRandom의 참조 이름을 설정합니다.

 

문자열

signatureHeaderName (producer)

base64로 인코딩된 서명을 저장하는 데 사용해야 하는 메시지 헤더의 이름을 설정합니다. 기본값은 'CamelDigitalSignature'입니다.

 

문자열

bufferSize (advanced)

Exchange 페이로드 데이터에서 읽는 데 사용되는 버퍼의 크기를 설정합니다.Set the size of the buffer used to read in the Exchange payload data.

2048

정수

인증서 (고급)

페이로드에 따라 교환에서 서명을 확인하는 데 사용해야 하는 인증서를 설정합니다.

 

certificate

clearHeaders (advanced)

서명 및 검증 후 서명 특정 헤더가 지워질지 여부를 결정합니다. 기본값은 true로, 설정되지 않은 경우 키 및 암호와 같은 중요한 개인 정보로 인해 불이익을 일으킬 수 있습니다.

true

boolean

keyStoreParameters (advanced)

지정된 KeyStores에 따라 서명 및 확인에 사용할 키와 Certficates를 포함할 수 있는 KeyStore를 설정합니다. KeyStore는 일반적으로 경로 정의에 제공된 별칭 또는 메시지 헤더 CamelSignatureKeyStoreAlias를 통해 동적으로 사용됩니다. 별칭을 제공하지 않고 키 저장소에 하나의 항목만 있는 경우 이 단일 항목이 사용됩니다.

 

KeyStoreParameters

publickey (advanced)

교환에서 서명을 확인하는 데 사용해야 하는 PublicKey를 설정합니다.

 

PublicKey

secureRandom (advanced)

서명 서비스를 초기화하는 데 사용되는 SecureRandom 설정

 

SecureRandom

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

암호 (보안)

KeyStore에서 별칭이 지정된 PrivateKey에 액세스하는 데 사용되는 암호를 설정합니다.

 

문자열

73.4. 사용

73.4.1. 원시 키

교환에 서명하고 확인하는 가장 기본적인 방법은 다음과 같이 KeyPair를 사용하는 것입니다.

키에 대한 참조를 사용하여 Spring XML Extensions 에서도 동일한 작업을 수행할 수 있습니다.

73.4.2. 키 저장소 및 별칭.

JCE는 개인 키와 인증서 쌍으로 구성된 주택에 매우 다채로운 키 저장소 개념을 제공하여 암호화되고 암호로 보호됩니다. 검색 API에 별칭을 적용하여 검색할 수 있습니다. 키와 인증서를 키 저장소로 가져올 수 있는 여러 가지 방법이 있습니다. 대부분의 경우 외부 'keytool' 애플리케이션에서 이 작업을 수행합니다. 이는 keytool을 사용하여 자체 서명된 인증서 및 개인 키가 있는 KeyStore를 생성하는 좋은 예입니다.

이 예제에서는 키가 있고 'bob'로 별칭이 있는 키 저장소를 사용합니다. 키 저장소의 암호 및 키는 'letmein'입니다.

다음은 Fluent 빌더를 통해 Keystore를 사용하는 방법을 보여줍니다. 또한 키 저장소를 로드하고 초기화하는 방법도 보여줍니다.

Spring a ref는 실제 키 저장소 인스턴스를 조회하는 데 사용됩니다.

73.4.3. JCE 공급자 및 알고리즘 변경

서명 알고리즘 또는 보안 공급자를 변경하는 것은 이름을 지정하는 간단한 문제입니다. 선택한 알고리즘과 호환되는 키도 사용해야 합니다.

또는

73.4.4. 서명 메시지 헤더 변경

서명을 저장하는 데 사용되는 메시지 헤더를 변경하는 것이 바람직할 수 있습니다. 다음과 같이 경로 정의에 다른 헤더 이름을 지정할 수 있습니다.

또는

73.4.5. 버퍼 크기 변경

예를 들어, buffer…​의 크기를 업데이트해야 합니다.

또는

73.4.6. 키를 동적으로 제공합니다.

Recipient 목록 또는 유사한 EIP를 사용하는 경우 교환 수신자는 동적으로 다를 수 있습니다. 모든 수신자에게 동일한 키를 사용하는 것은 불가능하거나 바람직하지 않을 수 있습니다. 변경 내용에 따라 서명 키를 동적으로 지정할 수 있는 것이 유용합니다. 그런 다음 교환은 서명하기 전에 대상 수신자의 키로 동적으로 보강될 수 있습니다. 서명 메커니즘을 용이하게 하기 위해 아래의 메시지 헤더를 통해 키를 동적으로 제공할 수 있습니다.

  • Exchange.SIGNATURE_PRIVATE_KEY, "CamelSignaturePrivateKey"
  • Exchange.SIGNATURE_PUBLIC_KEY_OR_CERT, "CamelSignaturePublicKeyOrCert"

또는

더 나은 방법은 키 저장소 별칭을 동적으로 제공하는 것입니다. 다시, 별칭은 메시지 헤더에 제공될 수 있습니다

  • Exchange.KEYSTORE_ALIAS, "CamelSignatureKeyStoreAlias"

또는

헤더는 다음과 같이 설정됩니다.

Exchange unsigned = getMandatoryEndpoint("direct:alias-sign").createExchange();
unsigned.getIn().setBody(payload);
unsigned.getIn().setHeader(DigitalSignatureConstants.KEYSTORE_ALIAS, "bob");
unsigned.getIn().setHeader(DigitalSignatureConstants.KEYSTORE_PASSWORD, "letmein".toCharArray());
template.send("direct:alias-sign", unsigned);
Exchange signed = getMandatoryEndpoint("direct:alias-sign").createExchange();
signed.getIn().copyFrom(unsigned.getOut());
signed.getIn().setHeader(KEYSTORE_ALIAS, "bob");
template.send("direct:alias-verify", signed);

73.5. 예를 들면 다음과 같습니다.

  • Camel 구성
  • 구성 요소
  • 끝점
  • 시작하기

74장. crypto CMS 구성 요소

Camel 버전 2.20에서 사용 가능

CMS(Cryptographic Message Syntax) 는 메시지에 서명 및 암호화하기 위한 잘 설정된 표준입니다. Apache Crypto CMS 구성 요소는 이 표준의 다음 부분을 지원합니다. * 컨텐츠 유형 "Enveloped Data"와 키 전송(symmetric key), * Content Type "Signed Data"를 사용합니다. CMS Enveloped Data 인스턴스를 생성하고, CMS Enveloped Data 인스턴스를 해독하고, CMS Signed Data 인스턴스를 생성하고, CMS Signed Data 인스턴스를 검증할 수 있습니다.

구성 요소는 Bouncy Castle 라이브러리 bcprov-jdk15on 및 bcpkix-jdk15on을 사용합니다.

Maven 사용자는 이 구성 요소를 위해 다음 종속성을 pom.xml 에 추가해야 합니다.

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-crypto-cms</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>

이 구성 요소의 끝점을 호출하기 전에 애플리케이션에 Bouncy Castle 보안 공급자를 등록하는 것이 좋습니다.

Security.addProvider(new BouncyCastleProvider());

Bouncy Castle 보안 공급자가 등록되지 않은 경우 Crypto CMS 구성 요소는 공급자를 등록합니다.

74.1. 옵션

Crypto CMS 구성 요소는 아래에 나열된 3 가지 옵션을 지원합니다.

Expand
이름설명기본값유형

signedDataVerifier 구성 (advanced)

확인 작업에 대한 uri 매개 변수를 결정하는 공유 SignedDataVerifierConfiguration을 구성하려면 다음을 수행합니다.

 

SignedDataVerifier 구성

EnvvedDataDecryptor 구성 (advanced)

암호 해독 작업에 대한 uri 매개 변수를 결정하는 공유 EnvelopedDataDecryptorConfiguration을 구성하려면 다음을 수행합니다.

 

EnvelopedDataDecryptor 구성

resolveProperty Placeholders (advanced)

구성 요소가 시작 시 자체적으로 속성 자리 표시자를 확인해야 하는지 여부입니다. String 유형의 속성만 속성 자리 표시자를 사용할 수 있습니다.Only properties which are of String type can use property placeholders.

true

boolean

Crypto CMS 끝점은 URI 구문을 사용하여 구성됩니다.

crypto-cms:cryptoOperation:name

다음 경로 및 쿼리 매개변수를 사용합니다.

74.1.1. 경로 매개 변수(2 매개변수):

Expand
이름설명기본값유형

cryptoOperation

required: crypto-cms:sign을 작업으로 설정합니다. 예를 들어, crypto-cms:sign의 암호 구성표 뒤에 제공된 Crypto 작업을 설정합니다. 가능한 값: 서명, 확인, 암호화 또는 암호 해독.

 

CryptoOperation

name

필수 URI의 이름 부분은 camel 컨텍스트 내에서 서로 다른 서명자/verifier/encrypt 또는 끝점을 구분하도록 사용자에 의해 선택할 수 있습니다.

 

문자열

74.1.2. 쿼리 매개변수(15 매개변수):

Expand
이름설명기본값유형

키 저장소 (공용)

서명자 개인 키, 확인자 공개 키, 공개 키 암호화, 조작에 따라 개인 키 해독 또는 개인 키가 포함된 키 저장소입니다. 이 매개변수 또는 매개변수 'keyStoreParameters'를 사용합니다.

 

KeyStore

keyStoreParameters (common)

서명자 개인 키, 확인자 공개 키, 공개 키 암호화, 조작에 따라 개인 키 암호 해독이 포함된 키 저장소입니다. 이 매개변수 또는 매개변수 'keystore'를 사용합니다.

 

KeyStoreParameters

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

암호 (암호)

개인 키의 암호를 설정합니다. 키 저장소의 모든 개인 키의 암호가 동일한 것으로 가정합니다. 설정하지 않으면 KeyStoreParameters에 제공된 키 저장소 암호가 개인 키의 암호라고 가정합니다.

 

char[]

fromBase64 (decrypt_verify)

true인 경우 CMS 메시지는 base 64로 인코딩되며 처리 중에 디코딩해야 합니다. 기본값은 false입니다.

false

부울

contentEncryptionAlgorithm (encrypt)

암호화 알고리즘 (예: DESede/CBC/PKCS5Padding) 가능한 값: DESede/CBC/PKCS5Padding, AES/CBC/PKCS5Padding, Camellia/CBC/PKCS5Padding, CAST5/CBC/PKCS5Padding.

 

문자열

originatorInformation Provider (encrypt)

originator 정보에 대한 공급자입니다. https://tools.ietf.org/html/rfc5652section-6.1 에서 참조하십시오. 기본값은 null입니다.

 

OriginatorInformation 공급자

수신자 ( encrypt)

수신자 정보: org.apache.camel.component.crypto.cms.api.TransRecipientInfo 인터페이스를 구현하는 빈에 대한 참조입니다.

 

list

secretKeyLength (encrypt)

콘텐츠 암호화에 사용되는 비밀 대칭 키의 키 길이입니다. 지정된 콘텐츠 암호화 알고리즘이 다른 크기의 키를 허용하는 경우에만 사용됩니다. contentEncryptionAlgorithm=AES/CBC/PKCS5Padding or Camellia/PKCS5Padding then 128; contentEncryptionAlgorithm=DESede/CBC/PKCS5Padding then 192, 128; 강력한 암호화가 활성화된 경우 AES/CBC/PKCS5Padding 및 Camellia/CBC/PKCS5Padding의 경우 키 길이 192 및 256을 사용할 수 있습니다.

 

int

보호되지 않은Attributes GeneratorProvider (encrypt)

보호되지 않은 특성에 대한 생성기의 공급자입니다. 기본값은 null이며, 보호되지 않은 특성이 Enveloped Data 개체에 추가되지 않음을 의미합니다. https://tools.ietf.org/html/rfc5652section-6.1 에서 참조하십시오.

 

AttributesGenerator 공급자

toBase64 (encrypt_sign)

서명된 데이터 또는 Enveloped Data 인스턴스가 64로 인코딩되어야 하는지 여부를 나타냅니다. 기본값은 false입니다.

false

부울

includeContent (sign)

서명된 콘텐츠를 서명한 데이터 인스턴스에 포함해야 하는지 여부를 나타냅니다. false인 경우 CamelCryptoCmsSignedData 헤더에 분리된 데이터 인스턴스가 생성됩니다.

true

부울

서명 자(sign)

서명자 정보: org.apache.camel.component.crypto.cms.api.SignerInfo를 구현하는 빈에 대한 참조

 

list

signedDataHeaderBase64 (verify)

CamelCryptoCmsSignedData 헤더의 값이 base64 인코딩인지 여부를 나타냅니다. 기본값은 false입니다. 분리된 서명에만 관련이 있습니다. 분리된 서명 사례에서 헤더에는 Signed Data 오브젝트가 포함됩니다.

false

부울

verifySignaturesOfAll Signers (verify)

true인 경우 Signed Data 개체에 포함된 모든 서명자의 서명이 확인됩니다. false인 경우 서명자 정보가 지정된 인증서 중 하나와 일치하는 하나의 서명만 확인합니다. 기본값은 true입니다.

true

부울

74.2. 봉투 데이터

crypto-cms:encypt 엔드포인트는 일반적으로 하나의 경로에 정의되고 다른 경로에서는 보완적인 crypto-cms:decrypt 가 정의되어 있지만 다른 예제에서는 간소화할 수 있습니다.

다음 예제에서는 Enveloped Data 메시지를 만드는 방법과 Enveloped Data 메시지를 해독하는 방법을 보여줍니다.

Java DSL의 기본 예

import org.apache.camel.util.jsse.KeyStoreParameters;
import org.apache.camel.component.crypto.cms.crypt.DefaultKeyTransRecipientInfo;
...
KeyStoreParameters keystore  = new KeyStoreParameters();
keystore.setType("JCEKS");
keystore.setResource("keystore/keystore.jceks);
keystore.setPassword("some_password"); // this password will also be used for accessing the private key if not specified in the crypto-cms:decrypt endpoint

DefaultKeyTransRecipientInfo recipient1 = new DefaultKeyTransRecipientInfo();
recipient1.setCertificateAlias("rsa"); // alias of the public key used for the encryption
recipient1.setKeyStoreParameters(keystore);

simpleReg.put("keyStoreParameters", keystore); // register keystore in the registry
simpleReg.put("recipient1", recipient1); // register recipient info in the registry

from("direct:start")
    .to("crypto-cms:encrypt://testencrpyt?toBase64=true&recipient=#recipient1&contentEncryptionAlgorithm=DESede/CBC/PKCS5Padding&secretKeyLength=128")
    .to("crypto-cms:decrypt://testdecrypt?fromBase64=true&keyStoreParameters=#keyStoreParameters")
    .to("mock:result");

Spring XML의 기본 예

   <keyStoreParameters xmlns="http://camel.apache.org/schema/spring"
        id="keyStoreParameters1" resource="./keystore/keystore.jceks"
        password="some_password" type="JCEKS" />
    <bean id="recipient1"
        class="org.apache.camel.component.crypto.cms.crypt.DefaultKeyTransRecipientInfo">
        <property name="keyStoreParameters" ref="keyStoreParameters1" />
        <property name="certificateAlias" value="rsa" />
    </bean>
...
    <route>
        <from uri="direct:start" />
        <to uri="crypto-cms:encrypt://testencrpyt?toBase64=true&amp;recipient=#recipient1&amp;contentEncryptionAlgorithm=DESede/CBC/PKCS5Padding&amp;secretKeyLength=128" />
        <to uri="crypto-cms:decrypt://testdecrypt?fromBase64=true&amp;keyStoreParameters=#keyStoreParameters1" />
         <to uri="mock:result" />
    </route>

Java DSL의 두 가지 인식

import org.apache.camel.util.jsse.KeyStoreParameters;
import org.apache.camel.component.crypto.cms.crypt.DefaultKeyTransRecipientInfo;
...
KeyStoreParameters keystore  = new KeyStoreParameters();
keystore.setType("JCEKS");
keystore.setResource("keystore/keystore.jceks);
keystore.setPassword("some_password"); // this password will also be used for accessing the private key if not specified in the crypto-cms:decrypt endpoint

DefaultKeyTransRecipientInfo recipient1 = new DefaultKeyTransRecipientInfo();
recipient1.setCertificateAlias("rsa"); // alias of the public key used for the encryption
recipient1.setKeyStoreParameters(keystore);

DefaultKeyTransRecipientInfo recipient2 = new DefaultKeyTransRecipientInfo();
recipient2.setCertificateAlias("dsa");
recipient2.setKeyStoreParameters(keystore);

simpleReg.put("keyStoreParameters", keystore); // register keystore in the registry
simpleReg.put("recipient1", recipient1); // register recipient info in the registry

from("direct:start")
    .to("crypto-cms:encrypt://testencrpyt?toBase64=true&recipient=#recipient1&recipient=#recipient2&contentEncryptionAlgorithm=DESede/CBC/PKCS5Padding&secretKeyLength=128")
    //the decryptor will automatically choose one of the two private keys depending which one is in the decryptor keystore
    .to("crypto-cms:decrypt://testdecrypt?fromBase64=true&keyStoreParameters=#keyStoreParameters")
    .to("mock:result");

Spring XML의 두 가지 수정

   <keyStoreParameters xmlns="http://camel.apache.org/schema/spring"
        id="keyStoreParameters1" resource="./keystore/keystore.jceks"
        password="some_password" type="JCEKS" />
    <bean id="recipient1"
        class="org.apache.camel.component.crypto.cms.crypt.DefaultKeyTransRecipientInfo">
        <property name="keyStoreParameters" ref="keyStoreParameters1" />
        <property name="certificateAlias" value="rsa" />
    </bean>
    <bean id="recipient2"
        class="org.apache.camel.component.crypto.cms.crypt.DefaultKeyTransRecipientInfo">
        <property name="keyStoreParameters" ref="keyStoreParameters1" />
        <property name="certificateAlias" value="dsa" />
    </bean>
...
    <route>
        <from uri="direct:start" />
        <to uri="crypto-cms:encrypt://testencrpyt?toBase64=true&amp;recipient=#recipient1&amp;recipient=#recipient2&amp;contentEncryptionAlgorithm=DESede/CBC/PKCS5Padding&amp;secretKeyLength=128" />
        <!-- the decryptor will automatically choose one of the two private keys depending which one is in the decryptor keystore -->
        <to uri="crypto-cms:decrypt://testdecrypt?fromBase64=true&amp;keyStoreParameters=#keyStoreParameters1" />
         <to uri="mock:result" />
    </route>

74.3. 서명된 데이터

crypto-cms:sign 엔드포인트는 일반적으로 하나의 경로에 정의되고 다른 경로에는 무료 crypto-cms:verify 가 정의되어 있지만 예제의 단순성을 위해 서로의 단순성을 제공합니다.

다음 예에서는 Signed Data 메시지를 생성하는 방법과 Signed Data 메시지를 확인하는 방법을 보여줍니다.

Java DSL의 기본 예

import org.apache.camel.util.jsse.KeyStoreParameters;
import org.apache.camel.component.crypto.cms.sig.DefaultSignerInfo;
...
KeyStoreParameters keystore  = new KeyStoreParameters();
keystore.setType("JCEKS");
keystore.setResource("keystore/keystore.jceks);
keystore.setPassword("some_password"); // this password will also be used for accessing the private key if not specified in the signerInfo1 bean

//Signer Information, by default the following signed attributes are included: contentType, signingTime, messageDigest, and cmsAlgorithmProtect; by default no unsigned attribute is included.
// If you want to add your own signed attributes or unsigned attributes, see methods DefaultSignerInfo.setSignedAttributeGenerator and DefaultSignerInfo.setUnsignedAttributeGenerator.
DefaultSignerInfo signerInfo1 = new DefaultSignerInfo();
signerInfo1.setIncludeCertificates(true); // if set to true then the certificate chain of the private key will be added to the Signed Data object
signerInfo1.setSignatureAlgorithm("SHA256withRSA"); // signature algorithm; attention, the signature algorithm must fit to the signer private key.
signerInfo1.setPrivateKeyAlias("rsa"); // alias of the private key used for the signing
signerInfo1.setPassword("private_key_pw".toCharArray()); // optional parameter, if not set then the password of the KeyStoreParameters will be used for accessing the private key
signerInfo1.setKeyStoreParameters(keystore);

simpleReg.put("keyStoreParameters", keystore); //register keystore in the registry
simpleReg.put("signer1", signerInfo1); //register signer info in the registry

from("direct:start")
    .to("crypto-cms:sign://testsign?signer=#signer1&includeContent=true&toBase64=true")
    .to("crypto-cms:verify://testverify?keyStoreParameters=#keyStoreParameters&fromBase64=true"")
    .to("mock:result");

Spring XML의 기본 예

   <keyStoreParameters xmlns="http://camel.apache.org/schema/spring"
        id="keyStoreParameters1" resource="./keystore/keystore.jceks"
        password="some_password" type="JCEKS" />
    <bean id="signer1"
        class="org.apache.camel.component.crypto.cms.sig.DefaultSignerInfo">
        <property name="keyStoreParameters" ref="keyStoreParameters1" />
        <property name="privateKeyAlias" value="rsa" />
        <property name="signatureAlgorithm" value="SHA256withRSA" />
        <property name="includeCertificates" value="true" />
        <!-- optional parameter 'password', if not set then the password of the KeyStoreParameters will be used for accessing the private key -->
        <property name="password" value="private_key_pw" />
    </bean>
...
    <route>
        <from uri="direct:start" />
        <to uri="crypto-cms:sign://testsign?signer=#signer1&amp;includeContent=true&amp;toBase64=true" />
        <to uri="crypto-cms:verify://testverify?keyStoreParameters=#keyStoreParameters1&amp;fromBase64=true" />
        <to uri="mock:result" />
    </route>

Java DSL에서 두 개의 서명자가 있는 예

import org.apache.camel.util.jsse.KeyStoreParameters;
import org.apache.camel.component.crypto.cms.sig.DefaultSignerInfo;
...
KeyStoreParameters keystore  = new KeyStoreParameters();
keystore.setType("JCEKS");
keystore.setResource("keystore/keystore.jceks);
keystore.setPassword("some_password"); // this password will also be used for accessing the private key if not specified in the signerInfo1 bean

//Signer Information, by default the following signed attributes are included: contentType, signingTime, messageDigest, and cmsAlgorithmProtect; by default no unsigned attribute is included.
// If you want to add your own signed attributes or unsigned attributes, see methods DefaultSignerInfo.setSignedAttributeGenerator and DefaultSignerInfo.setUnsignedAttributeGenerator.
DefaultSignerInfo signerInfo1 = new DefaultSignerInfo();
signerInfo1.setIncludeCertificates(true); // if set to true then the certificate chain of the private key will be added to the Signed Data object
signerInfo1.setSignatureAlgorithm("SHA256withRSA"); // signature algorithm; attention, the signature algorithm must fit to the signer private key.
signerInfo1.setPrivateKeyAlias("rsa"); // alias of the private key used for the signing
signerInfo1.setPassword("private_key_pw".toCharArray()); // optional parameter, if not set then the password of the KeyStoreParameters will be used for accessing the private key
signerInfo1.setKeyStoreParameters(keystore);

DefaultSignerInfo signerInfo2 = new DefaultSignerInfo();
signerInfo2.setIncludeCertificates(true);
signerInfo2.setSignatureAlgorithm("SHA256withDSA");
signerInfo2.setPrivateKeyAlias("dsa");
signerInfo2.setKeyStoreParameters(keystore);


simpleReg.put("keyStoreParameters", keystore); //register keystore in the registry
simpleReg.put("signer1", signerInfo1); //register signer info in the registry
simpleReg.put("signer2", signerInfo2); //register signer info in the registry

from("direct:start")
    .to("crypto-cms:sign://testsign?signer=#signer1&signer=#signer2&includeContent=true")
    .to("crypto-cms:verify://testverify?keyStoreParameters=#keyStoreParameters")
    .to("mock:result");

Spring XML에서 두 개의 서명자가 있는 예

   <keyStoreParameters xmlns="http://camel.apache.org/schema/spring"
        id="keyStoreParameters1" resource="./keystore/keystore.jceks"
        password="some_password" type="JCEKS" />
    <bean id="signer1"
        class="org.apache.camel.component.crypto.cms.sig.DefaultSignerInfo">
        <property name="keyStoreParameters" ref="keyStoreParameters1" />
        <property name="privateKeyAlias" value="rsa" />
        <property name="signatureAlgorithm" value="SHA256withRSA" />
        <property name="includeCertificates" value="true" />
        <!-- optional parameter 'password', if not set then the password of the KeyStoreParameters will be used for accessing the private key -->
        <property name="password" value="private_key_pw" />
    </bean>
    <bean id="signer2"
        class="org.apache.camel.component.crypto.cms.sig.DefaultSignerInfo">
        <property name="keyStoreParameters" ref="keyStoreParameters1" />
        <property name="privateKeyAlias" value="dsa" />
        <property name="signatureAlgorithm" value="SHA256withDSA" />
        <!-- optional parameter 'password', if not set then the password of the KeyStoreParameters will be used for accessing the private key -->
        <property name="password" value="private_key_pw2" />
    </bean>
...
    <route>
        <from uri="direct:start" />
        <to uri="crypto-cms:sign://testsign?signer=#signer1&amp;signer=#signer2&amp;includeContent=true" />
        <to uri="crypto-cms:verify://testverify?keyStoreParameters=#keyStoreParameters1" />
        <to uri="mock:result" />
    </route>

Java DSL의 분리된 서명 예

import org.apache.camel.util.jsse.KeyStoreParameters;
import org.apache.camel.component.crypto.cms.sig.DefaultSignerInfo;
...
KeyStoreParameters keystore  = new KeyStoreParameters();
keystore.setType("JCEKS");
keystore.setResource("keystore/keystore.jceks);
keystore.setPassword("some_password"); // this password will also be used for accessing the private key if not specified in the signerInfo1 bean

//Signer Information, by default the following signed attributes are included: contentType, signingTime, messageDigest, and cmsAlgorithmProtect; by default no unsigned attribute is included.
// If you want to add your own signed attributes or unsigned attributes, see methods DefaultSignerInfo.setSignedAttributeGenerator and DefaultSignerInfo.setUnsignedAttributeGenerator.
DefaultSignerInfo signerInfo1 = new DefaultSignerInfo();
signerInfo1.setIncludeCertificates(true); // if set to true then the certificate chain of the private key will be added to the Signed Data object
signerInfo1.setSignatureAlgorithm("SHA256withRSA"); // signature algorithm; attention, the signature algorithm must fit to the signer private key.
signerInfo1.setPrivateKeyAlias("rsa"); // alias of the private key used for the signing
signerInfo1.setPassword("private_key_pw".toCharArray()); // optional parameter, if not set then the password of the KeyStoreParameters will be used for accessing the private key
signerInfo1.setKeyStoreParameters(keystore);

simpleReg.put("keyStoreParameters", keystore); //register keystore in the registry
simpleReg.put("signer1", signerInfo1); //register signer info in the registry

from("direct:start")
     //with the option includeContent=false the SignedData object without the signed text will be written into the header "CamelCryptoCmsSignedData"
    .to("crypto-cms:sign://testsign?signer=#signer1&includeContent=false&toBase64=true")
    //the verifier reads the Signed Data object form the header CamelCryptoCmsSignedData and assumes that the signed content is in the message body
    .to("crypto-cms:verify://testverify?keyStoreParameters=#keyStoreParameters&signedDataHeaderBase64=true")
    .to("mock:result");

Spring XML의 분리된 서명 예

   <keyStoreParameters xmlns="http://camel.apache.org/schema/spring"
        id="keyStoreParameters1" resource="./keystore/keystore.jceks"
        password="some_password" type="JCEKS" />
    <bean id="signer1"
        class="org.apache.camel.component.crypto.cms.sig.DefaultSignerInfo">
        <property name="keyStoreParameters" ref="keyStoreParameters1" />
        <property name="privateKeyAlias" value="rsa" />
        <property name="signatureAlgorithm" value="SHA256withRSA" />
        <property name="includeCertificates" value="true" />
        <!-- optional parameter 'password', if not set then the password of the KeyStoreParameters will be used for accessing the private key -->
        <property name="password" value="private_key_pw" />
    </bean>
...
    <route>
        <from uri="direct:start" />
        <!-- with the option includeContent=false the SignedData object without the signed text will be written into the header "CamelCryptoCmsSignedData" -->
        <to uri="crypto-cms:sign://testsign?signer=#signer1&amp;includeContent=false&amp;toBase64=true" />
        <!-- the verifier reads the Signed Data object form the header CamelCryptoCmsSignedData and assumes that the signed content is in the message body -->
        <to uri="crypto-cms:verify://testverify?keyStoreParameters=#keyStoreParameters1&amp;signedDataHeaderBase64=true" />
        <to uri="mock:result" />
    </route>

75장. 암호화(Java Cryptographic Extension) DataFormat

Camel 버전 2.3에서 사용 가능

Crypto Data Format은 Java Cryptographic Extension을 Camel에 통합하므로 Camel의 친숙한 marshall 및 unmarshal 형식 메커니즘을 사용하여 메시지의 간단하고 유연한 암호화 및 암호 해독을 수행할 수 있습니다. 마샬링은 cyphertext 및 unmarshalling에 암호화를 의미하여 원래 일반 텍스트로 다시 암호 해독을 의미하는 것으로 가정합니다. 이 데이터 형식은 대칭(공유 키) 암호화 및 decyption만 구현합니다.

75.1. CryptoDataFormat Options

Crypto (Java Cryptographic Extension) 데이터 형식은 아래에 나열된 10 가지 옵션을 지원합니다.

Expand
이름기본값Java Type설명

algorithm

DES/CBC/PKCS5Padding

문자열

사용할 암호화 알고리즘을 나타내는 JCE 알고리즘 이름입니다. 기본적으로 DES/CBC/PKCS5Padding입니다.

cryptoProvider

 

문자열

사용할 JCE 보안 공급자의 이름입니다.

keyRef

 

문자열

사용할 레지스터에서 조회할 시크릿 키를 나타냅니다.

initVectorRef

 

문자열

Cipher를 초기화하는 데 사용할 Initialization 벡터가 포함된 바이트 배열을 나타냅니다.Represents a byte array containing the Initialization Vector that will be used to initialize the Cipher.

algorithmParameterRef

 

문자열

Cipher를 초기화하는 데 사용되는 JCE AlgorithmParameterSpec입니다. 은 지정된 이름을 java.security.spec.AlgorithmParameterSpec 유형으로 사용하여 유형을 조회합니다.

bufferSize

 

정수

서명 프로세스에서 사용되는 버퍼의 크기입니다.

macAlgorithm

HmacSHA1

문자열

Message Authentication 알고리즘을 나타내는 JCE 알고리즘입니다.

shouldAppendHMAC

false

부울

메시지 인증 코드를 계산하고 암호화된 데이터에 추가해야 함을 나타내는 플래그입니다.

inline

false

부울

구성된 IV가 암호화된 데이터 스트림으로 인라인화되어야 함을 나타내는 플래그입니다. 기본값은 false입니다.

contentTypeHeader

false

부울

데이터 형식이 데이터 형식에서 수행할 수 있는 경우 데이터 형식의 유형으로 Content-Type 헤더를 설정해야 하는지 여부입니다. 예를 들어 데이터 형식을 XML로 마샬링하거나, JSon으로 마샬링되는 데이터 형식에 대한 application/json 등이 있습니다.

75.2. 기본 사용

가장 기본적인 것으로 교환기를 암호화/암호화하는데 필요한 것은 공유 비밀 키입니다. 하나 이상의 Crypto 데이터 형식의 인스턴스가 이 키로 구성된 경우 형식을 사용하여 한 경로(또는 하나의 일부)에서 페이로드를 암호화하고 다른 경로에서 해독할 수 있습니다. 예를 들어 다음과 같이 Java DSL을 사용합니다.

KeyGenerator generator = KeyGenerator.getInstance("DES");

CryptoDataFormat cryptoFormat = new CryptoDataFormat("DES", generator.generateKey());

from("direct:basic-encryption")
    .marshal(cryptoFormat)
    .to("mock:encrypted")
    .unmarshal(cryptoFormat)
    .to("mock:unencrypted");

Spring에서 dataformat이 먼저 구성된 다음 경로에서 사용됩니다.

<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
  <dataFormats>
    <crypto id="basic" algorithm="DES" keyRef="desKey" />
  </dataFormats>
    ...
  <route>
    <from uri="direct:basic-encryption" />
    <marshal ref="basic" />
    <to uri="mock:encrypted" />
    <unmarshal ref="basic" />
    <to uri="mock:unencrypted" />
  </route>
</camelContext>

75.3. 암호화 알고리즘 지정

알고리즘을 변경하는 것은 JCE 알고리즘 이름을 제공하는 문제입니다. 알고리즘을 변경하는 경우 호환되는 키를 사용해야 합니다.

KeyGenerator generator = KeyGenerator.getInstance("DES");

CryptoDataFormat cryptoFormat = new CryptoDataFormat("DES", generator.generateKey());
cryptoFormat.setShouldAppendHMAC(true);
cryptoFormat.setMacAlgorithm("HmacMD5");

from("direct:hmac-algorithm")
    .marshal(cryptoFormat)
    .to("mock:encrypted")
    .unmarshal(cryptoFormat)
    .to("mock:unencrypted");

Java 7에서 사용 가능한 알고리즘 목록은 Java Cryptography Architecture Standard Algorithm Name 설명서를 통해 사용할 수 있습니다.

75.4. Initialization 벡터 지정

일부 암호화 알고리즘, 특히 블록 알고리즘에서는 Initialization 벡터로 알려진 데이터의 초기 블록을 구성해야 합니다. JCE에서는 Cipher가 초기화될 때 AlgorithmParameterSpec로 전달됩니다. CryptoDataFormat에서 이러한 벡터를 사용하기 위해 필요한 데이터가 포함된 byte[]로 구성할 수 있습니다.

KeyGenerator generator = KeyGenerator.getInstance("DES");
byte[] initializationVector = new byte[] {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07};

CryptoDataFormat cryptoFormat = new CryptoDataFormat("DES/CBC/PKCS5Padding", generator.generateKey());
cryptoFormat.setInitializationVector(initializationVector);

from("direct:init-vector")
    .marshal(cryptoFormat)
    .to("mock:encrypted")
    .unmarshal(cryptoFormat)
    .to("mock:unencrypted");

또는 Spring을 통해 바이트[]에 대한 참조를 제공합니다.

<crypto id="initvector" algorithm="DES/CBC/PKCS5Padding" keyRef="desKey" initVectorRef="initializationVector" />

암호화 및 암호 해독 단계에서 동일한 벡터가 필요합니다. IV를 비밀로 유지할 필요는 없으므로 DataFormat을 통해 암호화된 데이터로 인라인화되고 나중에 암호 해독 단계에서 읽을 수 있습니다. IV를 인라인으로 설정하려면 /oinline 플래그를 설정합니다.

KeyGenerator generator = KeyGenerator.getInstance("DES");
byte[] initializationVector = new byte[] {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07};
SecretKey key = generator.generateKey();

CryptoDataFormat cryptoFormat = new CryptoDataFormat("DES/CBC/PKCS5Padding", key);
cryptoFormat.setInitializationVector(initializationVector);
cryptoFormat.setShouldInlineInitializationVector(true);
CryptoDataFormat decryptFormat = new CryptoDataFormat("DES/CBC/PKCS5Padding", key);
decryptFormat.setShouldInlineInitializationVector(true);

from("direct:inline")
    .marshal(cryptoFormat)
    .to("mock:encrypted")
    .unmarshal(decryptFormat)
    .to("mock:unencrypted");

또는 봄과 함께.

<crypto id="inline" algorithm="DES/CBC/PKCS5Padding" keyRef="desKey" initVectorRef="initializationVector"
  inline="true" />
<crypto id="inline-decrypt" algorithm="DES/CBC/PKCS5Padding" keyRef="desKey" inline="true" />

Initialization Vector 사용에 대한 자세한 내용은 참조를 참조하십시오.

75.5. 해시된 메시지 인증 코드(HMAC)

CryptoDataFormat을 전송하는 동안 암호화된 데이터에 대한 공격을 방지하려면 구성 가능한 MAC 알고리즘을 기반으로 암호화된 교환 콘텐츠에 대한 메시지 인증 코드를 계산할 수도 있습니다. 계산된 HMAC는 암호화 후 스트림에 추가됩니다. 암호 해독 단계의 스트림과 분리됩니다. 전송 중 아무것도 변경되지 않도록 전송된 버전에 대해 MAC을 다시 계산 및 확인합니다. 메시지 인증 코드에 대한 자세한 내용은 http://en.wikipedia.org/wiki/HMAC을 참조하십시오.

KeyGenerator generator = KeyGenerator.getInstance("DES");

CryptoDataFormat cryptoFormat = new CryptoDataFormat("DES", generator.generateKey());
cryptoFormat.setShouldAppendHMAC(true);

from("direct:hmac")
    .marshal(cryptoFormat)
    .to("mock:encrypted")
    .unmarshal(cryptoFormat)
    .to("mock:unencrypted");

또는 봄과 함께.

<crypto id="hmac" algorithm="DES" keyRef="desKey" shouldAppendHMAC="true" />

기본적으로 HMAC는 HmacSHA1 mac 알고리즘을 사용하여 계산되지만 다른 알고리즘 이름을 제공하여 쉽게 변경할 수 있습니다. 구성된 보안 공급자를 통해 사용 가능한 알고리즘을 확인하는 방법은 여기를 참조하십시오.

KeyGenerator generator = KeyGenerator.getInstance("DES");

CryptoDataFormat cryptoFormat = new CryptoDataFormat("DES", generator.generateKey());
cryptoFormat.setShouldAppendHMAC(true);
cryptoFormat.setMacAlgorithm("HmacMD5");

from("direct:hmac-algorithm")
    .marshal(cryptoFormat)
    .to("mock:encrypted")
    .unmarshal(cryptoFormat)
    .to("mock:unencrypted");

또는 봄과 함께.

<crypto id="hmac-algorithm" algorithm="DES" keyRef="desKey" macAlgorithm="HmacMD5" shouldAppendHMAC="true" />

75.6. 동적으로 키 제공

Recipient 목록 또는 유사한 EIP를 사용하는 경우 교환 수신자는 동적으로 다를 수 있습니다. 모든 수신자에게 동일한 키를 사용하는 것은 불가능하거나 바람직하지 않을 수 있습니다. 교환별로 키를 동적으로 지정할 수 있는 것이 유용합니다. 그런 다음 교환은 데이터 형식에서 처리되기 전에 대상 수신자의 키로 동적으로 보강될 수 있습니다. DataFormat을 사용하면 아래의 메시지 헤더를 통해 키가 동적으로 제공될 수 있습니다.

  • CryptoDataFormat.KEY "CamelCryptoKey"
CryptoDataFormat cryptoFormat = new CryptoDataFormat("DES", null);
/**
 * Note: the header containing the key should be cleared after
 * marshalling to stop it from leaking by accident and
 * potentially being compromised. The processor version below is
 * arguably better as the key is left in the header when you use
 * the DSL leaks the fact that camel encryption was used.
 */
from("direct:key-in-header-encrypt")
    .marshal(cryptoFormat)
    .removeHeader(CryptoDataFormat.KEY)
    .to("mock:encrypted");

from("direct:key-in-header-decrypt").unmarshal(cryptoFormat).process(new Processor() {
    public void process(Exchange exchange) throws Exception {
        exchange.getIn().getHeaders().remove(CryptoDataFormat.KEY);
        exchange.getOut().copyFrom(exchange.getIn());
    }
}).to("mock:unencrypted");

또는 봄과 함께.

<crypto id="nokey" algorithm="DES" />

75.7. 종속 항목

camel 경로에서 Crypto dataformat을 사용하려면 다음 종속성을 pom에 추가해야 합니다.

<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-crypto</artifactId>
  <version>x.x.x</version>
  <!-- use the same version as your Camel core version -->
</dependency>

75.8. 예를 들면 다음과 같습니다.

76장. CSV DataFormat

Camel 버전 1.3에서 사용 가능

CSV 데이터 형식은 Apache Commons CSV 를 사용하여 CSV 페이로드(예: Excel에서 내보낸/가져오기/가져오기 값)를 처리합니다.

76.1. 옵션

CSV dataformat은 아래에 나열된 28개의 옵션을 지원합니다.

Expand
이름기본값Java Type설명

formatRef

 

문자열

사용할 참조 형식은 다른 형식 옵션으로 업데이트됩니다. 기본값은 CSVFormat.DEFAULT입니다.

formatName

 

문자열

사용할 형식의 이름, 기본값은 CSVFormat.DEFAULT입니다.

commentMarkerDisabled

false

부울

참조 형식의 주석 표시기를 비활성화합니다.

commentMarker

 

문자열

참조 형식의 주석 표시를 설정합니다.

구분 기호

 

문자열

사용할 구분 기호를 설정합니다. 기본값은 , (comma)입니다.

escapeDisabled

false

부울

이스케이프 문자를 사용하여 비활성화에 사용

escape

 

문자열

사용할 이스케이프 문자를 설정합니다.

headerDisabled

false

부울

헤더를 비활성화하는 데 를 사용합니다.

header

 

list

CSV 헤더를 구성하려면 다음을 수행합니다.

allowMissingColumnNames

false

부울

누락된 열 이름을 허용할지 여부입니다.

ignoreEmptyLines

false

부울

빈 줄을 무시할지 여부입니다.

ignoreSurroundingSpaces

false

부울

주변 공간을 무시할지 여부

nullStringDisabled

false

부울

null 문자열을 비활성화하는 데 사용됩니다.

nullString

 

문자열

null 문자열을 설정합니다.

quoteDisabled

false

부울

따옴표를 비활성화하는 데 사용됩니다.

quote

 

문자열

기본적으로 인용문을 설정합니다.

recordSeparatorDisabled

 

문자열

레코드 구분 기호 비활성화에 사용

recordSeparator

 

문자열

기본적으로 새 줄 문자(CRLF)인 레코드 구분 기호( new line) 설정

skipHeaderRecord

false

부울

출력에서 헤더 레코드를 건너뛸지 여부

quoteMode

 

문자열

견적 모드를 설정

ignoreHeaderCase

false

부울

헤더 이름에 액세스할 때 대/소문자를 무시할지 여부를 설정합니다.

trim

false

부울

공백과 후행 공백을 정렬할지 여부를 설정합니다.Sets whether or not to trim leading and trailing blanks.

trailingDelimiter

false

부울

후행 구분 기호를 추가할지 여부를 설정합니다.

lazyLoad

false

부울

unmarshalling이 즉시 라인을 읽는 iterator를 만들거나 모든 줄을 하나씩 읽어야 하는지 여부입니다.

useMaps

false

부울

unmarshalling이 목록 대신 행 값에 대한 맵(HashMap)을 생성해야 하는지 여부입니다. 헤더(정의 또는 수집)가 필요합니다.

useOrderedMaps

false

부울

unmarshalling이 목록 대신 행 값에 대해 정렬된 맵(LinkedHashMap)을 생성해야 하는지 여부입니다. 헤더(정의 또는 수집)가 필요합니다.

recordConverterRef

 

문자열

사용할 레지스트리에서 조회하는 사용자 지정 CsvRecordConverter를 나타냅니다.

contentTypeHeader

false

부울

데이터 형식이 데이터 형식에서 수행할 수 있는 경우 데이터 형식의 유형으로 Content-Type 헤더를 설정해야 하는지 여부입니다. 예를 들어 데이터 형식을 XML로 마샬링하거나, JSon으로 마샬링되는 데이터 형식에 대한 application/json 등이 있습니다.

76.2. CSV로 맵 마샬링

구성 요소를 사용하면 Java 맵(또는 맵에서 변환될 수 있는 다른 메시지 유형)을 CSV 페이로드로 마샬링할 수 있습니다.

다음 본문을 고려하십시오.

Map<String, Object> body = new LinkedHashMap<>();
body.put("foo", "abc");
body.put("bar", 123);

이 Java 경로 정의

from("direct:start")
    .marshal().csv()
    .to("mock:result");

또는 이 XML 경로 정의

<route>
    <from uri="direct:start" />
    <marshal>
        <csv />
    </marshal>
    <to uri="mock:result" />
</route>

그런 다음 생산할 것입니다.

abc,123

76.3. CSV 메시지를 Java 목록에 분리

미끄러지는 CSV를 CSV 파일 줄과 함께 Java Listsage로 변환합니다(모든 필드 값과 함께 다른 목록 유지).

예: 이름이 사람, IQ 및 현재 활동이 있는 CSV 파일이 있습니다.

Jack Dalton, 115, mad at Averell
Joe Dalton, 105, calming Joe
William Dalton, 105, keeping Joe from killing Averell
Averell Dalton, 80, playing with Rantanplan
Lucky Luke, 120, capturing the Daltons

이제 CSV 구성 요소를 사용하여 이 파일을 손상되지 않도록 할 수 있습니다.

from("file:src/test/resources/?fileName=daltons.csv&noop=true")
    .unmarshal().csv()
    .to("mock:daltons");

결과 메시지에는 List<List<String>> like…​이 포함 됩니다.The resulting message will contain a List<List<String>& gt; like…​.

List<List<String>> data = (List<List<String>>) exchange.getIn().getBody();
for (List<String> line : data) {
    LOG.debug(String.format("%s has an IQ of %s and is currently %s", line.get(0), line.get(1), line.get(2)));
}

76.4. List을 CSV로 마샬링

Camel 2.1에서 사용 가능

CSV 형식으로 마샬링하려는 여러 데이터 행이 있는 경우 해당 메시지 페이로드를 List<Map<String, Object>> 개체에 저장할 수 있습니다.If you have multiple rows of data you want to be marshalled into CSV format, you can now store the message payload as a List<Map<String, Object >> object where the list contains a Map for each row.

76.5. CSV 파일의 Poller, unmarshaling

들어오는 data…​을 처리할 수 있는 빈이 제공됩니다.

MyCsvHandler.java

// Some comments here
public void doHandleCsvData(List<List<String>> csvData)
{
    // do magic here
}
  1. 귀하의 경로는 다음과 같습니다.
<route>
        <!-- poll every 10 seconds -->
        <from uri="file:///some/path/to/pickup/csvfiles?delete=true&amp;consumer.delay=10000" />
        <unmarshal><csv /></unmarshal>
        <to uri="bean:myCsvHandler?method=doHandleCsvData" />
</route>

76.6. 파이프를 구분 기호로 마샬링

다음 본문을 고려하십시오.

Map<String, Object> body = new LinkedHashMap<>();
body.put("foo", "abc");
body.put("bar", 123);

이 Java 경로 정의

// Camel version < 2.15
CsvDataFormat oldCSV = new CsvDataFormat();
oldCSV.setDelimiter("|");
from("direct:start")
    .marshal(oldCSV)
    .to("mock:result")

// Camel version >= 2.15
from("direct:start")
    .marshal(new CsvDataFormat().setDelimiter(&#39;|&#39;))
    .to("mock:result")

또는 이 XML 경로 정의

<route>
  <from uri="direct:start" />
  <marshal>
    <csv delimiter="|" />
  </marshal>
  <to uri="mock:result" />
</route>

그런 다음 생산할 것입니다.

abc|123

XML 내에서 autogenColumns, configRef 및 strategyRef 속성 사용

Camel 2.9.2 / 2.10에서 사용할 수 있으며 Camel 2.15에서 삭제

CSV 데이터 형식을 사용자 지정하여 자체 CSVConfig 및/또는 CSVStrategy 를 사용할 수 있습니다. autogenColumns 옵션의 기본값은 true입니다. 다음 예제에서는 이 사용자 지정을 보여줍니다.

<route>
  <from uri="direct:start" />
  <marshal>
    <!-- make use of a strategy other than the default one which is 'org.apache.commons.csv.CSVStrategy.DEFAULT_STRATEGY' -->
    <csv autogenColumns="false" delimiter="|" configRef="csvConfig" strategyRef="excelStrategy" />
  </marshal>
  <convertBodyTo type="java.lang.String" />
  <to uri="mock:result" />
</route>

<bean id="csvConfig" class="org.apache.commons.csv.writer.CSVConfig">
  <property name="fields">
    <list>
      <bean class="org.apache.commons.csv.writer.CSVField">
        <property name="name" value="orderId" />
      </bean>
      <bean class="org.apache.commons.csv.writer.CSVField">
        <property name="name" value="amount" />
      </bean>
    </list>
  </property>
</bean>

<bean id="excelStrategy" class="org.springframework.beans.factory.config.FieldRetrievingFactoryBean">
  <property name="staticField" value="org.apache.commons.csv.CSVStrategy.EXCEL_STRATEGY" />
</bean>

76.7. 눈에 띄지 않는 동안 skipFirstLine 옵션 사용

Camel 2.10에서 사용 가능 및 Camel 2.15의 경우 삭제

CSV 헤더가 포함된 첫 번째 줄을 건너뛰도록 CSV 데이터 형식에 지시할 수 있습니다. Spring/XML DSL 사용:

<route>
  <from uri="direct:start" />
  <unmarshal>
    <csv skipFirstLine="true" />
  </unmarshal>
  <to uri="bean:myCsvHandler?method=doHandleCsv" />
</route>

또는 Java DSL:

CsvDataFormat csv = new CsvDataFormat();
csv.setSkipFirstLine(true);

from("direct:start")
  .unmarshal(csv)
.to("bean:myCsvHandler?method=doHandleCsv");

76.8. 구분 기호로 파이프를 사용하여 분할 해제

Spring/XML DSL 사용:

<route>
  <from uri="direct:start" />
  <unmarshal>
    <csv delimiter="|" />
  </unmarshal>
  <to uri="bean:myCsvHandler?method=doHandleCsv" />
</route>

또는 Java DSL:

CsvDataFormat csv = new CsvDataFormat();
CSVStrategy strategy = CSVStrategy.DEFAULT_STRATEGY;
strategy.setDelimiter('|');
csv.setStrategy(strategy);

from("direct:start")
  .unmarshal(csv)
  .to("bean:myCsvHandler?method=doHandleCsv");
CsvDataFormat csv = new CsvDataFormat();
csv.setDelimiter("|");

from("direct:start")
  .unmarshal(csv)
  .to("bean:myCsvHandler?method=doHandleCsv");
CsvDataFormat csv = new CsvDataFormat();
CSVConfig csvConfig = new CSVConfig();
csvConfig.setDelimiter(";");
csv.setConfig(csvConfig);

from("direct:start")
  .unmarshal(csv)
  .to("bean:myCsvHandler?method=doHandleCsv");

CSVConfig에서 문제

다음과 같습니다.

CSVConfig csvConfig = new CSVConfig();
csvConfig.setDelimiter(';');

작동하지 않습니다. 구분 기호를 문자열로 설정해야 합니다.

76.9. 종속 항목

Camel 경로에서 CSV를 사용하려면 이 데이터 형식을 구현하는 camel-csv 에 종속성을 추가해야 합니다.

Maven을 사용하는 경우 pom.xml에 다음을 추가하여 최신 버전과 가장 큰 릴리스의 버전 번호를 대체합니다(최신 버전의 다운로드 페이지 참조).

<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-csv</artifactId>
  <version>x.x.x</version>
</dependency>

77장. CXF

77.1. CXF 구성 요소

cxf: 구성 요소는 CXF에서 호스팅되는 JAX-WS 서비스에 연결하기 위해 Apache CXF 와의 통합을 제공합니다.

Maven 사용자는 이 구성 요소를 위해 다음 종속성을 pom.xml 에 추가해야 합니다.

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-cxf</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>
참고

CXF 종속 항목에 대해 알아보려면 WHICH-JARS 텍스트 파일을 참조하십시오.

참고

스트리밍 모드에서 CXF를 사용하는 경우(DataFormat 옵션 참조) 스트림 캐싱 에 대해 읽어 보십시오.

77.2. EAP 배포용 Camel

이 구성 요소는 Red Hat JBoss EAP(JBoss Enterprise Application Platform) 컨테이너에서 단순화된 배포 모델을 제공하는 Camel on EAP(Wildfly Camel) 프레임워크에서 지원합니다.

CXF 구성 요소는 Apache CXF도 사용하는 JBoss EAP 웹 서비스 susbsystem과 통합됩니다. 자세한 내용은 JAX-WS 를 참조하십시오.

참고

현재 EAP 하위 시스템의 Camel은 CXF 또는 Restlet 소비자를 지원하지 않습니다. 그러나 CamelProxy 를 사용하여 CXF 소비자의 동작을 모방할 수 있습니다.

77.3. URI 형식

cxf:bean:cxfEndpoint[?options]

여기서 cxfEndpoint 는 Spring 빈 레지스트리의 빈을 참조하는 빈 ID를 나타냅니다. 이 URI 형식을 사용하면 대부분의 끝점 세부 정보가 빈 정의에 지정됩니다.

cxf://someAddress[?options]

여기서 someAddress 는 CXF 끝점의 주소를 지정합니다. 이 URI 형식을 사용하면 대부분의 엔드포인트 세부 정보가 옵션을 사용하여 지정됩니다.

위의 두 스타일 모두 다음과 같이 URI에 옵션을 추가할 수 있습니다.

cxf:bean:cxfEndpoint?wsdlURL=wsdl/hello_world.wsdl&dataFormat=PAYLOAD

77.4. 옵션

Expand

이름

필수 항목

설명

wsdlURL

없음

WSDL의 위치입니다. WSDL은 기본적으로 끝점 주소에서 가져옵니다. 예를 들면 다음과 같습니다.

file://local/wsdl/hello.wsdl 또는 wsdl/hello.wsdl

serviceClass

있음

SEI(Service Endpoint Interface) 클래스의 이름입니다. 이 클래스에는 포함될 수 있지만 필요한 것은 필수는 아니며, JSR181 주석이 필요하지 않습니다.  2.0부터 이 옵션은 POJO 모드에만 필요합니다. wsdlURL 옵션이 제공되는 경우 PAYLOAD 및 MESSAGE 모드에 serviceClass가 필요하지 않습니다. serviceClass 없이 wsdlURL 옵션을 사용하는 경우 serviceName 및 portName( Spring 구성의endpointName) 옵션을 제공해야 합니다.

2.0부터 \# 표기법을 사용하여 레지스트리에서 serviceClass 개체 인스턴스를 참조할 수 있습니다.

AOP 프록시가 아닌 경우 Object.getClass().getName() 메서드를 사용하므로 참조된 오브젝트가 Proxy (Spring AOP Proxy)가 될 수 없습니다.

2.8부터 PAYLOAD 및 MESSAGE 모드에 대한 wsdlURL 및 serviceClass 옵션을 둘 다 생략할 수 있습니다. 이러한 요소를 생략하면 CXF Dispatch Mode를 용이하게 하기 위해 PAYLOAD 모드에서 CxfPayload의 본문에 임의의 XML 요소를 배치할 수 있습니다.

예: org.apache.camel.Hello

serviceName

WSDL에 두 개 이상의 serviceName 이 있는 경우에만

이 서비스가 구현되고 있는 서비스 이름은 wsdl:service@name 에 매핑됩니다. 예를 들면 다음과 같습니다.

{http://org.apache.camel}ServiceName

endpointName

serviceName 아래에 두 개 이상의 portName 이 있고 camel 2.2 이후 camel-cxf consumer에 필요한 경우에만 해당됩니다.

이 서비스가 구현 중인 포트 이름은 wsdl:port@name 에 매핑됩니다. 예를 들면 다음과 같습니다.

{http://org.apache.camel}PortName

dataFormat

없음

CXF 끝점이 지원하는 메시지 데이터 형식은 무엇입니까. 가능한 값은 POJO (기본값), PAYLOAD,MESSAGE 입니다.

relayHeaders

없음

이 옵션은relayHeaders옵션 섹션에 대한 설명을 참조하십시오. 경로를 따라 CXF 엔드포인트 릴레이 헤더가 있어야 합니다. 현재 dataFormat=POJODefault:true:true,false경우에만 사용할 수 있습니다.

래핑

없음

다음 중 CXF 엔드포인트 생산자가 호출할 작업 유형은 무엇입니까. 가능한 값은 true,false (기본값) 입니다.

wrappedStyle

없음

2.5.0 이후 매개변수가 SOAP 본문에 표시되는 방법을 설명하는 WSDL 스타일입니다. 값이 false 인 경우 CXF는 문서 지향되지 않은 스타일을 선택합니다. 값이 true 인 경우 CXF는 문서 구조를 래핑하는 스타일을 선택합니다.

setDefaultBus

없음

deprecated: 이 끝점에 대해 기본 CXF 버스를 사용할지 여부를 지정합니다. 가능한 값은 true,false (기본값) 입니다. 이 옵션은 더 이상 사용되지 않으며 Camel 2.16 이후의 defaultBus 를 사용해야 합니다.

defaultBus

없음

deprecated: 이 끝점에 대해 기본 CXF 버스를 사용할지 여부를 지정합니다. 가능한 값은 true,false (기본값) 입니다. 이 옵션은 더 이상 사용되지 않으며 Camel 2.16 이후의 defaultBus 를 사용해야 합니다.

bus

없음

\# 표기법을 사용하여 레지스트리에서 버스 오브젝트를 참조할 수 있습니다(예: bus=\#busName ). 참조된 오브젝트는 org.apache.cxf.Bus 의 인스턴스여야 합니다.

기본적으로, CXF 버스 팩토리에 의해 생성된 기본 버스를 사용합니다.

cxfBinding

없음

\# 표기법을 사용하여 레지스트리에서 CXF 바인딩 오브젝트를 참조할 수 있습니다(예: cxfBinding=\#bindingName ). 참조된 오브젝트는 org.apache.camel.component.cxf.CxfBinding 의 인스턴스여야 합니다.

headerFilterStrategy

없음

\# 표기법을 사용하여 레지스트리의 header 필터 전략 오브젝트(예: headerFilterStrategy=\#strategyName )를 참조합니다. 참조된 오브젝트는 org.apache.camel.spi.HeaderFilterStrategy 의 인스턴스여야 합니다.

loggingFeatureEnabled

없음

2.3의 새로운 기능을 사용하면 인바운드 및 아웃바운드 SOAP 메시지를 로그에 쓰는 CXF Logging 기능을 사용할 수 있습니다. 가능한 값은 true,false (기본값) 입니다.

defaultOperationName

없음

2.4에서 새로 추가된 이 옵션은 원격 서비스를 호출하는 CxfProducer 에서 사용할 기본 operationName 을 설정합니다. 예를 들면 다음과 같습니다.

defaultOperationName=greetMe

defaultOperationNamespace

없음

2.4의 새로운 기능 이 옵션은 원격 서비스를 호출하는 CxfProducer에서 사용할 기본 operationNamespace를 설정합니다. 예를 들면 다음과 같습니다.

defaultOperationNamespace=http://apache.org/hello_world_soap_http

synchronous

없음

2.5의 새로운 기능을 통해 CXF 엔드포인트가 동기화 또는 async API를 사용하여 기본 작업을 수행하도록 결정할 수 있습니다. 기본값은 false 이며, 즉 camel-cxf 엔드포인트는 기본적으로 async API를 사용하려고 합니다.

publishedEndpointUrl

없음

2.5의 새로운 기능인 이 옵션은 서비스 주소 URL과 ?wsdl 을 사용하여 액세스한 게시된 WSDL에 나타나는 엔드포인트 URL을 재정의합니다. 예를 들면 다음과 같습니다.

publshedEndpointUrl=http://example.com/service

properties.propName

없음

Camel 2.8: 엔드포인트 URI에서 사용자 지정 CXF 속성을 설정할 수 있습니다. 예를 들어 properties.mtom-enabled=true 를 설정하여 MTOM을 활성화합니다. 호출을 시작할 때 CXF가 스레드를 전환하지 않도록 하려면 properties.org.apache.cxf.interceptor.OneWayProcessorInterceptor.USE_ORIGINAL_THREAD=true.

allowStreaming

없음

2.8.2의 새로운 기능 이 옵션은 PAYLOAD 모드에서 실행할 때(아래 참조)에서 CXF 구성 요소를 제어하는지 여부를 제어합니다(아래 참조)는 수신되는 메시지를 DOM Elements로 구문 분석하거나 페이로드를 일부 경우에 허용하는 javax.xml.transform.Source 개체로 유지합니다.

skipFaultLogging

없음

2.11의 새로운 기능. 이 옵션은 phaseInterceptorChain이 catch하는 Fault 로깅을 건너뛰는지 여부를 제어합니다.

cxfEndpointConfigurer

없음

Camel 2.11 의 새로운 기능. 이 옵션은 프로그래밍 방식으로 CXF 엔드포인트 구성을 지원하는 org.apache.camel.component.cxfEndpointConfigurer 의 구현을 적용할 수 있습니다. Camel 2.15.0 이후 사용자는 CxfEndpointConfigurer 의 configure{Server/Client} 메서드를 구현하여 CXF 서버 및 클라이언트를 구성할 수 있습니다.

사용자 이름

없음

Camel 2.12.3 의 새로운 기능은 CXF 클라이언트에 대한 사용자 이름의 기본 인증 정보를 설정하는 데 사용됩니다.

암호

없음

Camel 2.12.3 의 새로운 기능 이 옵션은 CXF 클라이언트의 암호에 대한 기본 인증 정보를 설정하는 데 사용됩니다.

continuationTimeout

없음

Camel 2.14.0 의 새로운 기능은 CXF 서버가 Jetty 또는 Servlet 전송을 사용할 때 기본적으로 CxfConsumer에서 사용할 수 있는 CXF 연속 타임아웃을 설정하는 데 사용됩니다. ( Cx fConsumer는 연속 시간 초과를 0으로 설정하므로 연속 일시 중지 작업이 시간 초과되지 않음을 의미합니다.)

기본값: 30000 : 연속 = 80000

serviceNameportNameQNames 이므로, 제공한 경우 위의 예에 표시된 대로 {namespace} 로 접두사가 있어야 합니다.

77.5. dataformat에 대한 설명

Expand

DataFormat

설명

POJO

POJO(plain old Java 객체)는 대상 서버에서 호출되는 메서드에 대한 Java 매개 변수입니다. 프로토콜 및 논리 JAX-WS 핸들러가 모두 지원됩니다.

페이로드

PAYLOAD 는 CXF 끝점의 메시지 구성이 적용된 후 메시지 페이로드( soap:body)입니다. 프로토콜 JAX-WS 핸들러만 지원됩니다. 논리 JAX-WS 핸들러는 지원되지 않습니다.

MESSAGE

MESSAGE 는 전송 계층에서 수신한 원시 메시지입니다. 이러한 종류의 DataFormat을 사용하는 경우 일부 CXF 인터셉터는 제거되지 않으므로 camel-cxf 소비자 및 JAX-WS 처리기가 지원되지 않습니다.

CXF_MESSAGE

Camel 2.8.2 의 새로운 기능CXF_MESSAGE 를 사용하면 전송 계층에서 원시 SOAP 메시지로 메시지를 변환하여 CXF 인터셉터의 전체 기능을 호출할 수 있습니다.

교환 속성 CamelCXFDataFormat 을 검색하여 교환의 데이터 형식 모드를 결정할 수 있습니다. 교환 키 상수는 org.apache.camel.component.cxf.CxfConstants.DATA_FORMAT_PROPERTY 에서 정의됩니다.

77.6. Apache Aries Blueprint를 사용하여 CXF 엔드포인트 구성.

Camel 2.8부터 CXF 엔드포인트에 대한 Aries 청사진 종속성 주입을 사용할 수 있습니다. 스키마는 Spring 스키마와 매우 유사하므로 전환은 상당히 투명합니다.

예를 들면 다음과 같습니다.

 <blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0"
            xmlns:camel-cxf="http://camel.apache.org/schema/blueprint/cxf"
 	   xmlns:cxfcore="http://cxf.apache.org/blueprint/core"
            xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd">

       <camel-cxf:cxfEndpoint id="routerEndpoint"
                      address="http://localhost:9001/router"
                      serviceClass="org.apache.servicemix.examples.cxf.HelloWorld">
         <camel-cxf:properties>
             <entry key="dataFormat" value="MESSAGE"/>
         </camel-cxf:properties>
      </camel-cxf:cxfEndpoint>

      <camel-cxf:cxfEndpoint id="serviceEndpoint"
			address="http://localhost:9000/SoapContext/SoapPort"
                     serviceClass="org.apache.servicemix.examples.cxf.HelloWorld">
    </camel-cxf:cxfEndpoint>

    <camelContext xmlns="http://camel.apache.org/schema/blueprint">
        <route>
            <from uri="routerEndpoint"/>
            <to uri="log:request"/>
        </route>
    </camelContext>

</blueprint>

현재 endpoint 요소는 지원되는 첫 번째 CXF 네임스페이스handler입니다.

또한 Spring에서와 마찬가지로 빈 참조를 사용할 수도 있습니다.

<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.0.0"
           xmlns:jaxws="http://cxf.apache.org/blueprint/jaxws"
           xmlns:cxf="http://cxf.apache.org/blueprint/core"
           xmlns:camel="http://camel.apache.org/schema/blueprint"
           xmlns:camelcxf="http://camel.apache.org/schema/blueprint/cxf"
           xsi:schemaLocation="
             http://www.osgi.org/xmlns/blueprint/v1.0.0 https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
             http://cxf.apache.org/blueprint/jaxws http://cxf.apache.org/schemas/blueprint/jaxws.xsd
             http://cxf.apache.org/blueprint/core http://cxf.apache.org/schemas/blueprint/core.xsd
             ">

    <camelcxf:cxfEndpoint id="reportIncident"
                     address="/camel-example-cxf-blueprint/webservices/incident"
                     wsdlURL="META-INF/wsdl/report_incident.wsdl"
                     serviceClass="org.apache.camel.example.reportincident.ReportIncidentEndpoint">
    </camelcxf:cxfEndpoint>

    <bean id="reportIncidentRoutes" class="org.apache.camel.example.reportincident.ReportIncidentRoutes" />

    <camelContext xmlns="http://camel.apache.org/schema/blueprint">
        <routeBuilder ref="reportIncidentRoutes"/>
    </camelContext>

</blueprint>

77.7. MESSAGE 모드에서 CXF의 LoggingOutInterceptor를 활성화하는 방법

CXF의 LoggingOutInterceptor 는 유선 로깅 시스템 (java.util.logging)으로 들어오는 아웃바운드 메시지를 출력합니다. LoggingOutInterceptorPRE_STREAM 단계에 있기 때문에 (하지만 PRE_STREAM 단계가 MESSAGE 모드에서 제거됨)이므로 WRITE 단계에서 LoggingOutInterceptor 를 실행하도록 구성해야 합니다. 다음은 예제입니다.

   <bean id="loggingOutInterceptor" class="org.apache.cxf.interceptor.LoggingOutInterceptor">
        <!--  it really should have been user-prestream but CXF does have such phase! -->
        <constructor-arg value="target/write"/>
   </bean>

<cxf:cxfEndpoint id="serviceEndpoint" address="http://localhost:9002/helloworld"
	serviceClass="org.apache.camel.component.cxf.HelloService">
	<cxf:outInterceptors>
	    <ref bean="loggingOutInterceptor"/>
	</cxf:outInterceptors>
	<cxf:properties>
		<entry key="dataFormat" value="MESSAGE"/>
	</cxf:properties>
</cxf:cxfEndpoint>

77.8. relayHeaders 옵션에 대한 설명

JAXWSWS -first 개발자의 관점에서 볼 때 대역 및 대역 외 온-선 헤더가 있습니다.

인 밴드 헤더는 SOAP 헤더와 같은 끝점에 대한 WSDL 바인딩 계약의 일부로 명시적으로 정의된 헤더입니다.

대역 외 헤더는 유선을 통해 직렬화되는 헤더이지만 WSDL 바인딩 계약의 일부는 명시적으로 포함되지 않습니다.

헤더 릴레이/필터링은 양방향입니다.

경로에 CXF 엔드포인트가 있고 개발자가 SOAP 헤더와 같은 on-the-wire 헤더가 있어야 하는 경우 다른 JAXWS 엔드포인트에서 사용할 경로를 따라 릴레이된 다음 relayHeaderstrue 로 설정해야 합니다. 그러면 relayHeaders는 기본값입니다.

77.9. POJO 모드에서만 사용 가능

relayHeaders=true 설정은 헤더를 릴레이하려는 의도를 표시합니다. 지정된 헤더를 릴레이하는지 여부에 대한 실제 결정은 MessageHeadersRelay 인터페이스를 구현하는 플러그형 인스턴스에 위임됩니다. MessageHeadersRelay 의 구체적인 구현을 참조하여 헤더를 릴레이해야 하는지 여부를 결정합니다. 이미 잘 알려진 SOAP 네임 스페이스에 자체적으로 바인딩하는 SoapMessageHeadersRelay 구현이 이미 있습니다. 현재 대역 외 헤더만 필터링되고, relayHeaders=true 일 때 항상 대역 내 헤더가 중계됩니다. 이름 공간이 런타임에서 알 수 없는 전선에 헤더가 있는 경우 fall DefaultMessageHeadersRelay 가 사용됩니다. 그러면 단순히 모든 헤더를 릴레이할 수 있습니다.

relayHeaders=false 설정은 모든 헤더, 대역 내 및 대역 외가 삭제됨을 나타냅니다.

자체 MessageHeadersRelay 구현을 재정의하거나 릴레이 목록에 추가할 수 있습니다. 사전 로드된 릴레이 인스턴스를 재정의하려면 MessageHeadersRelay 구현 서비스가 재정의하려는 것과 동일한 네임 스페이스를 제공하는지 확인하십시오. 또한 덮어쓰기 릴레이는 모든 네임 스페이스를 재정의하려는 항목으로 제공해야 합니다. 그러지 않으면 인스턴스 매핑을 릴레이하는 네임 스페이스에 모호함을 도입하므로 라우팅 시작 시 런타임 예외가 throw됩니다.

<cxf:cxfEndpoint ...>
   <cxf:properties>
     <entry key="org.apache.camel.cxf.message.headers.relays">
       <list>
         <ref bean="customHeadersRelay"/>
       </list>
     </entry>
   </cxf:properties>
 </cxf:cxfEndpoint>
 <bean id="customHeadersRelay" class="org.apache.camel.component.cxf.soap.headers.CustomHeadersRelay"/>

여기에서 릴레이/drop 헤더를 릴레이할 수 있는 방법을 보여주는 테스트를 살펴보십시오.

링크:https://svn.apache.org/repos/asf/camel/branches/camel-1.x/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/soap/headers/CxfMessageHeadersRelayTest.java[https://svn.apache.org/repos/asf/camel/branches/camel-1.x/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/soap/headers/CxfMessageHeadersRelayTest.java ]

77.10. Release 2.0 이후의 변경

  • POJOPAYLOAD 모드가 지원됩니다. POJO 모드에서는 대역 내 헤더가 CXF에 의해 헤더 목록에서 처리 및 제거됨에 따라 대역 외 메시지 헤더만 필터링할 수 있습니다. 대역 내 헤더는 POJO 모드의 MessageContentList 에 통합되어 있습니다. camel-cxf 구성 요소에서 대역 내 헤더를 필터링해야 하는 경우, CXF 인터셉터/JAXWS Handler에 PAYLOAD 모드 또는 플러그를 사용하여 (prettyly) CXF 인터셉터/JAXWS Handler를 사용하여 MessageContentList 에서 인 대역폭 헤더를 제거하려고 합니다.
  • Message Header Relay 메커니즘이 CxfHeaderFilterStrategy 에 병합되었습니다. relayHeaders 옵션, 해당 의미 체계 및 기본값은 동일하게 유지되지만 CxfHeaderFilterStrategy 의 속성입니다. 다음은 이를 구성하는 예입니다.

    <bean id="dropAllMessageHeadersStrategy" class="org.apache.camel.component.cxf.common.header.CxfHeaderFilterStrategy">
    
        <!--  Set relayHeaders to false to drop all SOAP headers -->
        <property name="relayHeaders" value="false"/>
    
    </bean>

    그런 다음 끝점에서 CxfHeaderFilterStrategy 를 참조할 수 있습니다.

    <route>
        <from uri="cxf:bean:routerNoRelayEndpoint?headerFilterStrategy=#dropAllMessageHeadersStrategy"/>
        <to uri="cxf:bean:serviceNoRelayEndpoint?headerFilterStrategy=#dropAllMessageHeadersStrategy"/>
    </route>
  • MessageHeadersRelay 인터페이스가 약간 변경되었으며 이름이 MessageHeaderFilter 로 변경되었습니다. CxfHeaderFilterStrategy 의 속성입니다. 다음은 사용자 정의 메시지 헤더 필터를 구성하는 예입니다.

    <bean id="customMessageFilterStrategy" class="org.apache.camel.component.cxf.common.header.CxfHeaderFilterStrategy">
        <property name="messageHeaderFilters">
            <list>
                <!--  SoapMessageHeaderFilter is the built in filter.  It can be removed by omitting it. -->
                <bean class="org.apache.camel.component.cxf.common.header.SoapMessageHeaderFilter"/>
    
                <!--  Add custom filter here -->
                <bean class="org.apache.camel.component.cxf.soap.headers.CustomHeaderFilter"/>
            </list>
        </property>
    </bean>
  • relayHeaders 외에 CxfHeaderFilterStrategy 에서 구성할 수 있는 새로운 속성이 있습니다.
Expand

이름

설명

type

필수 여부

기본값

relayHeaders

모든 메시지 헤더는 Message Header Filters에 의해 처리됩니다.

boolean

없음

True (1.6.1 동작)

relayAllMessageHeaders

모든 메시지 헤더가 전파됩니다(메시지 헤더 필터에 의한 처리 없이)

boolean

없음

False (1.6.1 동작)

allowFilterNamespaceClash

활성화 네임스페이스에서 두 필터가 겹치는 경우 속성은 처리 방법을 제어합니다. 값이 true 이면 마지막으로 이기게 됩니다. 값이 false 인 경우 예외가 throw됩니다.

boolean

없음

False (1.6.1 동작)

77.11. Spring을 사용하여 CXF 엔드포인트 구성

아래에 표시된 Spring 구성 파일을 사용하여 CXF 엔드포인트를 구성할 수 있으며, 해당 엔드포인트를 camelContext 태그에 포함할 수도 있습니다. 서비스 끝점을 호출할 때 operationNameoperationNamespace 헤더를 호출할 작업을 명시적으로 state로 설정할 수 있습니다.

참고 Camel 2.x에서는 http://camel.apache.org/schema/cxf 을 CXF 엔드포인트의 대상 네임스페이스로 사용하도록 변경되었습니다.

<beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:cxf="http://camel.apache.org/schema/cxf"
        xsi:schemaLocation="
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
        http://camel.apache.org/schema/cxf http://camel.apache.org/schema/cxf/camel-cxf.xsd
        http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd     ">
 ...
참고

Apache Camel 2.x에서 http://activemq.apache.org/camel/schema/cxfEndpoint 네임스페이스가 http://camel.apache.org/schema/cxf 로 변경되었습니다.

루트 빈 요소에 지정된 JAX-WS 스키마Location 속성을 포함해야 합니다. 이를 통해 CXF는 파일의 유효성을 검사하고 필요합니다. 또한 결합된 {namespace}localName 구문이 현재 이 태그의 특성 값에 대해 지원되지 않으므로 < cxf:cxfEndpoint /> 태그의 끝에 네임스페이스 선언이 필요합니다.

cxf:cxfEndpoint 요소는 다음과 같은 많은 추가 특성을 지원합니다.

Expand

이름

PortName

이 서비스가 구현되는 엔드포인트 이름은 wsdl:port@name 에 매핑됩니다. ns:PORT_NAME 형식의 에서 ns 는 이 범위에서 유효한 네임스페이스 접두사입니다.

serviceName

이 서비스가 구현되고 있는 서비스 이름은 wsdl:service@name 에 매핑됩니다. ns:SERVICE_NAME 형식의 에서 ns 는 이 범위에서 유효한 네임스페이스 접두사입니다.

wsdlURL

WSDL의 위치입니다. classpath, 파일 시스템에 있거나 원격으로 호스팅될 수 있습니다.

bindingId

사용할 서비스 모델의 bindingId 입니다.

주소

서비스는 공개 주소입니다.

bus

JAX-WS 엔드포인트에서 사용할 버스 이름입니다.

serviceClass

JSR181 주석이 있거나 없을 수 있는 SEI(Service Endpoint Interface) 클래스의 클래스 이름입니다.

또한 많은 자식 요소를 지원합니다.

Expand

이름

cxf:inInterceptors

이 끝점의 들어오는 인터셉터입니다. < bean> 또는 & lt; ref> 목록입니다.

cxf:inFaultInterceptors

이 끝점에 대한 들어오는 오류 인터셉터입니다. < bean> 또는 & lt; ref> 목록입니다.

cxf:outInterceptors

이 끝점의 발신 인터셉터입니다. < bean> 또는 & lt; ref> 목록입니다.

cxf:outFaultInterceptors

이 끝점의 발신 오류 인터셉터입니다. < bean> 또는 & lt; ref> 목록입니다.

CXF:properties

JAX-WS 엔드포인트에 제공해야 하는 속성 맵입니다. 아래를 참조하십시오.

cxf:handlers

JAX-WS 엔드포인트에 제공해야 하는 JAX-WS 핸들러 목록입니다. 아래를 참조하십시오.

cxf:dataBinding

끝점에서 사용할 DataBinding을 지정할 수 있습니다.You can specify the DataBinding will be used in the endpoint. 이는 Spring < bean class="MyDataBinding" /> 구문을 사용하여 제공할 수 있습니다.

cxf:binding

이 끝점에서 사용할 BindingFactory 를 지정할 수 있습니다.You can specify the BindingFactory for this endpoint to use. 이는 Spring < bean class="MyBindingFactory" /> 구문을 사용하여 제공할 수 있습니다.

cxf:features

이 끝점에 대한 인터셉터를 보유하는 기능입니다. < bean> s 또는< ref> s목록

cxf:schemaLocations

사용할 끝점의 스키마 위치입니다. < schemaLocation> s목록

cxf:serviceFactory

이 엔드포인트에서 사용할 서비스 팩토리입니다. 이는 Spring < bean class="MyServiceFactory"/> 구문을 사용하여 제공할 수 있습니다.

인터셉터, 속성 및 핸들러를 제공하는 방법을 보여주는 고급 예제를 찾을 수 있습니다. http://cwiki.apache.org/CXF20DOC/jax-ws-configuration.html

참고

CXF:properties를 사용하여 Spring 구성 파일에서 CXF 끝점의 dataFormatsetDefaultBus 속성을 다음과 같이 설정할 수 있습니다.

<cxf:cxfEndpoint id="testEndpoint" address="http://localhost:9000/router"
     serviceClass="org.apache.camel.component.cxf.HelloService"
     endpointName="s:PortName"
     serviceName="s:ServiceName"
     xmlns:s="http://www.example.com/test">
     <cxf:properties>
       <entry key="dataFormat" value="MESSAGE"/>
       <entry key="setDefaultBus" value="true"/>
     </cxf:properties>
   </cxf:cxfEndpoint>

CXF의 기본 로거는 java.util.logging 입니다. log4j 로 변경하려면 다음과 같이 진행하십시오. META-INF/cxf/org.apache.cxf.logger 라는 클래스 경로에 파일을 만듭니다. 이 파일에는 주석이 없는 org.apache.cxf.common.logging.Log4jLogger 클래스의 정규화된 이름이 포함되어야 합니다.

77.13. xml 시작 문서로 camel-cxf 응답 메시지를 보내는 방법

PHP와 같은 몇 가지 SOAP 클라이언트를 사용하는 경우 CXF가 XML 시작 문서 < ?xml 버전="1.0" encoding="utf-8"? >을 추가하지 않기 때문에 이러한 종류의 오류가 발생합니다.

Error:sendSms: SoapFault exception: [Client] looks like we got no XML document in [...]

이 문제를 해결하려면 StaxOutInterceptor에 XML 시작 문서를 작성해야 합니다.

public class WriteXmlDeclarationInterceptor extends AbstractPhaseInterceptor<SoapMessage> {
    public WriteXmlDeclarationInterceptor() {
        super(Phase.PRE_STREAM);
        addBefore(StaxOutInterceptor.class.getName());
    }

    public void handleMessage(SoapMessage message) throws Fault {
        message.put("org.apache.cxf.stax.force-start-document", Boolean.TRUE);
    }

}

고객 인터셉터를 다음과 같이 추가하고 camel-cxf endpont로 구성할 수 있습니다.

<cxf:cxfEndpoint id="routerEndpoint" address="http://localhost:${CXFTestSupport.port2}/CXFGreeterRouterTest/CamelContext/RouterPort"
 		serviceClass="org.apache.hello_world_soap_http.GreeterImpl"
 		skipFaultLogging="true">
     <cxf:outInterceptors>
         <!-- This interceptor will force the CXF server send the XML start document to client -->
         <bean class="org.apache.camel.component.cxf.WriteXmlDeclarationInterceptor"/>
     </cxf:outInterceptors>
     <cxf:properties>
         <!-- Set the publishedEndpointUrl which could override the service address from generated WSDL as you want -->
         <entry key="publishedEndpointUrl" value="http://www.simple.com/services/test" />
     </cxf:properties>
 </cxf:cxfEndpoint>

또는 Camel 2.4 를 사용하는 경우 이와 같이 메시지 헤더를 추가합니다.

 // set up the response context which force start document
 Map<String, Object> map = new HashMap<String, Object>();
 map.put("org.apache.cxf.stax.force-start-document", Boolean.TRUE);
 exchange.getOut().setHeader(Client.RESPONSE_CONTEXT, map);

77.14. POJO 데이터 형식의 camel-cxf 끝점에서 메시지를 사용하는 방법

camel-cxf 엔드포인트 소비자 POJO 데이터 형식은 cxf 호출자 를 기반으로 하므로 메시지 헤더에는 CxfConstants.OPERATION_NAME 및 메시지 본문이 SEI 메서드 매개 변수의 목록입니다.

public class PersonProcessor implements Processor {

    private static final transient Logger LOG = LoggerFactory.getLogger(PersonProcessor.class);

    @SuppressWarnings("unchecked")
    public void process(Exchange exchange) throws Exception {
        LOG.info("processing exchange in camel");

        BindingOperationInfo boi = (BindingOperationInfo)exchange.getProperty(BindingOperationInfo.class.toString());
        if (boi != null) {
            LOG.info("boi.isUnwrapped" + boi.isUnwrapped());
        }
        // Get the parameters list which element is the holder.
        MessageContentsList msgList = (MessageContentsList)exchange.getIn().getBody();
        Holder<String> personId = (Holder<String>)msgList.get(0);
        Holder<String> ssn = (Holder<String>)msgList.get(1);
        Holder<String> name = (Holder<String>)msgList.get(2);

        if (personId.value == null || personId.value.length() == 0) {
            LOG.info("person id 123, so throwing exception");
            // Try to throw out the soap fault message
            org.apache.camel.wsdl_first.types.UnknownPersonFault personFault =
                new org.apache.camel.wsdl_first.types.UnknownPersonFault();
            personFault.setPersonId("");
            org.apache.camel.wsdl_first.UnknownPersonFault fault =
                new org.apache.camel.wsdl_first.UnknownPersonFault("Get the null value of person name", personFault);
            // Since camel has its own exception handler framework, we can't throw the exception to trigger it
            // We just set the fault message in the exchange for camel-cxf component handling and return
            exchange.getOut().setFault(true);
            exchange.getOut().setBody(fault);
            return;
        }

        name.value = "Bonjour";
        ssn.value = "123";
        LOG.info("setting Bonjour as the response");
        // Set the response message, first element is the return value of the operation,
        // the others are the holders of method parameters
        exchange.getOut().setBody(new Object[] {null, personId, ssn, name});
    }

}

camel-cxf 엔드포인트 생산자는 cxf 클라이언트 API 를 기반으로 합니다. 먼저 메시지 헤더에 작업 이름을 지정한 다음 메서드 매개 변수를 목록에 추가하고 이 매개변수 목록을 사용하여 메시지를 초기화해야 합니다. 응답 메시지의 본문은 messageContentsList 이므로 해당 목록에서 결과를 가져올 수 있습니다.

메시지 헤더에 작업 이름을 지정하지 않으면 CxfProducerCxfEndpoint 에서 defaultOperationName 을 사용합니다. CxfEndpointdefaultOperationName 이 설정되어 있지 않으면 작업 목록에서 첫 번째 작업 이름을 선택합니다.

메시지 본문에서 개체 배열을 가져오려면 다음과 같이 message.getbody(Object[].class) 를 사용하여 본문을 가져올 수 있습니다.

Exchange senderExchange = new DefaultExchange(context, ExchangePattern.InOut);
final List<String> params = new ArrayList<String>();
// Prepare the request message for the camel-cxf procedure
params.add(TEST_MESSAGE);
senderExchange.getIn().setBody(params);
senderExchange.getIn().setHeader(CxfConstants.OPERATION_NAME, ECHO_OPERATION);

Exchange exchange = template.send("direct:EndpointA", senderExchange);

org.apache.camel.Message out = exchange.getOut();
// The response message's body is an MessageContentsList which first element is the return value of the operation,
// If there are some holder parameters, the holder parameter will be filled in the reset of List.
// The result will be extract from the MessageContentsList with the String class type
MessageContentsList result = (MessageContentsList)out.getBody();
LOG.info("Received output text: " + result.get(0));
Map<String, Object> responseContext = CastUtils.cast((Map<?, ?>)out.getHeader(Client.RESPONSE_CONTEXT));
assertNotNull(responseContext);
assertEquals("We should get the response context here", "UTF-8", responseContext.get(org.apache.cxf.message.Message.ENCODING));
assertEquals("Reply body on Camel is wrong", "echo " + TEST_MESSAGE, result.get(0));

Apache Camel 2.0: CxfMessage.getBody() 는 SOAP 메시지 헤더 및 Body 요소에 대한 getter가 있는 org.apache.camel.component.cxf.CxfPayload 오브젝트를 반환합니다. 이러한 변경으로 기본 CXF 메시지를 Apache Camel 메시지에서 분리할 수 있습니다.

protected RouteBuilder createRouteBuilder() {
    return new RouteBuilder() {
        public void configure() {
            from(SIMPLE_ENDPOINT_URI + "&dataFormat=PAYLOAD").to("log:info").process(new Processor() {
                @SuppressWarnings("unchecked")
                public void process(final Exchange exchange) throws Exception {
                    CxfPayload<SoapHeader> requestPayload = exchange.getIn().getBody(CxfPayload.class);
                    List<Source> inElements = requestPayload.getBodySources();
                    List<Source> outElements = new ArrayList<Source>();
                    // You can use a customer toStringConverter to turn a CxfPayLoad message into String as you want
                    String request = exchange.getIn().getBody(String.class);
                    XmlConverter converter = new XmlConverter();
                    String documentString = ECHO_RESPONSE;

                    Element in = new XmlConverter().toDOMElement(inElements.get(0));
                    // Just check the element namespace
                    if (!in.getNamespaceURI().equals(ELEMENT_NAMESPACE)) {
                        throw new IllegalArgumentException("Wrong element namespace");
                    }
                    if (in.getLocalName().equals("echoBoolean")) {
                        documentString = ECHO_BOOLEAN_RESPONSE;
                        checkRequest("ECHO_BOOLEAN_REQUEST", request);
                    } else {
                        documentString = ECHO_RESPONSE;
                        checkRequest("ECHO_REQUEST", request);
                    }
                    Document outDocument = converter.toDOMDocument(documentString);
                    outElements.add(new DOMSource(outDocument.getDocumentElement()));
                    // set the payload header with null
                    CxfPayload<SoapHeader> responsePayload = new CxfPayload<SoapHeader>(null, outElements, null);
                    exchange.getOut().setBody(responsePayload);
                }
            });
        }
    };
}

77.17. How to get and set SOAP headers in POJO mode

POJO 는 CXF 엔드포인트가 Camel Exchange를 생성하거나 사용할 때 데이터 형식이 Java 개체의 목록 임을 의미합니다. Apache Camel은 이 모드에서 메시지 본문을 POJO로 공개하지만 CXF 구성 요소는 SOAP 헤더를 읽고 쓸 수 있는 액세스 권한을 계속 제공합니다. 그러나 CXF 인터셉터는 처리된 후 헤더 목록에서 인 대역 내 SOAP 헤더를 제거하므로 대역 외 SOAP 헤더만 POJO 모드에서 사용할 수 있습니다.

다음 예제에서는 SOAP 헤더를 가져오거나 설정하는 방법을 보여줍니다. 한 CXF 끝점에서 다른 CXF 엔드포인트로 전달하는 경로가 있다고 가정합니다. 즉, SOAP 클라이언트 → Apache Camel → CXF 서비스입니다. 요청이 CXF 서비스에 나가기 전에 (1)에 SOAP 헤더를 가져오고 삽입하기 위해 두 개의 프로세서를 연결하고, (2) 응답이 SOAP Client로 되돌아오기 전에 연결할 수 있습니다. 이 예에서 프로세서 (1) 및 (2)는 InsertRequestOutHeaderProcessor 및 InsertResponseOutHeaderProcessor입니다. 우리의 경로는 다음과 같습니다.

<route>
    <from uri="cxf:bean:routerRelayEndpointWithInsertion"/>
    <process ref="InsertRequestOutHeaderProcessor" />
    <to uri="cxf:bean:serviceRelayEndpointWithInsertion"/>
    <process ref="InsertResponseOutHeaderProcessor" />
</route>

2.x SOAP 헤더는 Apache Camel Message 헤더로 또는 Apache Camel Message 헤더로 전파됩니다. Apache Camel 메시지 헤더 이름은 org.apache.cxf.headers.Header.list 이며, CXF(org.apache.cxf.headers.Header.HEADER_LIST)에 정의된 상수입니다. 헤더 값은 CXF SoapHeader 오브젝트(org.apache.cxf.binding.soap.Soap.Soap.Soap)의 List <>입니다. 다음 스니펫은 InsertResponseOutHeaderProcessor (응답 메시지에 새 SOAP 헤더를 삽입함)입니다. InsertResponseOutHeaderProcessorInsertRequestOutHeaderProcessor 에서 SOAP 헤더에 액세스하는 방법은 실제로 동일합니다. 두 프로세서의 유일한 차이점은 삽입된 SOAP 헤더의 방향을 설정하는 것입니다.

public static class InsertResponseOutHeaderProcessor implements Processor {

    @SuppressWarnings("unchecked")
    public void process(Exchange exchange) throws Exception {
        // You should be able to get the header if exchange is routed from camel-cxf endpoint
        List<SoapHeader> soapHeaders = CastUtils.cast((List<?>)exchange.getIn().getHeader(Header.HEADER_LIST));
        if (soapHeaders == null) {
            // we just create a new soap headers in case the header is null
            soapHeaders = new ArrayList<SoapHeader>();
        }

        // Insert a new header
        String xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?><outofbandHeader "
            + "xmlns=\"http://cxf.apache.org/outofband/Header\" hdrAttribute=\"testHdrAttribute\" "
            + "xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" soap:mustUnderstand=\"1\">"
            + "<name>New_testOobHeader</name><value>New_testOobHeaderValue</value></outofbandHeader>";
        SoapHeader newHeader = new SoapHeader(soapHeaders.get(0).getName(),
                       DOMUtils.readXml(new StringReader(xml)).getDocumentElement());
        // make sure direction is OUT since it is a response message.
        newHeader.setDirection(Direction.DIRECTION_OUT);
        //newHeader.setMustUnderstand(false);
        soapHeaders.add(newHeader);

    }

}

77.18. PAYLOAD 모드에서 SOAP 헤더를 가져오고 설정하는 방법

PAYLOAD 모드에서 SOAP 메시지(CxfPayload 오브젝트)에 액세스하는 방법을 이미 보여주었습니다( “PAYLOAD 데이터 형식의 camel-cxf 엔드포인트에 대한 메시지를 처리하는 방법”참조).

CxfPayload 오브젝트를 확보하면 CxfPayload.getHeaders() 메서드를 호출하여 DOM Elements(SOAP 헤더) 목록 을 반환합니다.

from(getRouterEndpointURI()).process(new Processor() {
    @SuppressWarnings("unchecked")
    public void process(Exchange exchange) throws Exception {
        CxfPayload<SoapHeader> payload = exchange.getIn().getBody(CxfPayload.class);
        List<Source> elements = payload.getBodySources();
        assertNotNull("We should get the elements here", elements);
        assertEquals("Get the wrong elements size", 1, elements.size());

        Element el = new XmlConverter().toDOMElement(elements.get(0));
        elements.set(0, new DOMSource(el));
        assertEquals("Get the wrong namespace URI", "http://camel.apache.org/pizza/types",
                el.getNamespaceURI());

        List<SoapHeader> headers = payload.getHeaders();
        assertNotNull("We should get the headers here", headers);
        assertEquals("Get the wrong headers size", headers.size(), 1);
        assertEquals("Get the wrong namespace URI",
                ((Element)(headers.get(0).getObject())).getNamespaceURI(),
                "http://camel.apache.org/pizza/types");
    }

})
.to(getServiceEndpointURI());

Camel 2.16.0부터 “How to get and set SOAP headers in POJO mode” 에 설명된 것과 동일한 방법을 사용하여 SOAP 헤더를 설정하거나 가져올 수 있습니다. 이제 org.apache.cxf.headers.Header.list 헤더를 사용하여 SOAP 헤더 목록을 가져오고 설정할 수 있습니다. 즉, 하나의 Camel CXF 끝점에서 다른 (SOAP Client → Camel → CXF 서비스)로 전달하는 경로가 있는 경우 SOAP 클라이언트에서 보낸 SOAP 헤더도 CXF 서비스로 전달됩니다. 헤더를 전달하지 않으려면 org.apache.cxf.headers.Header.list Camel 헤더에서 해당 헤더를 제거합니다.

77.19. MESSAGE 모드에서는 SOAP 헤더를 사용할 수 없습니다.

SOAP 처리를 건너뛰기 때문에 MESSAGE 모드에서 SOAP 헤더를 사용할 수 없습니다.

77.20. Apache Camel에서 SOAP Fault를 throw하는 방법

SOAP 요청을 사용하기 위해 CXF 엔드포인트를 사용하는 경우 camel 컨텍스트에서 SOAP Fault 를 throw해야 할 수 있습니다. 기본적으로 throwFault DSL을 사용하여 이 작업을 수행할 수 있습니다. POJO,PAYLOADMESSAGE 데이터 형식에 대해 작동합니다. 다음과 같이 soap 오류를 정의할 수 있습니다.

SOAP_FAULT = new SoapFault(EXCEPTION_MESSAGE, SoapFault.FAULT_CODE_CLIENT);
Element detail = SOAP_FAULT.getOrCreateDetail();
Document doc = detail.getOwnerDocument();
Text tn = doc.createTextNode(DETAIL_TEXT);
detail.appendChild(tn);

그런 다음, 원하는 대로 던질 수 있습니다:

from(routerEndpointURI).setFaultBody(constant(SOAP_FAULT));

CXF 끝점이 MESSAGE 데이터 형식으로 작동하는 경우 메시지 본문에서 SOAP Fault 메시지를 설정하고 메시지 헤더에 응답 코드를 설정할 수 있습니다.

from(routerEndpointURI).process(new Processor() {

    public void process(Exchange exchange) throws Exception {
        Message out = exchange.getOut();
        // Set the message body with the
        out.setBody(this.getClass().getResourceAsStream("SoapFaultMessage.xml"));
        // Set the response code here
        out.setHeader(org.apache.cxf.message.Message.RESPONSE_CODE, new Integer(500));
    }

});

POJO 데이터 형식에도 마찬가지입니다. Out body에 SOAP Fault를 설정하고 다음과 같이 Message.setFault(true) 를 호출하여 오류임을 나타낼 수 있습니다.

from("direct:start").onException(SoapFault.class).maximumRedeliveries(0).handled(true)
    .process(new Processor() {
        public void process(Exchange exchange) throws Exception {
            SoapFault fault = exchange
                .getProperty(Exchange.EXCEPTION_CAUGHT, SoapFault.class);
            exchange.getOut().setFault(true);
            exchange.getOut().setBody(fault);
        }

    }).end().to(serviceURI);

77.21. CXF 엔드포인트의 요청 및 응답 컨텍스트를 전파하는 방법

CXF 클라이언트 API 는 요청 및 응답 컨텍스트를 사용하여 작업을 호출할 수 있는 방법을 제공합니다. CXF 엔드포인트 생산자를 사용하여 외부 웹 서비스를 호출하는 경우 요청 컨텍스트를 설정하고 다음 코드로 응답 컨텍스트를 가져올 수 있습니다.

        CxfExchange exchange = (CxfExchange)template.send(getJaxwsEndpointUri(), new Processor() {
             public void process(final Exchange exchange) {
                 final List<String> params = new ArrayList<String>();
                 params.add(TEST_MESSAGE);
                 // Set the request context to the inMessage
                 Map<String, Object> requestContext = new HashMap<String, Object>();
                 requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, JAXWS_SERVER_ADDRESS);
                 exchange.getIn().setBody(params);
                 exchange.getIn().setHeader(Client.REQUEST_CONTEXT , requestContext);
                 exchange.getIn().setHeader(CxfConstants.OPERATION_NAME, GREET_ME_OPERATION);
             }
         });
         org.apache.camel.Message out = exchange.getOut();
         // The output is an object array, the first element of the array is the return value
         Object\[\] output = out.getBody(Object\[\].class);
         LOG.info("Received output text: " + output\[0\]);
         // Get the response context form outMessage
         Map<String, Object> responseContext = CastUtils.cast((Map)out.getHeader(Client.RESPONSE_CONTEXT));
         assertNotNull(responseContext);
         assertEquals("Get the wrong wsdl opertion name", "{http://apache.org/hello_world_soap_http}greetMe",
                      responseContext.get("javax.xml.ws.wsdl.operation").toString());

77.22. 첨부 파일 지원

POJO 모드: Attachment 및 MTOM을 사용하는 SOAP가 모두 지원됩니다( MTOM 활성화를 위한 Payload Mode 예제 참조). 그러나 Attachment를 사용한 SOAP은 테스트되지 않습니다. 첨부 파일은 POJO로 마샬링 및 손상되지 않으므로 일반적으로 사용자는 첨부 파일을 직접 처리할 필요가 없습니다. 첨부 파일은 2.1 이후 Camel 메시지의 첨부 파일에 전파됩니다. 따라서 Camel Message API로 다시 연결할 수 있습니다.

DataHandler Message.getAttachment(String id)

.

페이로드 모드: MTOM은 2.1 이후 지원됩니다. 위에서 언급한 Camel Message API를 통해 첨부 파일을 검색할 수 있습니다. 이 모드에서는 SOAP 처리가 없기 때문에 Attachment를 사용한 SOAP가 지원되지 않습니다.

MTOM을 활성화하려면 CXF 엔드포인트 속성 "mtom_enabled"를 true 로 설정합니다. (나는 봄에만 할 수 있다고 생각합니다.)

<cxf:cxfEndpoint id="routerEndpoint" address="http://localhost:${CXFTestSupport.port1}/CxfMtomRouterPayloadModeTest/jaxws-mtom/hello"
         wsdlURL="mtom.wsdl"
         serviceName="ns:HelloService"
         endpointName="ns:HelloPort"
         xmlns:ns="http://apache.org/camel/cxf/mtom_feature">

     <cxf:properties>
         <!--  enable mtom by setting this property to true -->
         <entry key="mtom-enabled" value="true"/>

         <!--  set the camel-cxf endpoint data fromat to PAYLOAD mode -->
         <entry key="dataFormat" value="PAYLOAD"/>
     </cxf:properties>

Payload 모드에서 CXF 엔드포인트에 보낼 첨부 파일로 Camel 메시지를 생성할 수 있습니다.

Exchange exchange = context.createProducerTemplate().send("direct:testEndpoint", new Processor() {

    public void process(Exchange exchange) throws Exception {
        exchange.setPattern(ExchangePattern.InOut);
        List&lt;Source> elements = new ArrayList&lt;Source>();
        elements.add(new DOMSource(DOMUtils.readXml(new StringReader(MtomTestHelper.REQ_MESSAGE)).getDocumentElement()));
        CxfPayload<SoapHeader> body = new CxfPayload<SoapHeader>(new ArrayList<SoapHeader>(),
            elements, null);
        exchange.getIn().setBody(body);
        exchange.getIn().addAttachment(MtomTestHelper.REQ_PHOTO_CID,
            new DataHandler(new ByteArrayDataSource(MtomTestHelper.REQ_PHOTO_DATA, "application/octet-stream")));

        exchange.getIn().addAttachment(MtomTestHelper.REQ_IMAGE_CID,
            new DataHandler(new ByteArrayDataSource(MtomTestHelper.requestJpeg, "image/jpeg")));

    }

});

// process response

CxfPayload<SoapHeader> out = exchange.getOut().getBody(CxfPayload.class);
Assert.assertEquals(1, out.getBody().size());

Map<String, String> ns = new HashMap<String, String>();
ns.put("ns", MtomTestHelper.SERVICE_TYPES_NS);
ns.put("xop", MtomTestHelper.XOP_NS);

XPathUtils xu = new XPathUtils(ns);
Element oute = new XmlConverter().toDOMElement(out.getBody().get(0));
Element ele = (Element)xu.getValue("//ns:DetailResponse/ns:photo/xop:Include", oute,
                                   XPathConstants.NODE);
String photoId = ele.getAttribute("href").substring(4); // skip "cid:"

ele = (Element)xu.getValue("//ns:DetailResponse/ns:image/xop:Include", oute,
                                   XPathConstants.NODE);
String imageId = ele.getAttribute("href").substring(4); // skip "cid:"

DataHandler dr = exchange.getOut().getAttachment(photoId);
Assert.assertEquals("application/octet-stream", dr.getContentType());
MtomTestHelper.assertEquals(MtomTestHelper.RESP_PHOTO_DATA, IOUtils.readBytesFromStream(dr.getInputStream()));

dr = exchange.getOut().getAttachment(imageId);
Assert.assertEquals("image/jpeg", dr.getContentType());

BufferedImage image = ImageIO.read(dr.getInputStream());
Assert.assertEquals(560, image.getWidth());
Assert.assertEquals(300, image.getHeight());

Payload 모드에서 CXF 엔드포인트에서 받은 Camel 메시지를 사용할 수도 있습니다.

public static class MyProcessor implements Processor {

    @SuppressWarnings("unchecked")
    public void process(Exchange exchange) throws Exception {
        CxfPayload<SoapHeader> in = exchange.getIn().getBody(CxfPayload.class);

        // verify request
        assertEquals(1, in.getBody().size());

        Map<String, String> ns = new HashMap<String, String>();
        ns.put("ns", MtomTestHelper.SERVICE_TYPES_NS);
        ns.put("xop", MtomTestHelper.XOP_NS);

        XPathUtils xu = new XPathUtils(ns);
        Element body = new XmlConverter().toDOMElement(in.getBody().get(0));
        Element ele = (Element)xu.getValue("//ns:Detail/ns:photo/xop:Include", body,
                                           XPathConstants.NODE);
        String photoId = ele.getAttribute("href").substring(4); // skip "cid:"
        assertEquals(MtomTestHelper.REQ_PHOTO_CID, photoId);

        ele = (Element)xu.getValue("//ns:Detail/ns:image/xop:Include", body,
                                           XPathConstants.NODE);
        String imageId = ele.getAttribute("href").substring(4); // skip "cid:"
        assertEquals(MtomTestHelper.REQ_IMAGE_CID, imageId);

        DataHandler dr = exchange.getIn().getAttachment(photoId);
        assertEquals("application/octet-stream", dr.getContentType());
        MtomTestHelper.assertEquals(MtomTestHelper.REQ_PHOTO_DATA, IOUtils.readBytesFromStream(dr.getInputStream()));

        dr = exchange.getIn().getAttachment(imageId);
        assertEquals("image/jpeg", dr.getContentType());
        MtomTestHelper.assertEquals(MtomTestHelper.requestJpeg, IOUtils.readBytesFromStream(dr.getInputStream()));

        // create response
        List&lt;Source> elements = new ArrayList&lt;Source>();
        elements.add(new DOMSource(DOMUtils.readXml(new StringReader(MtomTestHelper.RESP_MESSAGE)).getDocumentElement()));
        CxfPayload&lt;SoapHeader> sbody = new CxfPayload&lt;SoapHeader>(new ArrayList&lt;SoapHeader>(),
            elements, null);
        exchange.getOut().setBody(sbody);
        exchange.getOut().addAttachment(MtomTestHelper.RESP_PHOTO_CID,
            new DataHandler(new ByteArrayDataSource(MtomTestHelper.RESP_PHOTO_DATA, "application/octet-stream")));

        exchange.getOut().addAttachment(MtomTestHelper.RESP_IMAGE_CID,
            new DataHandler(new ByteArrayDataSource(MtomTestHelper.responseJpeg, "image/jpeg")));

    }
}

메시지 모드: 첨부 파일은 메시지를 처리하지 않으므로 지원되지 않습니다.

CXF_MESSAGE 모드: MTOM이 지원되며 위에서 언급한 Camel Message API를 통해 첨부 파일을 검색할 수 있습니다. 멀티 파트 (즉, MTOM) 메시지를 수신할 때 기본 SOAPMessage to String 변환기가 본문에 대한 전체 멀티 파트 페이로드를 제공합니다. SOAP XML만 문자열이 필요한 경우 message.getSOAPPart() 를 사용하여 메시지 본문을 설정할 수 있으며 Camel 변환은 나머지 작업을 수행할 수 있습니다.

77.23. 스택 추적 정보를 전파하는 방법

서버 측에서 Java 예외가 throw되면 예외에 대한 스택 추적이 오류 메시지로 마샬링되고 클라이언트에 반환되는 CXF 엔드포인트를 구성할 수 있습니다. 이 feaure를 활성화하려면 dataFormatPAYLOAD 로 설정하고 cxfEndpoint 요소에서 faultStackTraceEnabled 속성을 true 로 설정합니다.

<cxf:cxfEndpoint id="router" address="http://localhost:9002/TestMessage"
    wsdlURL="ship.wsdl"
    endpointName="s:TestSoapEndpoint"
    serviceName="s:TestService"
    xmlns:s="http://test">
  <cxf:properties>
    <!-- enable sending the stack trace back to client; the default value is false-->
    <entry key="faultStackTraceEnabled" value="true" /> <entry key="dataFormat" value="PAYLOAD" />
  </cxf:properties>
</cxf:cxfEndpoint>

보안상의 이유로 스택 추적에는 원인이 되는 예외(즉, 스택 추적의 일부)가 포함되어 있지 않습니다. 스택 추적에 causing 예외를 포함하려면 cxfEndpoint 요소에서 exceptionMessage causesEnabled 속성을 true 로 설정합니다.

<cxf:cxfEndpoint id="router" address="http://localhost:9002/TestMessage"
    wsdlURL="ship.wsdl"
    endpointName="s:TestSoapEndpoint"
    serviceName="s:TestService"
    xmlns:s="http://test">
  <cxf:properties>
    <!-- enable to show the cause exception message and the default value is false -->
    <entry key="exceptionMessageCauseEnabled" value="true" />
    <!-- enable to send the stack trace back to client,  the default value is false-->
    <entry key="faultStackTraceEnabled" value="true" />
    <entry key="dataFormat" value="PAYLOAD" />
  </cxf:properties>
</cxf:cxfEndpoint>
주의

테스트 및 진단 목적으로 exceptionMessage causesEnabled 플래그만 활성화해야 합니다. 서버가 예외의 원래 원인을 숨기고 사용자가 서버를 더 쉽게 검색할 수 있도록 하는 것이 일반적입니다.

77.24. PAYLOAD 모드에서 스트리밍 지원

2.8.2에서 camel-cxf 구성 요소는 PAYLOAD 모드를 사용할 때 수신 메시지의 스트리밍을 지원합니다. 이전에는 들어오는 메시지가 완전히 DOM 구문 분석되었습니다. 대규모 메시지의 경우 시간이 오래 걸리고 상당한 양의 메모리를 사용합니다. 2.8.2부터, 수신 메시지는 라우팅되는 동안 javax.xml.transform.Source로 남아 있을 수 있으며, 아무 것도 페이로드를 수정하지 않으면 대상 목적지로 직접 스트리밍할 수 있습니다. 일반적인 "간단 프록시" 사용 사례(예:("cxf:…​").to("cxf:…​")의 경우 성능이 크게 향상되고 메모리 요구 사항이 크게 저하될 수 있습니다.

그러나 스트리밍이 적절하지 않거나 바람직하지 않은 경우가 있습니다. 스트리밍 특성으로 인해 처리 체인에서 나중에 수신될 때까지 잘못된 수신 XML이 캡처되지 않을 수 있습니다. 또한 특정 동작에서는 메시지를 그대로(예: WS-Security 또는 메시지 추적 등과 같이)로 구문 분석해야 할 수 있습니다.이 경우 스트리밍의 장점이 제한됩니다. 이 시점에서 스트리밍을 제어하는 두 가지 방법이 있습니다.

  • endpoint 속성: "allowStreaming=false"를 끝점 속성으로 추가하여 스트리밍을 해제할 수 있습니다.
  • 구성 요소 속성: CxfComponent 개체에도 해당 구성 요소에서 생성된 엔드포인트의 기본값을 설정할 수 있는 allowStreaming 속성이 있습니다.
  • 글로벌 시스템 속성: "org.apache.camel.component.cxf.streaming"의 시스템 속성을 "false"에 추가하여 끌 수 있습니다. 즉, 글로벌 기본값을 설정하지만 위의 엔드포인트 속성을 설정하면 해당 끝점에 대한 이 값이 재정의됩니다.

77.25. 일반 CXF Dispatch 모드 사용

2.8.0에서 camel-cxf 구성 요소는 임의의 구조의 메시지를 전송할 수 있는 일반 CXF 디스패치 모드 를 지원합니다(즉, 특정 XML 스키마에 바인딩되지 않음). 이 모드를 사용하려면 CXF 끝점의 wsdlURL 및 serviceClass 속성만 지정하면 됩니다.

<cxf:cxfEndpoint id="testEndpoint" address="http://localhost:9000/SoapContext/SoapAnyPort">
  <cxf:properties>
    <entry key="dataFormat" value="PAYLOAD"/>
  </cxf:properties>
</cxf:cxfEndpoint>

기본 CXF 디스패치 클라이언트는 특정 SOAPAction 헤더를 전송하지 않습니다. 따라서 대상 서비스에 특정 SOAPAction 값이 필요한 경우 키 SOAPAction(대소문자를 구분하지 않음)을 사용하여 Camel 헤더에 제공됩니다.

77.1. {wildfly}의 CXF 소비자

{wildfly}에서 camel-cxf 소비자의 구성은 독립 실행형 Camel의 구성과 다릅니다. 생산자 끝점은 정상적으로 작동합니다.

{wildfly}에서 camel-cxf 소비자는 컨테이너에서 제공하는 기본 Undertow HTTP 서버를 활용합니다. 서버는 undertow 하위 시스템 구성 내에 정의됩니다. 다음은 standalone.xml의 기본 구성의 발췌 내용입니다.

<subsystem xmlns="urn:jboss:domain:undertow:4.0">
    <buffer-cache name="default" />
    <server name="default-server">
        <http-listener name="default" socket-binding="http" redirect-socket="https" enable-http2="true" />
        <https-listener name="https" socket-binding="https" security-realm="ApplicationRealm" enable-http2="true" />
        <host name="default-host" alias="localhost">
            <location name="/" handler="welcome-content" />
            <filter-ref name="server-header" />
            <filter-ref name="x-powered-by-header" />
            <http-invoker security-realm="ApplicationRealm" />
        </host>
    </server>
</subsystem>

이 인스턴스에서 Undertow는 http 및 https socket-binding에서 지정된 인터페이스 / 포트에서 수신 대기하도록 구성됩니다. 기본적으로 이는 https의 경우 http 및 8443의 포트 8080입니다.

예를 들어 다른 호스트 또는 포트 조합을 사용하여 끝점 소비자를 구성하면 서버 로그 파일에 경고가 표시됩니다. 예를 들어 다음 호스트 및 포트 구성은 무시됩니다.

<cxf:rsServer id="cxfRsConsumer"
              address="http://somehost:1234/path/to/resource"
              serviceClass="org.example.ServiceClass" />
<cxf:cxfEndpoint id="cxfWsConsumer"
                 address="http://somehost:1234/path/to/resource"
                 serviceClass="org.example.ServiceClass" />
[org.wildfly.extension.camel] (pool-2-thread-1) Ignoring configured host: http://somehost:1234/path/to/resource

그러나 소비자는 여전히 기본 호스트 localhost:8080 또는 localhost:8443에서 사용할 수 있습니다.

참고

camel-cxf 소비자를 사용하는 애플리케이션은 WAR로 패키징 해야 합니다. 이전 {wildfly-camel} 릴리스에서 JAR과 같은 다른 유형의 아카이브는 허용되지만 더 이상 지원되지 않습니다.

77.1.1. 대체 포트 구성

대체 포트를 수락하려면 {wildfly} 하위 시스템 구성을 통해 대체 포트를 구성해야 합니다. 이 내용은 서버 문서에 설명되어 있습니다.

https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform/7.1/html/configuration_guide/configuring_the_web_server_undertow

77.1.2. SSL 구성

SSL을 구성하려면 {wildfly} SSL 구성 가이드를 참조하십시오.

https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform/7.1/html-single/how_to_configure_server_security/#configure_one_way_and_two_way_ssl_tls_for_application

77.1.3. Elytron를 사용하여 보안 구성

{Wildfly-camel}는 Elytron 보안 프레임워크를 사용하여 camel-cxf 소비자 엔드포인트의 보안을 지원합니다.

77.1.3.1. 보안 도메인 구성

Elytron를 사용하여 {wildfly-camel} 애플리케이션을 보호하려면 WAR 배포의 WEB-INF/jboss-web.xml 내에서 애플리케이션 보안 도메인을 참조해야 합니다.

<jboss-web>
  <security-domain>my-application-security-domain</security-domain>
</jboss-web>

< security-domain > 구성은 Undertow 하위 시스템에서 정의한 < application-security-domain >의 이름을 참조합니다. 예를 들어, Undertow 하위 시스템 < application-security-domain >은 다음과 같이 {wildfly} 서버 standalone.xml 구성 파일 내에 구성됩니다.

<subsystem xmlns="urn:jboss:domain:undertow:6.0">
    ...
    <application-security-domains>
        <application-security-domain name="my-application-security-domain" http-authentication-factory="application-http-authentication"/>
    </application-security-domains>
</subsystem>

& lt;http-authentication-factory > application-http-authentication 은 Elytron 하위 시스템에 정의되어 있습니다. application-http-authentication 은 기본적으로 standalone.xmlstandalone-full.xml 서버 구성 파일에서 사용할 수 있습니다. 예를 들면 다음과 같습니다.

<subsystem xmlns="urn:wildfly:elytron:1.2">
    ...
    <http>
        ...
        <http-authentication-factory name="application-http-authentication" http-server-mechanism-factory="global" security-domain="ApplicationDomain">
            <mechanism-configuration>
                <mechanism mechanism-name="BASIC">
                    <mechanism-realm realm-name="Application Realm" />
                </mechanism>
                <mechanism mechanism-name="FORM" />
            </mechanism-configuration>
        </http-authentication-factory>
        <provider-http-server-mechanism-factory name="global" />
    </http>
    ...
</subsystem>

application -http-authentication 이라는 <http-authentication-factory >는 ApplicationDomain 이라는 Elytron 보안 도메인에 대한 참조를 보유하고 있습니다.

Elytron 하위 시스템을 구성하는 방법에 대한 자세한 내용은 Elytron 설명서 를 참조하십시오.

77.1.3.2. 보안 제약 조건, 인증 방법 및 보안 역할 구성

camel-cxf 소비자 엔드 포인트에 대한 보안 제약 조건, 인증 방법 및 보안 역할은 WAR 배포 WEB-INF/web.xml 내에서 구성할 수 있습니다. 예를 들어 BASIC 인증을 구성하려면 다음을 수행합니다.

<web-app>
  <security-constraint>
    <web-resource-collection>
      <web-resource-name>secure</web-resource-name>
      <url-pattern>/webservices/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
      <role-name>my-role</role-name>
    </auth-constraint>
  </security-constraint>
  <security-role>
    <description>The role that is required to log in to /webservices/*</description>
    <role-name>my-role</role-name>
  </security-role>
  <login-config>
    <auth-method>BASIC</auth-method>
    <realm-name>my-realm</realm-name>
  </login-config>
</web-app>

Servlet Specification에 의해 정의된 < url-pattern >은 웹 애플리케이션의 컨텍스트 경로를 기준으로 합니다. 애플리케이션이 my-app.war 로 패키징된 경우 {wildfly}는 컨텍스트 경로 /my-app 및 < url-patternpattern > /webservices/*/my-app 와 관련된 경로에 적용됩니다.

예를 들어 http://my-server/my-app/webservices/my-endpoint 에 대한 요청은 /webservices/* 패턴과 일치하지만 http://my-server/webservices/my-endpoint 는 일치하지 않습니다.

이는 {wildfly-camel}을 사용하면 기본 경로가 호스트 웹 애플리케이션 컨텍스트 경로 외부에 있는 camel-cxf 엔드포인트 소비자를 생성할 수 있기 때문에 중요합니다. 예를 들어 my-app.war 내부에 http://my-server/webservices/my-endpoint 용 camel-cxf 소비자를 생성할 수 있습니다.

컨텍스트 외부 엔드포인트에 대한 보안 제약 조건을 정의하기 위해 {wildfly-camel}는 세 개의 슬래시 /// 를 사용하여 패턴을 접두사하는 사용자 지정 비 표준 <url- pattern> 규칙을 지원합니다. 예를 들어 my-app.war 내에서 http://my-server/webservices/my-endpoint 을 보호하려면 web.xml 에 다음 구성을 추가합니다.

<web-app>
  <security-constraint>
    <web-resource-collection>
      <web-resource-name>secure</web-resource-name>
      <url-pattern>///webservices/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
      <role-name>my-role</role-name>
    </auth-constraint>
  </security-constraint>
  <security-role>
    <description>The role that is required to log in to /webservices/*</description>
    <role-name>my-role</role-name>
  </security-role>
  <login-config>
    <auth-method>BASIC</auth-method>
    <realm-name>my-realm</realm-name>
  </login-config>
</web-app>

78장. CXF-RS 구성 요소

Camel 버전 2.0에서 사용 가능

cxfrs: 구성 요소는 CXF에서 호스팅되는 JAX-RS 1.1 및 2.0 서비스에 연결하기 위해 Apache CXF 와의 통합을 제공합니다.

CXF를 소비자로 사용할 때 CXF 빈 구성 요소 를 사용하면 메시지 페이로드를 RESTful 또는 SOAP 웹 서비스로 처리에서 수신하는 방법을 파악할 수 있습니다. 이는 웹 서비스를 이용하기 위해 많은 수의 교통 수단을 사용할 가능성이 있습니다. 빈 구성 요소의 구성은 더 간단하고 Camel 및 CXF를 사용하여 웹 서비스를 구현하는 가장 빠른 방법을 제공합니다.

Maven 사용자는 이 구성 요소를 위해 다음 종속성을 pom.xml에 추가해야 합니다.

<dependency>
   <groupId>org.apache.camel</groupId>
   <artifactId>camel-cxf</artifactId>
   <version>x.x.x</version>  <!-- use the same version as your Camel core version -->
</dependency>

78.1. URI 형식

cxfrs://address?options

여기서 address 는 CXF 끝점의 주소를 나타냅니다.

cxfrs:bean:rsEndpoint

여기서 rsEndpoint 는 CXFRS 클라이언트 또는 서버를 제공하는 Spring 빈의 이름을 나타냅니다.

위의 두 스타일 모두 다음과 같이 URI에 옵션을 추가할 수 있습니다.

cxfrs:bean:cxfEndpoint?resourceClasses=org.apache.camel.rs.Example

78.2. 옵션

CXF-RS 구성 요소는 아래에 나열된 3 가지 옵션을 지원합니다.

Expand
이름설명기본값유형

useGlobalSslContext 매개변수 (보안)

글로벌 SSL 컨텍스트 매개 변수의 사용을 활성화합니다.

false

boolean

headerFilterStrategy (filter)

사용자 지정 org.apache.camel.spi.HeaderFilterStrategy를 사용하여 Camel 메시지로 헤더를 필터링하려면 다음을 수행합니다.

 

HeaderFilterStrategy

resolveProperty Placeholders (advanced)

구성 요소가 시작 시 자체적으로 속성 자리 표시자를 확인해야 하는지 여부입니다. String 유형의 속성만 속성 자리 표시자를 사용할 수 있습니다.Only properties which are of String type can use property placeholders.

true

boolean

CXF-RS 엔드포인트는 URI 구문을 사용하여 구성됩니다.

cxfrs:beanId:address

다음 경로 및 쿼리 매개변수를 사용합니다.

78.2.1. 경로 매개 변수(2 매개변수):

Expand
이름설명기본값유형

beanId

기존 구성된 CxfRsEndpoint를 조회하려면 다음을 수행합니다. 빈: 를 접두사로 사용해야 합니다.

 

문자열

주소

서비스는 공개 주소입니다.

 

문자열

78.2.2. 쿼리 매개변수(29 매개변수):

Expand
이름설명기본값유형

기능 (일반)

기능 목록을 CxfRs 끝점으로 설정합니다.

 

list

loggingFeatureEnabled (common)

이 옵션을 사용하면 인바운드 및 아웃바운드 REST 메시지를 로그에 쓰는 CXF Logging 기능을 사용할 수 있습니다.

false

boolean

loggingSizeLimit (common)

로깅 기능을 활성화할 때 로거가 출력되는 총 바이트 크기를 제한하기 위해.

 

int

modelRef (일반)

이 옵션은 주석 없이 리소스 클래스에 유용한 모델 파일을 지정하는 데 사용됩니다. 이 옵션을 사용하면 문서 전용 엔드포인트를 에뮬레이션하기 위해 서비스 클래스를 생략할 수 있습니다.

 

문자열

공급자 (공용)

사용자 지정 JAX-RS 공급자 목록을 CxfRs 끝점으로 설정합니다. 쉼표로 구분된 등록에서 조회할 공급자 목록을 사용하여 문자열을 지정할 수 있습니다.

 

문자열

resourceClasses (공용)

REST 서비스로 내보낼 리소스 클래스입니다. 여러 클래스를 쉼표로 구분할 수 있습니다.

 

list

schemaLocations (공용)

들어오는 XML 또는 JAXB 기반 JSON의 유효성을 검사하는 데 사용할 수 있는 스키마의 위치를 설정합니다.

 

list

skipFaultLogging (일반)

이 옵션은 phaseInterceptorChain이 catch하는 Fault 로깅을 건너뛰는지 여부를 제어합니다.

false

boolean

바인딩Style (consumer)

요청 및 응답이 Camel에 매핑되는 방법을 설정합니다. 두 가지 값: SimpleConsumer: 이 바인딩 스타일은 요청 매개변수, 다중 파트 등을 처리하여 IN 헤더, IN 첨부 파일 및 메시지 본문에 매핑합니다. 이는 org.apache.cxf.message.MessageContentsList의 낮은 수준의 처리를 제거하는 것을 목표로 합니다. 또한 응답 매핑에 더 많은 유연성과 단순성을 추가합니다. 사용자만 사용할 수 있습니다. 기본값: 기본 스타일입니다. 소비자의 경우 이 경로가 MessageContentsList에서 전달되면 경로에서 하위 수준 처리가 필요합니다. 이는 CXF 스택에서 들어오는 org.apache.cxf.message.MessageContentsList를 IN 메시지 본문으로 덤프하는 기존의 바인딩 스타일입니다. 그런 다음 사용자는 JAX-RS 메서드 서명에 의해 정의된 계약에 따라 이를 처리합니다. custom: 바인딩 옵션을 통해 사용자 정의 바인딩을 지정할 수 있습니다.

기본값

BindingStyle

bridgeErrorHandler (consumer)

소비자를 Camel 라우팅 오류 처리기에 브리징할 수 있습니다. 이는 소비자가 들어오는 메시지를 선택하는 동안 예외가 발생한 것을 의미하며, 이제 메시지로 처리되어 라우팅 오류 처리기에 의해 처리됩니다. 기본적으로 소비자는 org.apache.camel.spi.ExceptionHandler를 사용하여 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

false

boolean

publishedEndpointUrl (consumer)

이 옵션은 리소스 주소 URL과 _wadl을 사용하여 액세스할 수 있는 WADL에서 게시한 endpointUrl을 재정의할 수 있습니다.

 

문자열

예외 처리기 (consumer)

소비자가 사용자 지정 ExceptionHandler를 사용하도록 하려면 다음을 수행합니다. bridgeErrorHandler 옵션이 활성화되어 있는지 확인한 후 이 옵션이 사용되지 않습니다. 기본적으로 소비자는 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

 

ExceptionHandler

exchangePattern (consumer)

소비자가 교환을 생성할 때 교환 패턴을 설정합니다.

 

ExchangePattern

cookieHandler (producer)

HTTP 세션을 유지 관리하도록 쿠키 처리기 구성

 

CookieHandler

HostnameVerifier (producer)

사용할 호스트 이름 확인기입니다. 레지스트리에서 HostnameVerifier를 참조하려면 표기법을 사용합니다.

 

HostnameVerifier

sslContextParameters (producer)

Camel SSL 설정 참조. 표기법을 사용하여 SSL 컨텍스트를 참조합니다.

 

SSLContextParameters

throwExceptionOnFailure (producer)

이 옵션은 CxfRsProducer에 반환 코드를 검사하도록 지시하고 반환 코드가 207보다 크면 Exception을 생성합니다.

true

boolean

httpClientAPI (producer)

true인 경우 CxfRsProducer는 HttpClientAPI를 사용하여 서비스를 호출합니다. false인 경우 CxfRsProducer는 ProxyClientAPI를 사용하여 서비스를 호출할 것입니다.

true

boolean

ignoreDeleteMethodMessage Body (producer)

이 옵션은 HTTP API를 사용할 때 CxfRsProducer에 DELETE 메서드의 메시지 본문을 무시하도록 하는 데 사용됩니다.

false

boolean

maxClientCacheSize (producer)

이 옵션을 사용하면 캐시의 최대 크기를 구성할 수 있습니다. 구현은 CxfProvider 및 CxfRsProvider에서 CXF 클라이언트 또는 ClientFactoryBean을 캐시합니다.

10

int

바인딩 (advanced)

사용자 지정 CxfBinding을 사용하여 Camel Message와 CXF 메시지 간의 바인딩을 제어합니다.

 

CxfRsBinding

버스 (advanced)

사용자 정의 구성된 CXF 버스를 사용합니다.

 

버스

ContinuationTimeout (advanced)

이 옵션은 CXF 서버가 Jetty 또는 Servlet 전송을 사용하는 경우 기본적으로 CxfConsumer에서 사용할 수 있는 CXF 연속 타임아웃을 설정하는 데 사용됩니다.

30000

long

cxfRsEndpointConfigurer (advanced)

이 옵션은 프로그래밍 방식으로 CXF 엔드포인트를 구성하도록 지원하는 org.apache.camel.component.cxf.jaxfRsEndpointConfigurer의 구현을 적용할 수 있습니다. 사용자는 CxfEndpointConfigurer의 configureServer/Client 메서드를 구현하여 CXF 서버 및 클라이언트를 구성할 수 있습니다.

 

CxfRsEndpoint Configurer

defaultBus (advanced)

CXF 엔드포인트가 자체적으로 버스를 생성할 때 기본 버스를 설정합니다.

false

boolean

headerFilterStrategy (advanced)

사용자 지정 HeaderFilterStrategy를 사용하여 Camel 메시지와의 헤더를 필터링합니다.

 

HeaderFilterStrategy

performInvocation (advanced)

옵션이 true이면 Camel은 리소스 클래스 인스턴스를 호출하고 추가 처리를 위해 response 오브젝트를 교환에 넣습니다.

false

boolean

propagateContexts (advanced)

옵션이 true인 경우, JAXRS UriInfo, HttpHeaders, Request 및 SecurityContext 컨텍스트를 입력한 Camel 교환 속성으로 사용자 지정 CXFRS 프로세서에서 사용할 수 있습니다. 이러한 컨텍스트는 JAX-RS API를 사용하여 현재 요청을 분석하는 데 사용할 수 있습니다.

false

boolean

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

또한 Spring 구성을 통해 CXF REST 엔드포인트를 구성할 수도 있습니다. CXF REST 클라이언트와 CXF REST 서버 간에는 많은 차이가 있으므로 서로 다른 구성을 제공합니다. 자세한 내용은 스키마 파일CXF JAX-RS 설명서 를 확인하십시오.

78.3. Camel에서 REST 엔드포인트 구성 방법

camel-cxf 스키마 파일에 는 REST 엔드포인트 정의에 대한 두 가지 요소가 있습니다. REST 소비자용 CXF :rsServer, REST 프로듀서용 cxf:rsClient.
Camel REST 서비스 경로 구성 예는 여기에서 확인할 수 있습니다.

78.4. 메시지 헤더에서 CXF 생산자 주소를 재정의하는 방법

camel-cxfrs 생산자는 메시지를 "CamelDestinationOverrideUrl"의 키로 설정하여 서비스 주소를 덮어쓰도록 지원합니다.

 // set up the service address from the message header to override the setting of CXF endpoint
 exchange.getIn().setHeader(Exchange.DESTINATION_OVERRIDE_URL, constant(getServiceAddress()));

78.5. REST 요청 사용 - 단순 바인딩 스타일

Camel 2.11에서 사용 가능

기본 바인딩 스타일은 다소 낮기 때문에 사용자가 수동으로 MessageContentsList 개체를 경로로 처리해야합니다. 따라서 경로 논리를 JAX-RS 작업의 메서드 서명 및 매개 변수 인덱스와 밀접하게 연결합니다. 어려웠고, 오류가 발생하기도 합니다.

반면 SimpleConsumer 바인딩 스타일은 Camel Message 내에서 요청 데이터에 보다 쉽게 액세스 할 수 있도록 다음 매핑을 수행합니다.

  • JAX-RS 매개 변수(@HeaderParam, @QueryParam 등)가 IN 메시지 헤더로 삽입됩니다. 헤더 이름은 주석의 값과 일치합니다.
  • 요청 엔티티(POJO 또는 기타 유형)는 IN 메시지 본문이 됩니다. JAX-RS 메서드 서명에서 단일 엔터티를 식별할 수 없는 경우 원래 MessageContentsList 로 돌아갑니다.
  • 바이너리 @Multipart 본문 부분은 IN 메시지 첨부 파일, DataHandler,InputStream,DataSource 및 CXF Attachment 클래스를 지원합니다.
  • 바이너리가 아닌 @Multipart body 부분은 IN 메시지 헤더로 매핑됩니다. 헤더 이름은 본문 파트 이름과 일치합니다.

또한 다음 규칙이 Response 매핑에 적용됩니다.

  • 메시지 본문 유형이 javax.ws.rs.core.Response (사용자 기반 응답)와 다른 경우 새 응답 을 생성하고 메시지 본문이 엔티티로 설정됩니다(즉 null이 아님). 응답 상태 코드는 Exchange.HTTP_RESPONSE_CODE 헤더에서 가져오거나, 없는 경우 기본값은 200 OK입니다.
  • 메시지 본문 유형이 javax.ws.rs.core.Response 와 동일한 경우, 사용자가 사용자 지정 응답을 작성했으므로 존중되고 최종 응답이 됩니다.
  • 모든 경우에 사용자 정의 또는 기본 HeaderFilterStrategy 에서 허용하는 Camel 헤더가 HTTP 응답에 추가됩니다.

78.5.1. 단순 바인딩 스타일 사용

이 바인딩 스타일은 소비자 끝점의 bindingStyle 매개 변수를 SimpleConsumer 값으로 설정하여 활성화할 수 있습니다.

  from("cxfrs:bean:rsServer?bindingStyle=SimpleConsumer")
    .to("log:TEST?showAll=true");

78.5.2. 다양한 메서드 서명을 사용한 요청 바인딩의 예

다음은 간단한 바인딩에서 예상되는 결과와 함께 메서드 서명 목록입니다.Below is a list of method signatures along with the expected result from the Simple binding.

공용 응답 doAction(BusinessObject 요청):
요청 페이로드는 IN 메시지 본문에 배치되어 원래 MessageContentsList를 대체합니다.

공용 응답 doAction(BusinessObject 요청, @HeaderParam("abcd") String abcd, @QueryParam("defg") String defg); 원본 MessageContentsList를 대체한 IN 메시지 본문에 배치된 요청 페이로드입니다. 두 요청 매개변수 모두 이름이 abcd 및 defg인 IN 메시지 헤더로 매핑됩니다.

공용 응답 doAction(@HeaderParam("abcd") String abcd, @QueryParam("defg") String defg); 두 요청 매개 변수는 모두 abcd 및 defg라는 이름으로 IN 메시지 헤더로 매핑됩니다. 원래의 MessageContentsList는 2 매개변수만 포함되어 있어도 보존됩니다.

Public Response doAction(@Multipart(value="body1") BusinessObject 요청2). 첫 번째 매개변수는 name body 1이 있는 헤더로 전송되고 두 번째 매개변수는 헤더 body2로 매핑됩니다. 원래 MessageContentsList는 IN 메시지 본문으로 보존됩니다.

공용 응답 doAction(InputStream abcd): InputStream은 MessageContentsList에서 래핑되지 않으며 IN 메시지 본문으로 보존됩니다.

공용 응답 doAction(DataHandler abcd): DataHandler는 MessageContentsList에서 래핑되지 않으며 IN 메시지 본문으로 보존됩니다.

78.5.3. 간단한 바인딩 스타일의 더 많은 예

이 메서드가 포함된 JAX-RS 리소스 클래스를 제공합니다.

    @POST @Path("/customers/{type}")
    public Response newCustomer(Customer customer, @PathParam("type") String type, @QueryParam("active") @DefaultValue("true") boolean active) {
        return null;
    }

다음 경로로 서비스를 제공합니다.

    from("cxfrs:bean:rsServer?bindingStyle=SimpleConsumer")
        .recipientList(simple("direct:${header.operationName}"));

    from("direct:newCustomer")
        .log("Request: type=${header.type}, active=${header.active}, customerData=${body}");

XML 페이로드를 사용하는 다음 HTTP 요청(고객 DTO는 JAXB-annotated임)

POST /customers/gold?active=true

Payload:
<Customer>
  <fullName>Raul Kripalani</fullName>
  <country>Spain</country>
  <project>Apache Camel</project>
</Customer>

메시지를 출력합니다.

Request: type=gold, active=true, customerData=<Customer.toString() representation>

요청 및 쓰기 응답을 처리하는 방법에 대한 자세한 예제는 여기에서 확인할 수 있습니다.

78.6. REST 요청 사용 - 기본 바인딩 스타일

CXF JAXRS 프론트엔드JAX-RS(JSR-311) API 를 구현하므로 리소스 클래스를 REST 서비스로 내보낼 수 있습니다. 또한 CXF invocationr API 를 활용하여 REST 요청을 일반 Java 객체 메서드 호출로 전환합니다.
Camel Restlet 구성 요소와 달리, 끝점 내에서 URI 템플릿을 지정할 필요가 없으며 CXF는 JSR-311 사양에 따라 REST 요청 URI를 리소스 클래스 메서드 매핑에 처리합니다. Camel에서 수행하는 데 필요한 것은 이 방법 요청을 적절한 프로세서 또는 엔드포인트에 위임하는 것입니다.

CXFRS 경로의 예는 다음과 같습니다.

private static final String CXF_RS_ENDPOINT_URI =
        "cxfrs://http://localhost:" + CXT + "/rest?resourceClasses=org.apache.camel.component.cxf.jaxrs.testbean.CustomerServiceResource";
private static final String CXF_RS_ENDPOINT_URI2 =
        "cxfrs://http://localhost:" + CXT + "/rest2?resourceClasses=org.apache.camel.component.cxf.jaxrs.testbean.CustomerService";
private static final String CXF_RS_ENDPOINT_URI3 =
        "cxfrs://http://localhost:" + CXT + "/rest3?"
        + "resourceClasses=org.apache.camel.component.cxf.jaxrs.testbean.CustomerServiceNoAnnotations&"
        + "modelRef=classpath:/org/apache/camel/component/cxf/jaxrs/CustomerServiceModel.xml";
private static final String CXF_RS_ENDPOINT_URI4 =
        "cxfrs://http://localhost:" + CXT + "/rest4?"
        + "modelRef=classpath:/org/apache/camel/component/cxf/jaxrs/CustomerServiceDefaultHandlerModel.xml";
private static final String CXF_RS_ENDPOINT_URI5 =
        "cxfrs://http://localhost:" + CXT + "/rest5?"
        + "propagateContexts=true&"
        + "modelRef=classpath:/org/apache/camel/component/cxf/jaxrs/CustomerServiceDefaultHandlerModel.xml";
protected RouteBuilder createRouteBuilder() throws Exception {
    final Processor testProcessor = new TestProcessor();
    final Processor testProcessor2 = new TestProcessor2();
    final Processor testProcessor3 = new TestProcessor3();
    return new RouteBuilder() {
        public void configure() {
            errorHandler(new NoErrorHandlerBuilder());
            from(CXF_RS_ENDPOINT_URI).process(testProcessor);
            from(CXF_RS_ENDPOINT_URI2).process(testProcessor);
            from(CXF_RS_ENDPOINT_URI3).process(testProcessor);
            from(CXF_RS_ENDPOINT_URI4).process(testProcessor2);
            from(CXF_RS_ENDPOINT_URI5).process(testProcessor3);
        }
    };
}

또한 endpoint…​을 구성하는 데 사용되는 해당 리소스 클래스입니다.

INFO:* 리소스 클래스에 대한 참고*

기본적으로 JAX-RS 리소스 클래스는 JAX-RS 속성을 구성하는 데 사용되는 only*used입니다. 메서드는 끝점으로 메시지를 라우팅하는 동안 *not 가 실행됩니다. 대신, 모든 처리를 수행하는 경로의 책임이 있습니다.

Camel 2.15부터 기본 모드에 대한 no-op 서비스 구현 클래스와 달리 인터페이스를 제공하는 것도 충분합니다.

Camel 2.15부터 performInvocation 옵션이 활성화되면 서비스 구현이 먼저 호출되고 Camel 교환에 응답이 설정되고 경로 실행이 평소와 같이 계속됩니다. 이는 기존 JAX-RS 구현을 Camel 경로에 통합하고 사용자 지정 프로세서에서 JAX-RS 응답을 후처리하는 데 유용할 수 있습니다.

78.7. camel-cxfrs 생산자를 통해 REST 서비스를 호출하는 방법

CXF JAXRS 프런트 엔드프록시 기반 클라이언트 API 를 구현합니다. 이 API는 프록시를 통해 원격 REST 서비스를 호출할 수 있습니다. camel-cxfrs 생산자는 이 프록시 API 를 기반으로 합니다.
메시지 헤더에 작업 이름을 지정하고 메시지 본문에 매개 변수를 준비하면 camel-cxfrs 생산자가 올바른 REST 요청을 생성합니다.

예를 들면 다음과 같습니다.

Exchange exchange = template.send("direct://proxy", new Processor() {
    public void process(Exchange exchange) throws Exception {
        exchange.setPattern(ExchangePattern.InOut);
        Message inMessage = exchange.getIn();
        // set the operation name
        inMessage.setHeader(CxfConstants.OPERATION_NAME, "getCustomer");
        // using the proxy client API
        inMessage.setHeader(CxfConstants.CAMEL_CXF_RS_USING_HTTP_API, Boolean.FALSE);
        // set a customer header
        inMessage.setHeader("key", "value");
        // setup the accept content type
        inMessage.setHeader(Exchange.ACCEPT_CONTENT_TYPE, "application/json");
        // set the parameters , if you just have one parameter
        // camel will put this object into an Object[] itself
        inMessage.setBody("123");
    }
});

// get the response message
Customer response = (Customer) exchange.getOut().getBody();

assertNotNull("The response should not be null ", response);
assertEquals("Get a wrong customer id ", 123, response.getId());
assertEquals("Get a wrong customer name", "John", response.getName());
assertEquals("Get a wrong response code", 200, exchange.getOut().getHeader(Exchange.HTTP_RESPONSE_CODE));
assertEquals("Get a wrong header value", "value", exchange.getOut().getHeader("key"));

CXF JAXRS 프런트 엔드http 중심 클라이언트 API를 제공합니다. 또한 camel-cxfrs 생산자에서 이 API를 호출할 수도 있습니다. HTTP_PATH 및 HTTP_METHOD 를 지정하고 생산자가 URI 옵션 httpClientAPI 를 사용하거나 메시지 헤더 CxfConstants.CAMEL_CXF_RS_USING_HTTP_API 를 설정하여 http 중심 클라이언트 API를 사용하도록 해야 합니다. 응답 개체를 메시지 헤더 CxfConstants.CAMEL_CXF_RS_RESPONSE_CLASS 로 지정된 유형 클래스에 전환할 수 있습니다.

Camel 2.1에서 CXFRS http 중심 클라이언트의 cxfrs URI에서 쿼리 매개변수를 지정할 수도 있습니다.

오류 형식 매크로: java.lang.IndexOutOfBoundsException: Index: 20, Size: 20

동적 라우팅을 지원하기 위해 CxfConstants.CAMXF_RS_QUERY_MAP 헤더를 사용하여 URI의 쿼리 매개 변수를 재정의하여 해당 URI에 대한 매개변수 맵을 설정할 수 있습니다.

78.8. CXF용 Camel Transport이란 무엇입니까?

CXF에서는 주소를 정의하여 웹 서비스를 제공하거나 사용합니다. 주소의 첫 번째 부분은 사용할 프로토콜을 지정합니다. 예를 들어, 끝점 설정의 address="http://localhost:9000"는 localhost의 포트 9000에서 http 프로토콜을 사용하여 서비스가 제공됨을 의미합니다. Camel Tranport를 CXF에 통합할 때 새로운 전송 "camel"을 받습니다. 따라서 CXF 서비스 주소를 camel 직접 엔드포인트에 바인딩하기 위해 address="camel://direct:MyEndpointName"을 지정할 수 있습니다.

기술적으로 CXF용 Camel 전송은 Camel 코어 라이브러리를 사용하여 CXF 전송 API 를 구현하는 구성 요소입니다. 이를 통해 CXF 서비스와 함께 Camel의 라우팅 엔진 및 통합 패턴을 쉽게 사용할 수 있습니다.

78.9. CXF 전송 계층에 Camel 통합

Camel Tranport를 CXF 버스에 포함하려면 CamelTransportFactory를 사용합니다. Java와 Spring에서도 이 작업을 수행할 수 있습니다.

78.9.1. Spring의 Camel 전송 설정

특별한 항목을 구성하려면 applicationcontext에서 다음 코드 조각을 사용할 수 있습니다. camel 전송을 활성화하기만 하면 애플리케이션 컨텍스트에서 아무 것도 할 필요가 없습니다. 앱에 camel-cxf-transport jar(또는 camel-cxf.jar가 2.7.x 미만일 경우)를 포함하면 cxf는 jar을 스캔하고 CamelTransportFactory를 로드합니다.

<!-- you don't need to specify the CamelTransportFactory configuration as it is auto load by CXF bus -->
<bean class="org.apache.camel.component.cxf.transport.CamelTransportFactory">
  <property name="bus" ref="cxf" />
  <property name="camelContext" ref="camelContext" />
  <!-- checkException new added in Camel 2.1 and Camel 1.6.2 -->
  <!-- If checkException is true , CamelDestination will check the outMessage's
     exception and set it into camel exchange. You can also override this value
     in CamelDestination's configuration. The default value is false.
     This option should be set true when you want to leverage the camel's error
     handler to deal with fault message -->
  <property name="checkException" value="true" />
  <property name="transportIds">
    <list>
      <value>http://cxf.apache.org/transports/camel</value>
    </list>
  </property>
</bean>

78.9.2. 프로그래밍 방식으로 Camel 전송 통합

Camel 전송에서는 Camel 컨텍스트를 전송 팩토리로 설정하는 데 사용할 수 있는 setContext 메서드를 제공합니다. 이 팩토리를 적용하려면, 당신은 CXF 버스에 공장을 등록해야합니다. 여기 당신을 위한 완전한 예가 있습니다.

import org.apache.cxf.Bus;
import org.apache.cxf.BusFactory;
import org.apache.cxf.transport.ConduitInitiatorManager;
import org.apache.cxf.transport.DestinationFactoryManager;
...

BusFactory bf = BusFactory.newInstance();
Bus bus = bf.createBus();
CamelTransportFactory camelTransportFactory = new CamelTransportFactory();
// set up the CamelContext which will be use by the CamelTransportFactory
camelTransportFactory.setCamelContext(context)
// if you are using CXF higher then 2.4.x the
camelTransportFactory.setBus(bus);

// if you are lower CXF, you need to register the ConduitInitiatorManager and DestinationFactoryManager like below
// register the conduit initiator
ConduitInitiatorManager cim = bus.getExtension(ConduitInitiatorManager.class);
cim.registerConduitInitiator(CamelTransportFactory.TRANSPORT_ID, camelTransportFactory);
// register the destination factory
DestinationFactoryManager dfm = bus.getExtension(DestinationFactoryManager.class);
dfm.registerDestinationFactory(CamelTransportFactory.TRANSPORT_ID, camelTransportFactory);
// set or bus as the default bus for cxf
BusFactory.setDefaultBus(bus);

78.10. 대상 구성 및 Spring

78.10.1. 네임스페이스

Camel 전송 끝점을 구성하는 데 사용되는 요소는 네임스페이스 http://cxf.apache.org/transports/camel 에 정의되어 있습니다. 일반적으로 접두사 camel 을 사용하는 것이 일반적입니다. Camel 전송 구성 요소를 사용하려면 아래에 표시된 행을 엔드포인트 구성 파일의 빈 요소에 추가해야 합니다. 또한 구성 요소의 네임스페이스를 xsi:schemaLocation 속성에 추가해야 합니다.

구성 네임스페이스 추가

<beans ...
       xmlns:camel="http://cxf.apache.org/transports/camel
       ...
       xsi:schemaLocation="...
                           http://cxf.apache.org/transports/camel
                           http://cxf.apache.org/transports/camel.xsd
                          ...>

78.10.2. 대상 요소

camel:destination 요소와 그 하위 항목을 사용하여 Camel 전송 서버 끝점을 구성합니다. camel:destination 요소는 끝점에 해당하는 WSDL 포트 요소를 지정하는 단일 속성, name 을 사용합니다. name 속성의 값은 portQName'.camel-destination' 형식을 사용합니다. 아래 예제는 endpoint 조각 < port binding="widgetSOAPBinding" name="widgetSOAPPort" >에서 지정한 엔드포인트에 대한 구성을 추가하는 데 사용되는 camel:destination 요소를 보여줍니다.http://widgets.widgetvendor.net

Camel:destination Element

...
  <camel:destination name="{http://widgets/widgetvendor.net}widgetSOAPPort.http-destination>
    <camelContext id="context" xmlns="http://activemq.apache.org/camel/schema/spring">
         <route>
           <from uri="direct:EndpointC" />
           <to uri="direct:EndpointD" />
         </route>
     </camelContext>
  </camel:destination>

  <!-- new added feature since Camel 2.11.x
  <camel:destination name="{http://widgets/widgetvendor.net}widgetSOAPPort.camel-destination" camelContextId="context" />

...

Spring의 camel:destination 요소에는 구성 정보를 지정하는 여러 자식 요소가 있습니다. 아래에 설명되어 있습니다.

요소

설명

camel-spring:camelContext

camel 대상에 camel 컨텍스트를 지정할 수 있습니다.

camel:camelContextRef

camel 대상에 삽입할 camel context id

78.10.3. 구성 요소

camel:conduit 요소와 하위 항목을 사용하여 Camel 전송 클라이언트를 구성합니다. camel:conduit 요소는 끝점에 해당하는 WSDL 포트 요소를 지정하는 단일 특성인 name 을 사용합니다. name 속성의 값은 portQName'.camel-conduit' 형식을 사용합니다. 예를 들어 아래 코드는 endpoint의 대상 네임스페이스가 http://widgets.widgetvendor.net 인 경우 WSDL 조각 < port binding="widgetSOAPBinding" name="widgetSOAPPort" >에 의해 지정된 엔드포인트에 대한 구성을 추가하는 데 사용되는 camel:conduit 요소를 보여줍니다.

http-conf:conduit Element

...
  <camelContext id="conduit_context" xmlns="http://activemq.apache.org/camel/schema/spring">
       <route>
           <from uri="direct:EndpointA" />
           <to uri="direct:EndpointB" />
       </route>
   </camelContext>

  <camel:conduit name="{http://widgets/widgetvendor.net}widgetSOAPPort.camel-conduit">
     <camel:camelContextRef>conduit_context</camel:camelContextRef>
  </camel:conduit>

  <!-- new added feature since Camel 2.11.x
  <camel:conduit name="{http://widgets/widgetvendor.net}widgetSOAPPort.camel-conduit" camelContextId="conduit_context" />


  <camel:conduit name="*.camel-conduit">
  <!-- you can also using the wild card to specify the camel-conduit that you want to configure -->
    ...
  </camel:conduit>
...

camel:conduit 요소에는 구성 정보를 지정하는 여러 자식 요소가 있습니다. 아래에 설명되어 있습니다.

요소

설명

camel-spring:camelContext

camel conduit에서 camel context를 지정할 수 있습니다.

camel:camelContextRef

<The camel context id that you want inject into the camel conduit>

78.11. 대상 구성 및 Blueprint를 사용하여 구성

Camel 2.11.x 로부터 Camel Transport는 Blueprint를 사용하여 구성할 수 있도록 지원합니다.

청사진을 사용하는 경우 네임스페이스 http://cxf.apache.org/transports/camel/blueprint 를 사용하고 블로깅과 같은 스키마를 가져와야 합니다.

청사진의 구성 네임스페이스 추가

<beans ...
       xmlns:camel="http://cxf.apache.org/transports/camel/blueprint"
       ...
       xsi:schemaLocation="...
                           http://cxf.apache.org/transports/camel/blueprint
                           http://cxf.apache.org/schmemas/blueprint/camel.xsd
                          ...>

camel:conduit camel:destination 에는 하나의 camelContextId 속성만 있으며 camel 대상에서 camel 컨텍스트를 지정하는 것은 지원되지 않습니다.

  <camel:conduit id="*.camel-conduit" camelContextId="camel1" />
  <camel:destination id="*.camel-destination" camelContextId="camel1" />

78.12. CXF의 로드 밸런서로 Camel 사용 예

이 예에서는 CXF에서 camel 부하 분산 기능을 사용하는 방법을 보여줍니다. CXF에서 구성 파일을 로드하고 "camel://direct:EndpointA" 및 "camel://direct:EndpointB" 주소에 끝점을 게시해야 합니다.

78.13. CXF에 Camel을 연결하는 방법 및 예제 완료

Apache Camel을 사용하여 CXF Webservice용 JMS 전송 개선 

79장. 데이터 형식 구성 요소

Camel 버전 2.12로 사용 가능

dataformat: 구성 요소를 사용하면 데이터 형식을 Camel 구성 요소로 사용할 수 있습니다.

79.1. URI 형식

dataformat:name:(marshal|unmarshal)[?options]

위치 이름은 데이터 형식의 이름입니다. 그리고 마샬링 또는 unmarshal으로 마샬링 해야 하는 작업이 뒤에 옵니다. 옵션은 사용 중인 데이터 형식 을 구성하는 데 사용됩니다. 지원하는 옵션에 대한 데이터 형식 설명서를 참조하십시오.

79.2. DataFormat 옵션

데이터 형식 구성 요소에는 옵션이 없습니다.

데이터 형식 엔드포인트는 URI 구문을 사용하여 구성됩니다.

dataformat:name:operation

다음 경로 및 쿼리 매개변수를 사용합니다.

79.2.1. 경로 매개 변수(2 매개변수):

Expand
이름설명기본값유형

name

필수 데이터 형식 이름

 

문자열

작업

마샬링 또는 unmarshal 중 하나를 사용하는 데 필요한 작업

 

문자열

79.2.2. 쿼리 매개변수(1 매개변수):

Expand
이름설명기본값유형

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

79.3. 샘플

예를 들어 JAXB 데이터 형식을 사용하려면 다음과 같이 수행할 수 있습니다.

from("activemq:My.Queue").
  to("dataformat:jaxb:unmarshal?contextPath=com.acme.model").
  to("mqseries:Another.Queue");

XML DSL에서는 다음을 수행합니다.

<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
  <route>
    <from uri="activemq:My.Queue"/>
    <to uri="dataformat:jaxb:unmarshal?contextPath=com.acme.model"/>
    <to uri="mqseries:Another.Queue"/>
  </route>
</camelContext>

80장. 데이터 세트 구성 요소

Camel 버전 1.3에서 사용 가능

분산 및 비동기 처리 테스트가 매우 어렵습니다. Mock,TestDataSet 엔드포인트는 Camel 테스트 프레임워크와 함께 강력한 Bean 통합 통합과 함께 엔터프라이즈 통합 패턴 및 Camel의 다양한 구성 요소를 사용하여 단위 및 통합 테스트를 단순화합니다.

DataSet 구성 요소는 시스템의 로드 및 soak 테스트를 쉽게 수행할 수 있는 메커니즘을 제공합니다. DataSet 인스턴스를 메시지의 소스로 만들고 데이터 집합이 수신되도록 어설션하는 방식으로 작동합니다.It works by allowing you to create DataSet instances both as a source of messages and as a way to assert that the data set is received.

Camel은 데이터 세트 전송 시 처리량 로거 를 사용합니다.

80.1. URI 형식

dataset:name[?options]

레지스트리의 DataSet 인스턴스를 찾는 데 name 이 사용됩니다.where name is used to find the DataSet instance in the Registry.

Camel은 자체 DataSet을 구현하기 위한 기반으로 사용할 수 있는 org. apache.camel.component.datamel.component.dataset.DataSet 클래스의 지원 구현과 함께 제공됩니다. 또한 Camel에는 org.apache.camel.component.dataset.SimpleDataSetorg.apache.camel.component.ListDataSet.component.apache.camel.component.dataset.FileDataSet .dataset.FileDataSet 모두 DataSet Support 를 확장하는 데 사용할 수 있는 일부 구현이 함께 제공됩니다.

80.2. 옵션

Dataset 구성 요소에는 옵션이 없습니다.

데이터 세트 끝점은 URI 구문을 사용하여 구성됩니다.

dataset:name

다음 경로 및 쿼리 매개변수를 사용합니다.

80.2.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

name

레지스트리에서 조회하는 DataSet의 필수 이름

 

DataSet

80.2.2. 쿼리 매개변수(19 매개변수):

Expand
이름설명기본값유형

dataSetIndex (common)

CamelDataSetIndex 헤더의 동작을 제어합니다. For Consumers: - off = 헤더가 설정되지 않음 - strict/lenient = 헤더가 For Producers로 설정됩니다. - off = 헤더 값이 확인되지 않고 헤더 값이 존재하지 않는 경우 설정되지 않으며 헤더 값이 있는지 여부를 설정하지 않습니다.

lenient

문자열

bridgeErrorHandler (consumer)

소비자를 Camel 라우팅 오류 처리기에 브리징할 수 있습니다. 이는 소비자가 들어오는 메시지를 선택하는 동안 예외가 발생한 것을 의미하며, 이제 메시지로 처리되어 라우팅 오류 처리기에 의해 처리됩니다. 기본적으로 소비자는 org.apache.camel.spi.ExceptionHandler를 사용하여 WARN/ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

false

boolean

initialDelay (consumer)

메시지 전송을 시작하기 전에 대기하는 시간(밀리코어)입니다.

1000

long

minRate (consumer)

DataSet이 적어도 이 메시지 수를 포함할 때까지 기다립니다.

0

int

preloadSize (consumer)

경로 초기화를 완료하기 전에 사전 로드(sent)해야 하는 메시지 수를 설정합니다.

0

long

produceDelay (consumer)

소비자가 메시지를 보낼 때 지연을 유발하는 지연을 지정할 수 있습니다(속도 처리를 시뮬레이션하기 위해)

3

long

예외 처리기 (consumer)

소비자가 사용자 지정 ExceptionHandler를 사용하도록 하려면 다음을 수행합니다. bridgeErrorHandler 옵션이 활성화되어 있는지 확인한 후 이 옵션이 사용되지 않습니다. 기본적으로 소비자는 WARN/ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

 

ExceptionHandler

exchangePattern (consumer)

Exchange를 만들 때 기본 교환 패턴을 설정합니다.

 

ExchangePattern

assertPeriod (producer)

예비 어설션이 여전히 유효한지 확인하기 위해 모의 엔드포인트가 재assert할 유예 기간을 설정합니다. 예를 들어 이 방법은 정확히 많은 메시지가 수신되었음을 어설션하는 데 사용됩니다. 예를 들어 예상되는MessageCount(int) 링크가 5로 설정된 경우 5개 이상의 메시지가 도착하면 어설션이 충족됩니다. 정확히 5 개의 메시지가 수신되도록하려면 더 이상 메시지가 도착하지 않도록하려면 약간의 시간을 기다려야합니다. 이는 에 대해 이 링크 setAssertPeriod(long) 방법을 사용할 수 있습니다. 기본적으로 이 기간은 비활성화되어 있습니다.

0

long

consumeDelay (producer)

생산자가 메시지를 사용할 때 지연되는 지연을 지정할 수 있습니다(속도 처리를 시뮬레이션하기 위해)

0

long

expectedCount (producer)

이 끝점에서 수신해야 하는 예상 메시지 교환 수를 지정합니다. 참고: 0개의 메시지를 예상하려면 테스트가 시작될 때 0이 일치하므로 메시지가 아직 도착하지 않도록 하기 위해 어설션 기간을 설정해야 합니다. 링크 setAssertPeriod(long)를 사용합니다. 대안은 NotifyBuilder를 사용하는 것이며, 부사기를 사용하여 Camel이 일부 메시지를 라우팅할 때 이를 알 수 있습니다. 이를 통해 테스트 시간을 단축하기 위해 고정된 어설션 기간을 사용할 수 없습니다. n번째 메시지가 이 모크 엔드포인트에 도달했음을 확인하려는 경우 자세한 내용은 링크 setAssertPeriod(long) 방법도 참조하십시오.

-1

int

reportGroup (producer)

크기 그룹에 따라 처리량 로깅을 설정하는 데 사용되는 숫자입니다.

 

int

resultMinimumWaitTime (producer)

assertIsSatisfied() 링크가 충족될 때까지 래치에서 대기할 최소 예상 시간(밀리코어)을 설정합니다.

0

long

resultWaitTime (producer)

assertIsSatisfied() 링크가 충족될 때까지 래치에서 대기할 최대 시간(밀리코어)을 설정합니다.

0

long

유지First (producer)

첫 번째 n번째 Exchange 수만 유지하도록 지정합니다. 이는 큰 데이터로 테스트를 할 때 사용되며, Exchange this mock 엔드포인트가 수신하는 모든 복사본을 저장하지 않고 메모리 사용량을 줄일 수 있습니다. 중요: 이 제한을 사용하는 경우 getReceivedCounter() 링크는 실제 받은 Exchange 수를 반환합니다. 예를 들어, 5000 Exchange를 수신하고 처음 10개의 교환 만 보관하도록 구성한 경우 getReceivedCounter() 링크는 여전히 5000을 반환하지만 getExchanges() 링크의 처음 10개 교환 및 링크 getReceivedExchanges() 메서드입니다. 이 방법을 사용할 때 다른 기대 방법 중 일부는 지원되지 않습니다(예: 예상되는 링크 expectedBodiesReceived(Object…​))는 수신된 본문의 첫 번째 수에 대한 기대치를 설정합니다. 첫 번째 및 마지막 수신을 제한하도록 링크 setRetainFirst(int) 및 link setRetainLast(int) 메서드를 모두 구성할 수 있습니다.

-1

int

retainLast (producer)

마지막으로 받은 Exchange 수만 유지하도록 지정합니다. 이는 큰 데이터로 테스트를 할 때 사용되며, Exchange this mock 엔드포인트가 수신하는 모든 복사본을 저장하지 않고 메모리 사용량을 줄일 수 있습니다. 중요: 이 제한을 사용하는 경우 getReceivedCounter() 링크는 실제 받은 Exchange 수를 반환합니다. 예를 들어, 5000 Exchange를 수신하고 마지막 20개의 교환 만 보관하도록 구성한 경우 getReceivedCounter() 링크는 여전히 5000을 반환하지만 getExchanges() 링크에 마지막 20개의 교환 만 있으며, 링크 getReceivedExchanges() 방법. 이 방법을 사용할 때 다른 기대 방법 중 일부는 지원되지 않습니다(예: 예상되는 링크 expectedBodiesReceived(Object…​))는 수신된 본문의 첫 번째 수에 대한 기대치를 설정합니다. 첫 번째 및 마지막 수신을 제한하도록 링크 setRetainFirst(int) 및 link setRetainLast(int) 메서드를 모두 구성할 수 있습니다.

-1

int

sleepForEmptyTest (producer)

예상된MessageCount(int) 링크가 0으로 호출될 때 이 끝점이 실제로 비어 있는지 확인할 수 있도록 대기 시간을 지정할 수 있습니다.

0

long

copyOnExchange (producer)

이 모크 끝점에서 수신될 때 들어오는 Exchange의 깊은 복사본을 만들지 여부를 설정합니다.Sets whether to make a deep copy of the incoming Exchange when received at this mock endpoint. 는 기본적으로 true입니다.

true

boolean

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

다음 형식 ?option=value&option=value&…​로 URI에 쿼리 옵션을 추가할 수 있습니다.

80.3. DataSet 구성

Camel은 DataSet 인터페이스를 구현하는 빈에서 레지스트리를 조회합니다. 사용자 고유의 DataSet을 다음과 같이 등록할 수 있습니다.You can register your own DataSet as:

<bean id="myDataSet" class="com.mycompany.MyDataSet">
  <property name="size" value="100"/>
</bean>

80.4. 예제

예를 들어 메시지 집합이 큐로 전송되고 메시지가 손실되지 않고 대기열에서 사용되도록 테스트하려면 다음을 수행합니다.

// send the dataset to a queue
from("dataset:foo").to("activemq:SomeQueue");

// now lets test that the messages are consumed correctly
from("activemq:SomeQueue").to("dataset:foo");

위의 내용은 레지스트리에서 메시지를 만드는 데 사용되는 foo DataSet 인스턴스를 찾습니다.

그런 다음 아래에 설명된 SimpleDataSet 사용 등 DataSet 구현을 만들고 데이터 집합이 얼마나 큰지, 메시지 크기 등을 구성합니다.Then you create a DataSet implementation, such as described below, configuring things like how big the data set is and what the messages look like etc.    

80.5. DataSetSupport(라이테 클래스)

DataSetSupport 추상 클래스는 새로운 DataSet의 시작 지점이며 파생 클래스에 유용한 몇 가지 기능을 제공합니다.

80.5.1. DataSetSupport의 속성

Expand
속성유형기본값설명

defaultHeaders

map<String,Object>

null

기본 메시지 본문을 지정합니다. SimpleDataSet의 경우 일정한 페이로드입니다. 메시지별로 사용자 지정 페이로드를 만들려면 DataSetSupport 의 자체 파생을 만듭니다.

outputTransformer

org.apache.camel.Processor

null

 

크기

long

10

보낼 메시지 수를 지정합니다.Specifies how many messages to send/consume.

reportCount

long

-1

진행률을 보고하기 전에 받을 메시지 수를 지정합니다. 대규모 로드 테스트 진행 상황을 표시하는 데 유용합니다. If < 0, size / 5, if is 0, then size, else set to reportCount value.

80.6. SimpleDataSet

SimpleDataSetDataSetSupport 를 확장하고 기본 본문을 추가합니다.

80.6.1. SimpleDataSet의 추가 속성

Expand
속성유형기본값설명

defaultBody

개체

<hello>world!</hello>

기본 메시지 본문을 지정합니다. 기본적으로 SimpleDataSet 은 각 교환에 대해 동일한 상수 페이로드를 생성합니다. 각 교환에 대한 페이로드를 사용자 정의하려면 Camel 프로세서 를 생성하고 outputTransformer 속성을 설정하여 사용할 SimpleDataSet 을 구성합니다.

80.7. ListDataSet

Camel 2.17 이후 사용 가능

List'DataSet'은 DataSetSupport 를 확장하고 기본 본문 목록을 추가합니다.

80.7.1. ListDataSet의 추가 속성

Expand
속성유형기본값설명

defaultBodies

list<Object>

empty LinkedList<Object>

기본 메시지 본문을 지정합니다. 기본적으로 ListDataSetCamelDataSetIndex 를 사용하여 defaultBodies 목록에서 일정한 페이로드를 선택합니다. 페이로드를 사용자 지정하려면 Camel Processor 를 생성하고 outputTransformer 속성을 설정하여 사용할 ListDataSet 을 구성합니다.

크기

long

defaultBodies 목록의 크기

보낼 메시지 수를 지정합니다.Specifies how many messages to send/consume. 이 값은 defaultBodies 목록의 크기와 다를 수 있습니다. 값이 defaultBodies 목록의 크기보다 작으면 일부 목록 요소가 사용되지 않습니다. 값이 defaultBodies 목록의 크기보다 크면 CamelDataSetIndex의 modulus 및 defaultBodies 목록의 크기(예: CamelDataSetIndex % defaultBodies.size() )를 사용하여 교환에 대한 페이로드가 선택됩니다.

80.8. FileDataSet

Camel 2.17 이후 사용 가능

FileDataSet 은 ListDataSet 을 확장 하 고 파일에서 본문을 로드 하는 지원을 추가 합니다.The FileDataSet extends ListDataSet , and adds support for loading the body from a file.

80.8.1. FileDataSet의 추가 속성

Expand
속성유형기본값설명

sourceFile

파일

null

페이로드의 소스 파일을 지정합니다.

구분 기호

문자열

\z

java.util.Scanner 에서 파일을 여러 페이로드로 분할하는 데 사용하는 구분 기호 패턴을 지정합니다.

81장. DigitalOcean 구성 요소

Camel 버전 2.19에서 사용 가능

DigitalOcean 구성 요소를 사용하면 캡슐화 [digitalocean-api-java]를 캡슐화하여 DigitalOcean Cloud 내에서 Droplets 및 리소스를 관리할 수 있습니다. https://www.digitalocean.com/community/projects/api-client-in-java DigitalOcean 컨트롤 패널에 익숙한 모든 기능은 이 Camel 구성 요소를 통해 사용할 수 있습니다.

81.1. 사전 요구 사항

유효한 DigitalOcean 계정과 유효한 OAuth 토큰이 있어야 합니다. 계정에 대한 DigitalOcean 컨트롤 패널의 [Apps & API](https://cloud.digitalocean.com/settings/applications) 섹션을 방문하여 OAuth 토큰을 생성할 수 있습니다.

81.2. URI 형식

DigitalOcean Component 는 다음 URI 형식을 사용합니다.

digitalocean://endpoint?[options]

여기서 endpoint 는 DigitalOcean 리소스 유형입니다.

예: 드롭릿 목록을 표시하려면 다음을 수행하십시오.

digitalocean://droplets?operation=list&oAuthToken=XXXXXX&page=1&perPage=10

DigitalOcean 구성 요소는 생산자 엔드포인트만 지원하므로 경로 시작 시 채널의 메시지를 수신 대기할 때 이 구성 요소를 사용할 수 없습니다.

81.3. 옵션

DigitalOcean 구성 요소에는 옵션이 없습니다.

DigitalOcean 엔드포인트는 URI 구문을 사용하여 구성됩니다.

digitalocean:operation

다음 경로 및 쿼리 매개변수를 사용합니다.

81.3.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

작업

지정된 리소스에 수행할 작업입니다.

 

DigitalOceanOperations

81.3.2. 쿼리 매개 변수(10 매개변수:

Expand
이름설명기본값유형

페이지 (producer)

페이지 매김에 사용합니다. 페이지 번호를 강제 적용합니다.

1

정수

perPage (producer)

페이지 매김에 사용합니다. 요청당 항목 수를 설정합니다. 페이지당 최대 결과 수는 200입니다.

25

정수

리소스 (producer)

작업을 수행하는 DigitalOcean 리소스 유형입니다.

 

DigitalOceanResources

DigitalOceanClient (advanced)

기존 구성된 DigitalOceanClient를 클라이언트로 사용하려면

 

DigitalOceanClient

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

httpProxyHost (proxy)

필요한 경우 프록시 호스트 설정

 

문자열

httpProxyPassword (proxy)

필요한 경우 프록시 암호 설정

 

문자열

httpProxyPort (proxy)

필요한 경우 프록시 포트 설정

 

정수

httpProxyUser (proxy)

필요한 경우 프록시 호스트 설정

 

문자열

oAuthToken (security)

DigitalOcean OAuth 토큰

 

문자열

작업 URI 옵션 또는 CamelDigitalOceanOperation 메시지 헤더를 사용하여 각 엔드포인트에 대한 작업 값을 제공해야 합니다.

모든 작업 값은 DigitalOceanOperations 열거형에 정의됩니다.

구성 요소에서 사용하는 모든 헤더 이름은 DigitalOceanHeaders 열거형에 정의되어 있습니다.

81.4. 메시지 본문 결과

반환된 모든 메시지 본문은 digitalocean-api-java 라이브러리에서 제공하는 오브젝트를 사용합니다.

81.5. API Rate Limits

camel-digitalocean 구성 요소에 의해 캡슐화된 DigitalOcean REST API에는 API Rate Limiting이 적용됩니다. [API Rate Limits documentation](https://developers.digitalocean.com/documentation/v2/#rate-limit참조하십시오.

81.6. 계정 끝점

| 작업 | 기술 | | ------ | ---- | ---- | ----- | ------ | ------ | get | account info | | com.myjeeva.digitalean.pojo.Account |

81.7. BlockStorages 끝점

| 작업 | 기술 | | ------ | ---- | ------ | ------ | ------ | list | list | List<com.myjeeva.digitalean.pojo.Volume > | | 블록 스토리지 볼륨| CamelDigitalOceanId Integer| com.myjeeva.digitalocean.pojo.Volume | get | name| Camel 로 블록 스토리지 볼륨에 대한 정보를 표시합니다. DigitalOceanName String <br>'CamelDigitalOceanRegion' String| com.myjeeva.digitalocean.pojo.Volume | listSnapshots | 볼륨에서 생성된 스냅샷을 검색합니다. CamelDigitalOceanId Integer| List<com.myjeeva.digitalocean.pojo.Snapshot | | create | create | Create a new volume | CamelDigitalOceanVolumeSizeGigabytes Integer<br>' CamelDigitalOceanName' String<br>'CamelDigitalOceanDescription'* String<br>'CamelDigitalOigitalRegion'* String| com.myjeeva.digitalocean.pojo .volume | | 삭제 | 블록 스토리지 볼륨 삭제 모든 데이터를 제거하고 계정| CamelDigitalOceanId Integer| com.myjeeva.digitalocean.pojo.Delete| | delete | delete | Delete | DeleteDigitalOceanName 문자열<br>'CamelDigitalOceanRegion' String| com.myjeeva.digitalocean.pojo.Delete | attach | Block Storage 볼륨을 Droplet| CamelDigitalOceanId에 연결 정수 <br>'CamelDigitalOceanDropletId' Integer<br>'CamelDigitalOceanDropletRegion' String| com.myjeeva.pojo.Action | attach | 이름이| CamelDigitalOceanName 문자열<br>'CamelDigitalOceanDropletId의 Integer<br>'CamelDigitalOceanDropletRegion' String으로 블록 스토리지 볼륨을 연결합니다. | com.myjeeva.digitalocean.pojo.Action | detach | detach a Block Storage volume from a Droplet| CamelDigitalOceanId Integer <br>'''' 정수<br>'CamelDigitalOce anDropletRegion' String| com.myjeeva.digitalocean.pojo. OceanName String<br>'CamelDigitalOceanDropletId' Integer<br>'CamelDigitalOceanDropletRegion' String| com.myjeeva.pojo.Action | 크기 조정 | Block Storage 볼륨 크기 조정 | CamelDigitalOceanVolumeSizeGigabytes <br>'CamelDigitalOceitalOceanRegion' String| com.myjeeva.pojo.Action | | listActions | CamelDigitalOceanId Integer | List<com.myjeeva.digitalocean.pojo.Action> | CamelDigitalOceanId Integer| List<com.myjeeva.digitalocean.pojo.Action > | |

81.8. droplets 끝점

| 작업 | 기술 | | ------ | ---- | ------ | ------ | ------- | list | list | List<com.myjeeva.digitalocean.Droplet> | | 개별 드롭릿 | CamelDigitalOceanId Integer| com.myjeeva.digitalocean.pojo.Droplet | | create | create | Create | new Droplet | CamelDigitalO ceanName String <br>'CamelDigitalOceanDeletImage' String <br>'CamelDigitalOceelDigitalOceanRegion' String <br>'CamelDigitalOceanDropletSize' String <br> 'CamelDigitalOceitalOceanDropletSSHKeys'* List\<String\ > <br>'CamelDigitalOceanDropletEnableBackups'* 부울 <br>''CamelDigitalOceanDropletEnableI6'* List\<String\> <br> Boolean <br>'CamelDigitalOceitalOceanTabletEnablePrivateNetworking'* Boolean <br>''CamelDigitalOceletUserData'* String <br>'CamelDigitalOceanDropletVolume s'* List\<String\ > <br>'CamelDigitalOceanDroplets' List\<String\> | com.myjeeva.digitalocean.pojo.Droplet | | create | create | CamelDigitalOceanNames List\<String\ > <br>'CamelDigitalOceletImage' String <br>'CamelDigitalOceanRegion' String <br>'CamelDigitital OceanDropletSize' String <br>'CamelDigitalOceanDropletTs'* List\<String\ > <br>'CamelDigitalOceanDropletEnableBackups'* 부울 <br>'CamelD igitalOceanDropletEnableIpv6'* 부울 <br>'CamelDigitalOceanDropletPrivateNetworking'* Boolean <br>'CamelDigitalOceanDropletUserData'* String <br> 'CamelDigitalOceitalOceitalOceanDropletVolumes'* List\<String\ > <br>'CamelDigitalOceanDropletTags' List\<String\> | | com.myjeeva.digitalocean. polet} | 삭제 | 삭제 | CamelDigitalOceanId Integer| com.myjeeva.digitalocean.pojo.Delete | | enableBackups | existing Droplet | CamelDigitalOceanId Integer| com.myjeeva.digitalocean.pojo.Action | | disableBackups | existing Droplet | CamelDigitalOceanId Integer| com.myjeeva.pojo.Action | | enableIpv6 | 기존 Droplet | CamelDigitalOceanId Integer| com.myjeeva.digitalocean. poction | enable private networking on an existing Drop 해결 방법 | CamelDigitalOceanId Integer| com.myjeeva.digitalocean.pojo.Action | reboot | reboot a Droplet | CamelDigitalOceanId Integer| com .myjeeva.digitalocean.pojo.Action | | powerCycle | power cycle a Droplet | CamelDigitalOceanId Integer| com.myjeeva.pojo.pojo.Action | | 종료 | 종료 | CamelDigitalOceanId Integer| com.myjeeva.digitalocean.pojo.Action | powerOff | powerOff | CamelDigitalO ceanId Integer| com.myjeeva.digitalocean.pojo.Action | | powerOn | power on a Droplet | CamelDigitalOceanId Integer| com.myjeeva.digitalean. POJO.Action | | 복원 | 복구 | CamelDigitalOceanId Integer <br>'CamelDigitalOceitalOceanImageId' Integer| com.myjeeva.pojo.A CTION | | passwordReset | CamelDigitalOceanId Integer| com.myjeeva.digitalocean.pojo.Action | | 크기 조정 | Cam elDigitalOceanId Integer <br>'CamelDigitalOceanDropletSize' String| com.myjeeva.digitalocean.pojo. igitalOceanId Integer <br>'CamelDigitalOceanImageId' Integer| com.myjeeva.digitalocean.pojo. OceanId Integer <br>'CamelDigitalOce anName' String| com.myjeeva.digitalocean.pojo. ceanId Integer <br>'CamelDigitalOce anKernelId' Integer| com.myjeeva.digitalocean.pojo. 정수 <br>'CamelDigitalOceanName'* String| com.myjeeva.digitalocean.pojo.Action | | tag | tag a Droplet | CamelDigitalOceanId Integer <br>'CamelDigitalOceanName' String |com .myjeeva.digitalocean.pojo.Response | | untag | Camel DigitalOceanId Integer <br>'CamelDigitalOceanName' String| com.myjeeva.digitalocean.pojo.Response | | listKernels | listKernels | CamelDigitalOce에서 사용할 수 있는 모든 커널 목록을 검색합니다. anId Integer | List<com.myjeeva.digitalocean.pojo.Kernel > | | listSnapshots | listSnapshots | droplet | CamelDigitalOceanId Integer | List<com. myjeeva.digitalocean.pojo.Snapshot > | | listBackups | | list DigitalOceanId Integer | List<com.myjeeva.pojo.Backup > | | listActions | CamelDigitalOceanId Integer | List<com.myjeeva.digitalocean.pojo.Action > | | listNeighbors | retrieve 동일한 물리적 서버에서 실행 중인 드롭다운 목록 | CamelDigitalOceanId Integer | List<com.myjeeva.digitalocean.pojo.Droplet > | | listAllNeighbors | 모든 drop 목록을 검색합니다. 동일한 물리적 하드웨어에서 실행되도록 합니다 | | List<com.myjeeva.digitalocean.pojo.Droplet > |

81.9. 이미지 끝점

| 작업 | 기술 | | ------ | ---- | ----- | ----- | ----- | ------ | list | list | List images available on your account | CamelDigitalOceanType* DigitalOceanType s | List<com.myjeeva.digitalocean.pojo.Image | | ownList | | ownList | | List<com.myjeeva.digitalocean.pojo.Image > | | listActions | 모든 작업 검색 이미지 | CamelDigitalOceanId Integer | List<com.myjeeva.digitalocean.pojo.Action > | | id| CamelDig에 의한 이미지(public or private)에 대한 정보 검색 italOceanId Integer| com.myjeeva.digitalocean.pojo.Image | slug| CamelDigitalOceanDropletImage String| com.myjeeva .DigitalOcean.pojo.Image | | update | update an image| CamelDigitalOceanId Integer <br>'CamelDigitalOceanName' String| com.myjeeva.digitalocean.pojo .image | | 삭제 | 이미지 | CamelDigitalOceanId Integer | com.myjeeva.digitalocean.pojo.Delete | | transfer | another region| CamelDigitalO ceanId Integer <br>'CamelDigitalOceanRegion' String| com.myjeeva.digitalocean.pojo. 예를 들어 스냅샷에 대한 백업| CamelDigitalOceanId Integer | com.myjeeva.digitalocean.pojo.Action |

81.10. 스냅샷 끝점

| 작업 | 기술 | | ------ | ---- | ------ | ------ | ------ | list | list | CamelDigitalOceanType* DigitalOce anSnapshotTypes | List<com.myjeeva.digitalocean.pojo.Snapshot > | | | | get | snapshot| CamelDigitalOceanId Integer| com.myjeeva.digitalean.pojo. 스냅샷 | | 삭제 | 스냅샷 삭제 | CamelDigitalOceanId Integer | com.myjeeva.digitalocean.pojo.Delete |

81.11. 키 끝점

| 작업 | 기술 | | ------ | ---- | ------ | ------ | ------ | | list | list | List<com.myjeeva.digitalocean.pojo.Key > | get | id| CamelDigitalOceanId Integer| com.myjeeva.digitalocean.pojo.Key | get | fingerprint| CamelDigitalO로 키에 대한 정보 검색 ceanKeyFingerprint String| com.myjeeva.digitalocean.pojo.Key | | update | update | id| CamelDigitalOceanId Integer <br>'CamelDigitalOceanName ' string| com.myjeeva.digitalocean.pojo.Key | | update | fingerprint| CamelDigitalOceanKeyFingerprint String <br>''CamelDigitalOceanName' 문자열| com.myjeeva.digitalocean.pojo.Key | | | delete | id| CamelDigitalOceanId Integer | com.myjeeva.digitalocean.pojo.Delete | | Delete | fingerprint| CamelDigitalOceanKeyFingerprint String | com.myjeeva.digitalocean.pojo.Delete 로 키를 삭제합니다.

81.12. 리전 끝점

| 작업 | 기술 | | ------ | ---- | ------ | ------ | ------- | list | list | List<com.myjeeva.digitalocean.poge.Region > |

81.13. 크기 끝점

| 작업 | 기술 | | ------ | ----- | ------- | ------ | | list | list | List<com.myjeeva.digitalocean.pojo.Size >

81.14. 부동 IP 끝점

| 작업 | 기술 | | ------ | ---- | ------ | ------ | ------ | list | list | List<com.myjeeva.digitalocean.pojo.Flo atingIP > | | create | create | CamelDigitalOceanId Integer | List<com.myjeeva.digitalocean.pojo.FloatingIP > | create | create | create | create 지역에 할당된 유동 IP | CamelDigitalOceanRegion String | List<com.myjeeva.digitalocean.pojo.FloatingIP > | | | Get | Floating IP| CamelDigitalO에 대한 정보 검색 ceanFloatingIPAddress String| com.myjeeva.digitalocean.pojo.Key | | 삭제 | 유동 IP를 삭제하고 계정| CamelDigitalOceanFloatingIPAddress String| com. myjeeva.digitalocean.pojo.Delete | 할당 | 할당 | 할당 | 지정 | CamelDigitalOceanFloatingIPAddress String <br>'CamelDigitalOceitalOceanDropletId' Integer| com.myjeeva.digitalocean.pojo.Action | | unassign | Floating IP | CamelDigitalOceanFloatingIPAddress String | com.myjeeva.pojo.Action | | listActions | CamelDigitalOceanFloatingIPAddress String | List<com.myjeeva. digitalocean.pojo.Action> | CamelDigitalOceanFloatingIPAddress String | List<com.myjeeva.pojo.Action > | |

81.15. tags 끝점

| 작업 | 기술 | | ------ | ---- | ----- | ----- | ------ | list | list all tags | | List<com.myjeeva.digitalocean.pojo.Tag > | | Create | Create a Tag | CamelDigitalOceanName String | com.myjeeva.digitalocean.pojo.Tag | | get | 개별 태그 | CamelDigitalOceanName 문자열 | com.myjeeva.digitalocean.pojo.Tag | | | 삭제 | CamelDigitalOceanName String | com.myjeeva.digitalocean.pojo.Delete | | update | update | | CamelDigitalOceanName String <br>'CamelDigitalOceanNewName' String| com.myjeeva.digitalocean.pojo.Tag |

81.16. 예제

계정 정보 가져오기

from("direct:getAccountInfo")
    .setHeader(DigitalOceanConstants.OPERATION, constant(DigitalOceanOperations.get))
    .to("digitalocean:account?oAuthToken=XXXXXX")

드롭릿 생성

from("direct:createDroplet")
    .setHeader(DigitalOceanConstants.OPERATION, constant("create"))
    .setHeader(DigitalOceanHeaders.NAME, constant("myDroplet"))
    .setHeader(DigitalOceanHeaders.REGION, constant("fra1"))
    .setHeader(DigitalOceanHeaders.DROPLET_IMAGE, constant("ubuntu-14-04-x64"))
    .setHeader(DigitalOceanHeaders.DROPLET_SIZE, constant("512mb"))
    .to("digitalocean:droplet?oAuthToken=XXXXXX")

모든 드롭릿 나열

from("direct:getDroplets")
    .setHeader(DigitalOceanConstants.OPERATION, constant("list"))
    .to("digitalocean:droplets?oAuthToken=XXXXXX")

Droplet에 대한 정보 검색 (dropletId = 34772987)

from("direct:getDroplet")
    .setHeader(DigitalOceanConstants.OPERATION, constant("get"))
    .setHeader(DigitalOceanConstants.ID, 34772987)
    .to("digitalocean:droplet?oAuthToken=XXXXXX")

드롭릿의 종료 정보 (dropletId = 34772987)

from("direct:shutdown")
    .setHeader(DigitalOceanConstants.ID, 34772987)
    .to("digitalocean:droplet?operation=shutdown&oAuthToken=XXXXXX")

82장. 직접 구성 요소

Camel 버전 1.0에서 사용 가능

직접: 구성 요소는 생산자가 메시지 교환을 보낼 때 모든 소비자의 직접 동기 호출을 제공합니다.
이 엔드포인트는 동일한 camel 컨텍스트의 기존 경로를 연결하는 데 사용할 수 있습니다.

작은 정보

비동기 : SEDA 구성 요소는 생산자가 메시지 교환을 전송할 때 모든 소비자의 비동기 호출을 제공합니다.

작은 정보

다른 camel 컨텍스트와의 연결 The VM 구성 요소는 동일한 JVM 에서 실행되는 기간 동안 Camel 컨텍스트 간의 연결을 제공합니다.

82.1. URI 형식

direct:someName[?options]

여기서 someName 은 끝점을 고유하게 식별하기 위한 문자열일 수 있습니다.

82.2. 옵션

Direct 구성 요소는 아래에 나열된 3 가지 옵션을 지원합니다.

Expand
이름설명기본값유형

블록 (producer)

활성 소비자가 없는 직접 엔드포인트에 메시지를 전송하는 경우 생산자에게 차단하고 소비자가 활성화될 때까지 기다릴 수 있습니다.

true

boolean

시간 초과 (producer)

블록이 활성화된 경우 사용할 제한 시간 값입니다.

30000

long

resolveProperty Placeholders (advanced)

구성 요소가 시작 시 자체적으로 속성 자리 표시자를 확인해야 하는지 여부입니다. String 유형의 속성만 속성 자리 표시자를 사용할 수 있습니다.Only properties which are of String type can use property placeholders.

true

boolean

직접 엔드포인트는 URI 구문을 사용하여 구성됩니다.

direct:name

다음 경로 및 쿼리 매개변수를 사용합니다.

82.2.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

name

직접 엔드 포인트의 필수 이름

 

문자열

82.2.2. 쿼리 매개변수(7 매개변수):

Expand
이름설명기본값유형

bridgeErrorHandler (consumer)

소비자를 Camel 라우팅 오류 처리기에 브리징할 수 있습니다. 이는 소비자가 들어오는 메시지를 선택하는 동안 예외가 발생한 것을 의미하며, 이제 메시지로 처리되어 라우팅 오류 처리기에 의해 처리됩니다. 기본적으로 소비자는 org.apache.camel.spi.ExceptionHandler를 사용하여 WARN/ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

false

boolean

예외 처리기 (consumer)

소비자가 사용자 지정 ExceptionHandler를 사용하도록 하려면 다음을 수행합니다. bridgeErrorHandler 옵션이 활성화되어 있는지 확인한 후 이 옵션이 사용되지 않습니다. 기본적으로 소비자는 WARN/ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

 

ExceptionHandler

exchangePattern (consumer)

Exchange를 만들 때 기본 교환 패턴을 설정합니다.

 

ExchangePattern

블록 (producer)

활성 소비자가 없는 직접 엔드포인트에 메시지를 전송하는 경우 생산자에게 차단하고 소비자가 활성화될 때까지 기다릴 수 있습니다.

true

boolean

failIfNoConsumers (producer)

활성 소비자가 없는 DIRECT 끝점으로 보낼 때 예외를 throw하여 생산자가 실패해야 하는지 여부입니다.

false

boolean

시간 초과 (producer)

블록이 활성화된 경우 사용할 제한 시간 값입니다.

30000

long

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

82.3. 샘플

아래 경로에서 직접 구성 요소를 사용하여 두 경로를 함께 연결합니다.

from("activemq:queue:order.in")
    .to("bean:orderServer?method=validate")
    .to("direct:processOrder");

from("direct:processOrder")
    .to("bean:orderService?method=process")
    .to("activemq:queue:order.out");

그리고 봄 DSL을 사용하는 샘플:

<route>
 <from uri="activemq:queue:order.in"/>
 <to uri="bean:orderService?method=validate"/>
 <to uri="direct:processOrder"/>
</route>

<route>
 <from uri="direct:processOrder"/>
 <to uri="bean:orderService?method=process"/>
 <to uri="activemq:queue:order.out"/>
</route>

SEDA 구성 요소 샘플을 함께 사용하는 방법도 참조하십시오.

82.4. 예를 들면 다음과 같습니다.

83장. 직접 VM 구성 요소

Camel 버전 2.10에서 사용 가능

direct-vm: 구성 요소는 생산자가 메시지 교환을 전송할 때 JVM에서 모든 소비자에 대한 직접 동기 호출을 제공합니다.
이 엔드포인트는 동일한 camel 컨텍스트에서 기존 경로를 연결하는 데 사용할 수 있으며 동일한 JVM의 다른 camel 컨텍스트에서 연결할 수 있습니다.

이 구성 요소는 Direct -VM 이 CamelContext 인스턴스 간 통신을 지원하므로 이 메커니즘을 사용하여 웹 애플리케이션 간에 통신할 수 있습니다( camel-core.jar가 system/boot classpath에 있음)

런타임 시 기존 소비자를 중지하고 새 소비자를 시작하여 새 소비자를 스왑할 수 있습니다.
그러나 특정 시점에는 지정된 끝점에 대해 하나의 활성 소비자만 있을 수 있습니다.

이 구성 요소를 사용하면 여기에서 볼 수 있듯이 다른 OSGI 번들에 배포된 경로를 연결할 수도 있습니다. 다른 번들에서 실행 중인 경우에도 camel 경로는
동일한 스레드를 사용합니다. 트랜잭션 사용 - Tx를 사용하여 애플리케이션을 개발하는 기능을 자동으로 수행합니다.

image

83.1. URI 형식

direct-vm:someName

여기서 someName 은 끝점을 고유하게 식별하기 위한 문자열일 수 있습니다.

83.2. 옵션

Direct VM 구성 요소는 아래에 나열된 5 가지 옵션을 지원합니다.

Expand
이름설명기본값유형

블록 (producer)

활성 소비자가 없는 직접 엔드포인트에 메시지를 전송하는 경우 생산자에게 차단하고 소비자가 활성화될 때까지 기다릴 수 있습니다.

true

boolean

시간 초과 (producer)

블록이 활성화된 경우 사용할 제한 시간 값입니다.

30000

long

headerFilterStrategy (advanced)

Producer 엔드포인트에서만 적용할 HeaderFilterStrategy를 설정합니다(요청 및 응답 모두). 기본값: 없음.

 

HeaderFilterStrategy

propagateProperties (advanced)

생산자 측에서 소비자 측으로 속성을 전파할지 여부에 관계없이, 그 반대의 경우도 마찬가지입니다. 기본값: true.

true

boolean

resolveProperty Placeholders (advanced)

구성 요소가 시작 시 자체적으로 속성 자리 표시자를 확인해야 하는지 여부입니다. String 유형의 속성만 속성 자리 표시자를 사용할 수 있습니다.Only properties which are of String type can use property placeholders.

true

boolean

Direct VM 끝점은 URI 구문을 사용하여 구성됩니다.

direct-vm:name

다음 경로 및 쿼리 매개변수를 사용합니다.

83.2.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

name

direct-vm 끝점의 필수 이름

 

문자열

83.2.2. 쿼리 매개변수(9 매개변수):

Expand
이름설명기본값유형

bridgeErrorHandler (consumer)

소비자를 Camel 라우팅 오류 처리기에 브리징할 수 있습니다. 이는 소비자가 들어오는 메시지를 선택하는 동안 예외가 발생한 것을 의미하며, 이제 메시지로 처리되어 라우팅 오류 처리기에 의해 처리됩니다. 기본적으로 소비자는 org.apache.camel.spi.ExceptionHandler를 사용하여 WARN/ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

false

boolean

예외 처리기 (consumer)

소비자가 사용자 지정 ExceptionHandler를 사용하도록 하려면 다음을 수행합니다. bridgeErrorHandler 옵션이 활성화되어 있는지 확인한 후 이 옵션이 사용되지 않습니다. 기본적으로 소비자는 WARN/ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

 

ExceptionHandler

exchangePattern (consumer)

Exchange를 만들 때 기본 교환 패턴을 설정합니다.

 

ExchangePattern

블록 (producer)

활성 소비자가 없는 직접 엔드포인트에 메시지를 전송하는 경우 생산자에게 차단하고 소비자가 활성화될 때까지 기다릴 수 있습니다.

true

boolean

failIfNoConsumers (producer)

활성 소비자가 없는 Direct-VM 끝점으로 보낼 때 예외를 throw하여 생산자가 실패해야 하는지 여부입니다.

false

boolean

시간 초과 (producer)

블록이 활성화된 경우 사용할 제한 시간 값입니다.

30000

long

headerFilterStrategy (producer)

Producer 엔드포인트에서만 적용할 HeaderFilterStrategy를 설정합니다(요청 및 응답 모두). 기본값: 없음.

 

HeaderFilterStrategy

propagateProperties (advanced)

생산자 측에서 소비자 측으로 속성을 전파할지 여부에 관계없이, 그 반대의 경우도 마찬가지입니다. 기본값: true.

true

boolean

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

83.3. 샘플

아래 경로에서 직접 구성 요소를 사용하여 두 경로를 함께 연결합니다.

from("activemq:queue:order.in")
    .to("bean:orderServer?method=validate")
    .to("direct-vm:processOrder");

그리고 또 다른 CamelContext로, 이제 다른 OSGi 번들과 같은 다른 CamelContext에서

from("direct-vm:processOrder")
    .to("bean:orderService?method=process")
    .to("activemq:queue:order.out");

그리고 봄 DSL을 사용하는 샘플:

<route>
 <from uri="activemq:queue:order.in"/>
 <to uri="bean:orderService?method=validate"/>
 <to uri="direct-vm:processOrder"/>
</route>

<route>
 <from uri="direct-vm:processOrder"/>
 <to uri="bean:orderService?method=process"/>
 <to uri="activemq:queue:order.out"/>
</route>

83.4. 예를 들면 다음과 같습니다.

84장. Disruptor Component

Camel 버전 2.12로 사용 가능

중단자: 구성 요소는 표준 SEDA 구성 요소만큼 비동기 SEDA 동작을 제공하지만 표준 SEDA에서 사용하는 BlockingQueue 대신 Disruptor 를 활용합니다. 또는, A

Disruptor-vm: 이 구성 요소에서 엔드포인트를 지원하여 표준 VM 에 대한 대안을 제공합니다. SEDA 구성 요소와 마찬가지로 중단자의 버퍼: 엔드 포인트가 단일 CamelContext 내에서만 볼 수 있으며 지속성 또는 복구에 대한 지원은 제공되지 않습니다. disruptor-vm: 엔드포인트는 CamelContexts 인스턴스 간 통신을 지원하므로 이 메커니즘을 사용하여 웹 애플리케이션 간에 통신할 수 있습니다( camel-disruptor.jarsystem/boot classpath에 있음)

SEDA 또는 VM Component에서 Disruptor Component를 사용하도록 선택하는 주요 이점은 생산자 및/또는 멀티 캐스트 또는 동시 소비자 간에 경합이 높은 사용 사례에서 성능에 해당합니다. 이러한 경우 처리량이 크게 증가하고 대기 시간 감소가 관찰되었습니다. 경합이 없는 시나리오의 성능은 SEDA 및 VM 구성 요소와 유사합니다.

Disruptor는 SEDA 및 VM 구성 요소의 동작 및 옵션을 모방하려는 의도로 구현됩니다. 이 둘의 주요 차이점은 다음과 같습니다.

  • 사용된 버퍼는 항상 크기가 바인딩됩니다(기본값 1024 교환).
  • 버퍼가 항상 표시되므로 Disruptor의 기본 동작은 예외를 throw하는 대신 버퍼가 가득 차는 동안 차단되는 것입니다. 이 기본 동작은 구성 요소에서 구성할 수 있습니다(옵션 참조).
  • Disruptor enpoints는 BrowsableEndpoint 인터페이스를 구현하지 않습니다. 따라서 현재 Disruptor의 교환은 거래량 만 검색할 수 없습니다.
  • Disruptor는 소비자(multicasted 또는 그 외에는)를 정적으로 구성해야 합니다. 즉시 소비자를 추가하거나 제거하려면 Disruptor에서 보류 중인 모든 Exchange를 완전히 플러시해야 합니다.
  • 재구성의 결과로: Disruptor를 통해 전송된 데이터는 적어도 한 명의 소비자가 있는 경우 직접 처리되고 'gone'은 가입한 이후에만 새로운 교환이 발행됩니다.
  • pollTimeout 옵션은 Disruptor Component에서 지원하지 않습니다.
  • 전체 Disruptor에서 생산자가 차단되면 스레드 인터럽트에 응답하지 않습니다.

Maven 사용자는 이 구성 요소를 위해 다음 종속성을 pom.xml 에 추가해야 합니다.

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-disruptor</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>

84.1. URI 형식

 disruptor:someName[?options]

또는

 disruptor-vm:someName[?options]

여기서 someName 은 현재 CamelContext 내에서 끝점을 고유하게 식별하는 문자열(또는
disruptor-vm:의 경우)일 수 있습니다.
다음 형식으로 URI에 쿼리 옵션을 추가할 수 있습니다.

  ?option=value&option=value&…

84.2. 옵션

다음 옵션은 모두 disruptor:disruptor-vm: 구성 요소에 모두 유효합니다.

Disruptor 구성 요소는 아래에 나열된 8 가지 옵션을 지원합니다.

Expand
이름설명기본값유형

defaultConcurrent Consumers (consumer)

기본 동시 소비자 수를 구성하려면To configure the default number of concurrent consumers

1

int

기본Multiple Consumers (consumer)

여러 소비자에 대한 기본값을 구성하려면To configure the default value for multiple consumers

false

boolean

defaultProducerType (producer)

DisruptorProducerType의 기본값을 구성하려면 기본값은 Multi입니다.

multi

DisruptorProducerType

defaultWaitStrategy (consumer)

DisruptorWaitStrategy의 기본값을 구성하려면 기본값은 Blocking입니다.

차단

DisruptorWaitStrategy

defaultBlockWhenFull (producer)

전체 값이 true인 경우 block의 기본값을 구성하려면 다음을 수행합니다.

true

boolean

queueSize (일반)

링 버퍼 크기를 구성하려면 더 이상 사용되지 않음

 

int

bufferSize (일반)

링 버퍼 크기를 구성하려면 다음을 수행합니다.

1024

int

resolveProperty Placeholders (advanced)

구성 요소가 시작 시 자체적으로 속성 자리 표시자를 확인해야 하는지 여부입니다. String 유형의 속성만 속성 자리 표시자를 사용할 수 있습니다.Only properties which are of String type can use property placeholders.

true

boolean

Disruptor 엔드포인트는 URI 구문을 사용하여 구성됩니다.

disruptor:name

다음 경로 및 쿼리 매개변수를 사용합니다.

84.2.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

name

필요한 큐 이름

 

문자열

84.2.2. 쿼리 매개변수(12 매개변수):

Expand
이름설명기본값유형

크기 (공용)

장애 복구기의 최대 용량은 두 개의 가장 가까운 전력으로 효과적으로 증가할 것입니다. 참고: 이 옵션을 사용하는 경우 크기를 결정하는 큐 이름으로 생성되는 첫 번째 끝점을 지정합니다. 모든 엔드포인트가 동일한 크기를 사용하도록 하려면 모두 size 옵션 또는 생성되는 첫 번째 끝점을 구성합니다.

1024

int

bridgeErrorHandler (consumer)

소비자를 Camel 라우팅 오류 처리기에 브리징할 수 있습니다. 이는 소비자가 들어오는 메시지를 선택하는 동안 예외가 발생한 것을 의미하며, 이제 메시지로 처리되어 라우팅 오류 처리기에 의해 처리됩니다. 기본적으로 소비자는 org.apache.camel.spi.ExceptionHandler를 사용하여 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

false

boolean

concurrentConsumers (consumer)

동시 스레드 처리 교환 수입니다.

1

int

multipleConsumers (Consumer)

여러 사용자가 허용되는지 여부를 지정합니다. 활성화된 경우 게시-서브스크립션 메시징에 Disruptor를 사용할 수 있습니다. 즉, 메시지를 큐에 전송하고 각 소비자가 메시지 사본을 수신하도록 할 수 있습니다. 이 옵션을 활성화하면 모든 소비자 끝점에 이 옵션을 지정해야 합니다.

false

boolean

waitStrategy (consumer)

소비자 스레드에서 새 Exchange 게시를 기다리는 데 사용하는 전략을 정의합니다.Defines the strategy used by consumer threads to wait on new exchange to be published. 허용되는 옵션은Blocking, Sleeping, BusySpin 및 Yielding입니다.

차단

DisruptorWaitStrategy

예외 처리기 (consumer)

소비자가 사용자 지정 ExceptionHandler를 사용하도록 하려면 다음을 수행합니다. bridgeErrorHandler 옵션이 활성화되어 있는지 확인한 후 이 옵션이 사용되지 않습니다. 기본적으로 소비자는 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

 

ExceptionHandler

exchangePattern (consumer)

소비자가 교환을 생성할 때 교환 패턴을 설정합니다.

 

ExchangePattern

BlockWhenFull (producer)

전체 Disruptor로 메시지를 보내는 스레드가 링버퍼의 용량이 더 이상 소진되지 않을 때까지 차단됩니다. 기본적으로 호출 스레드는 메시지를 허용할 수 있을 때까지 차단 및 대기합니다.By default, the calling thread will block and wait until the message can be accepted. 이 옵션을 비활성화하면 대기열이 가득 차 있음을 알리는 예외가 발생합니다.

false

boolean

producerType (producer)

Disruptor에서 허용되는 생산자를 정의합니다. 허용되는 옵션은 다중 생산자와 Single를 허용하여 하나의 동시 생산자가 활성화되어 있을 때만 특정 최적화를 활성화할 수 있습니다.

multi

DisruptorProducerType

시간 초과 (producer)

생산자가 비동기 작업이 완료될 때까지 대기를 중지할 때까지의 시간 초과(밀리초)입니다. 0 또는 음수 값을 사용하여 시간 제한을 비활성화할 수 있습니다.

30000

long

waitForTaskToComplete (producer)

호출자가 async 작업이 완료되기 전에 대기해야 하는지 여부를 지정하는 옵션입니다. 다음 세 가지 옵션이 지원됩니다: Always, Never 또는 IfReplyExpected. 처음 두 값은 자체 설명입니다. 마지막 값 IfReplyExpected는 메시지가 Request Reply 기반인 경우에만 기다립니다.

IfReplyExpected

WaitForTaskToComplete

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

84.3. 대기 전략

대기 전략은 현재 다음 교환이 게시되기를 기다리는 소비자 스레드가 대기 중인 대기 유형입니다. 다음 전략을 선택할 수 있습니다.

Expand
이름설명조언

차단

장벽을 기다리는 소비자에 대해 잠금 및 조건 변수를 사용하는 차단 전략

이 전략은 CPU 리소스만큼 처리량과 대기 시간이 중요하지 않은 경우 사용할 수 있습니다.

sleep

처음에 회전하는 유휴 전략은 Thread.yield()를 사용하고 결국 OS와 JVM의 최소 나노 수에 대해 소비자가 장벽을 기다리는 동안 사용할 수 있습니다.

이 전략은 성능과 CPU 리소스를 손상시킬 수 있습니다. 대기 시간 스파이크는 조용한 기간 후에 발생할 수 있습니다.

BusySpin

장벽을 기다리는 소비자에 대해 바쁜 스핀 루프를 사용하는 busy Spin 전략.

이 전략에서는 CPU 리소스를 사용하여 latency jitter를 도입할 수 있는 syscall을 방지합니다. 스레드를 특정 CPU 코어에 바인딩할 수 있는 경우 가장 적합합니다.It is best used when threads can be bound to specific CPU cores.

yielding

처음에 회전한 후 장벽을 기다리는 소비자에 Thread.yield()를 사용하는 생성 전략.

이 전략은 상당한 대기 시간 급증이 발생하지 않고 성능과 CPU 리소스를 손상시킬 수 있습니다.

84.4. 요청 응답 사용

Disruptor 구성 요소는 호출자가 Async 경로가 완료될 때까지 대기할 요청 Reply 의 사용을 지원합니다. 예를 들면 다음과 같습니다.

from("mina:tcp://0.0.0.0:9876?textline=true&sync=true").to("disruptor:input");
from("disruptor:input").to("bean:processInput").to("bean:createResponse");

위의 경로에서 들어오는 요청을 수락하는 포트 9876에 TCP 리스너가 있습니다. 요청은 disruptor:input 버퍼로 라우팅됩니다. Request Reply(응답 요청) 메시지이므로 응답을 기다립니다. 사용자가 disruptor:input 버퍼의 소비자가 완료되면 원래 메시지 응답에 응답을 복사합니다.

84.5. 동시 소비자

기본적으로 Disruptor 엔드포인트는 단일 소비자 스레드를 사용하지만 동시 소비자 스레드를 사용하도록 구성할 수 있습니다. 스레드 풀 대신 사용할 수 있습니다.Instead of thread pools you can use:

from("disruptor:stageName?concurrentConsumers=5").process(...)

둘 사이의 차이로 인해 로드에 따라 런타임 시 스레드 풀이 동적으로 증가/축소할 수 있지만 동시 소비자 수는 항상 고정되고 내부적으로 지원되므로 성능이 더 높아질 수 있습니다.

84.6. 스레드 풀

다음과 같은 작업을 수행하여 Disruptor 엔드포인트에 스레드 풀을 추가합니다.

from("disruptor:stageName").thread(5).process(...)

Disruptor와 함께 사용할 일반 BlockingQueue 를 추가하여 중단을 일으킬 수 있으며, Disruptor를 사용하여 얻은 성능상의 일부를 효과적으로 부정할 수 있습니다. 대신 concurrentConsumers 옵션을 사용하여 Disruptor 끝점에서 메시지를 처리하는 스레드 수를 직접 구성하는 것이 좋습니다.

84.7. 샘플

아래 경로에서 Disruptor를 사용하여 다른 스레드에서 추가 처리를 위해 fire-and-forget 메시지를 보낼 수 있도록 이 비동기 대기열에 요청을 보내고 이 스레드의 지속적인 응답을 원래 호출자에게 반환합니다.

public void configure() throws Exception {
    from("direct:start")
        // send it to the disruptor that is async
        .to("disruptor:next")
        // return a constant response
        .transform(constant("OK"));

    from("disruptor:next").to("mock:result");
}

여기에서 Hello World 메시지를 보내고 응답이 OK일 것으로 예상합니다.

Object out = template.requestBody("direct:start", "Hello World");
assertEquals("OK", out);

추가 처리를 위해 다른 스레드의 Disruptor에서 "Hello World" 메시지가 사용됩니다. 이는 단위 테스트에서이므로 단위 테스트에서 어설션을 수행할 수 있는 mock 엔드포인트로 전송됩니다.

84.8. 여러Consumers 사용

이 예제에서는 두 개의 소비자를 정의하고 스프링 빈으로 등록합니다.

<!-- define the consumers as spring beans -->
<bean id="consumer1" class="org.apache.camel.spring.example.FooEventConsumer"/>

<bean id="consumer2" class="org.apache.camel.spring.example.AnotherFooEventConsumer"/>

<camelContext xmlns="http://camel.apache.org/schema/spring">
    <!-- define a shared endpoint which the consumers can refer to instead of using url -->
    <endpoint id="foo" uri="disruptor:foo?multipleConsumers=true"/>
</camelContext>

Disruptor foo endpoint에 여러Consumers=true를 지정했기 때문에 두 개 이상의 소비자가 메시지 사본을 pub-sub 스타일 메시지 유형으로 수신할 수 있습니다. 빈이 단위 테스트의 일부이므로 mock 엔드포인트에 메시지를 보낼 수 있지만, @Consume를 사용하여 Disruptor에서 사용할 수 있는 방법을 확인할 수 있습니다.

public class FooEventConsumer {

    @EndpointInject(uri = "mock:result")
    private ProducerTemplate destination;

    @Consume(ref = "foo")
    public void doSomething(String body) {
        destination.sendBody("foo" + body);
    }

}

84.9. 중단 정보 추출

필요한 경우 이러한 방식으로 JMX를 사용하지 않고도 버퍼 크기 등과 같은 정보를 얻을 수 있습니다.

DisruptorEndpoint disruptor = context.getEndpoint("disruptor:xxxx");
int size = disruptor.getBufferSize();

85장. DNS 구성 요소

Camel 버전 2.7에서 사용 가능

DNS Java를 사용하여 DNS 쿼리를 실행하는 Camel에 대한 추가 구성 요소입니다. 구성 요소는 DNS Java 의 상단에 있는 씬 계층입니다.
구성 요소는 다음 작업을 제공합니다.

  • ip로 도메인을 확인하려면 IP
  • 조회: 도메인에 대한 정보를 조회합니다.
  • dig: DNS 쿼리를 실행하려면

INFO:* Require SUN JVM* DNS Java 라이브러리가 SUN JVM에서 실행해야 합니다.
Apache ServiceMix 또는 Apache Karaf를 사용하는 경우 etc/jre.properties 파일을 조정하여 내보낸 Java 플랫폼 패키지 목록에 Su n.net.spi.nameservice 를 추가해야 합니다. 이 변경 사항을 적용하려면 서버를 다시 시작해야 합니다.

Maven 사용자는 이 구성 요소를 위해 다음 종속성을 pom.xml 에 추가해야 합니다.

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-dns</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>

85.1. URI 형식

DNS 구성 요소의 URI 스키마는 다음과 같습니다.

dns://operation[?options]

이 구성 요소는 생산자만 지원합니다.

85.2. 옵션

DNS 구성 요소에는 옵션이 없습니다.

DNS 끝점은 URI 구문을 사용하여 구성됩니다.

dns:dnsType

다음 경로 및 쿼리 매개변수를 사용합니다.

85.2.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

dnsType

필수 조회 유형입니다.

 

DnsType

85.2.2. 쿼리 매개변수(1 매개변수):

Expand
이름설명기본값유형

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

85.3. headers

Expand
header유형작업설명

dns.domain

문자열

ip

도메인 이름입니다. 필수 항목입니다.

dns.name

문자열

lookup

조회할 이름입니다. 필수 항목입니다.

dns.type

 

lookup, dig

조회 유형입니다. org.xbill.dns.Type 값과 일치해야 합니다. 선택 사항:

dns.class

 

lookup, dig

조회의 DNS 클래스입니다. org.xbill.dns.DClass 값과 일치해야 합니다. 선택 사항:

dns.query

문자열

dig

쿼리 자체입니다. 필수 항목입니다.

dns.server

문자열

dig

특히 쿼리에 대한 서버입니다. If none is given, the default one specified by the OS will be used. 선택 사항:

85.4. 예제

85.4.1. IP lookup

        <route id="IPCheck">
            <from uri="direct:start"/>
            <to uri="dns:ip"/>
        </route>

도메인의 IP가 조회됩니다. 예를 들어 www.example.com은 192.0.32.10으로 확인됩니다.
조회할 IP 주소는 헤더에 "dns.domain" 키가 있어야 합니다.

85.4.2. DNS 조회

        <route id="IPCheck">
            <from uri="direct:start"/>
            <to uri="dns:lookup"/>
        </route>

이렇게 하면 도메인과 관련된 DNS 레코드 집합이 반환됩니다.
조회 이름을 헤더에 "dns.name" 키가 있어야 합니다.

85.4.3. DNS Dig

dig는 DNS 쿼리를 실행하는 Unix 명령줄 유틸리티입니다.

        <route id="IPCheck">
            <from uri="direct:start"/>
            <to uri="dns:dig"/>
        </route>

"dns.query" 키가 있는 헤더에 쿼리를 제공해야 합니다.

85.5. DNS 활성화 정책

DnsActivationPolicy는 dns 상태에 따라 경로를 동적으로 시작하고 중지하는 데 사용할 수 있습니다.

다른 리전에서 실행되는 동일한 구성 요소의 인스턴스가 있는 경우 dns가 해당 지역을 가리키는 경우에만 활성화하도록 각 리전에서 경로를 구성할 수 있습니다.

예를 들어 NYC에 인스턴스가 있고 SFO의 인스턴스가 있을 수 있습니다. NYC 인스턴스를 up 및 SFO 인스턴스를 종료하도록 nyc-service.example.com을 가리키도록 CNAME service.example.com 서비스를 구성합니다. sfo-service.example.com을 가리키도록 CNAME service.example.com을 변경하면 해당 경로가 중지되고 sfo가 경로를 표시합니다. 이를 통해 실제 구성 요소를 다시 시작하지 않고 지역을 전환할 수 있습니다.

	<bean id="dnsActivationPolicy" class="org.apache.camel.component.dns.policy.DnsActivationPolicy">
		<property name="hostname" value="service.example.com" />
		<property name="resolvesTo" value="nyc-service.example.com" />
		<property name="ttl" value="60000" />
	</bean>

	<route id="routeId" autoStartup="false" routePolicyRef="dnsActivationPolicy">
	</route>

86장. Docker 구성 요소

Camel 버전 2.15에서 사용 가능

Docker와 통신을 위한 Camel 구성 요소.

Docker Camel 구성 요소는 Docker Remote API 를 통해 docker-java 를 활용합니다.

86.1. URI 형식

docker://[operation]?[options]

여기서 작업 은 Docker에서 수행할 특정 작업입니다.

86.2. 일반 옵션

Docker 구성 요소는 아래 나열된 두 가지 옵션을 지원합니다.

Expand
이름설명기본값유형

구성 (고급)

공유 Docker 구성 사용

 

DockerConfiguration

resolveProperty Placeholders (advanced)

구성 요소가 시작 시 자체적으로 속성 자리 표시자를 확인해야 하는지 여부입니다. String 유형의 속성만 속성 자리 표시자를 사용할 수 있습니다.Only properties which are of String type can use property placeholders.

true

boolean

Docker 엔드포인트는 URI 구문을 사용하여 구성됩니다.

docker:operation

다음 경로 및 쿼리 매개변수를 사용합니다.

86.2.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

작업

사용할 수 있는 Which 작업 필요

 

DockerOperation

86.2.2. 쿼리 매개변수 (20 매개변수):

Expand
이름설명기본값유형

이메일 (일반)

사용자와 연결된 이메일 주소

 

문자열

호스트 (일반)

필수 Docker 호스트

localhost

문자열

포트 (공용)

필수 Docker 포트

2375

정수

requestTimeout (일반)

응답의 요청 시간 초과(초)

 

정수

bridgeErrorHandler (consumer)

소비자를 Camel 라우팅 오류 처리기에 브리징할 수 있습니다. 이는 소비자가 들어오는 메시지를 선택하는 동안 예외가 발생한 것을 의미하며, 이제 메시지로 처리되어 라우팅 오류 처리기에 의해 처리됩니다. 기본적으로 소비자는 org.apache.camel.spi.ExceptionHandler를 사용하여 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

false

boolean

예외 처리기 (consumer)

소비자가 사용자 지정 ExceptionHandler를 사용하도록 하려면 다음을 수행합니다. bridgeErrorHandler 옵션이 활성화되어 있는지 확인한 후 이 옵션이 사용되지 않습니다. 기본적으로 소비자는 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

 

ExceptionHandler

exchangePattern (consumer)

소비자가 교환을 생성할 때 교환 패턴을 설정합니다.

 

ExchangePattern

cmdExecFactory (advanced)

사용할 DockerCmdExecFactory 구현의 정규화된 클래스 이름입니다.

com.github.dockerjava.netty.NettyDockerCmdExecFactory

문자열

followRedirectFilter (advanced)

리디렉션 필터를 실행할지 여부

false

boolean

loggingFilter (advanced)

로깅 필터 사용 여부

false

boolean

maxPerRouteConnections (고급)

최대 경로 연결

100

정수

maxTotalConnections (advanced)

최대 총 연결 수

100

정수

serverAddress (advanced)

Docker 레지스트리의 서버 주소입니다.

https://index.docker.io/v1/

문자열

소켓 (advanced)

소켓 연결 모드

true

boolean

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

certpath ( security)

SSL 인증서 체인을 포함하는 위치

 

문자열

암호 (보안)

인증하기 위한 암호

 

문자열

보안 (보안)

HTTPS 통신 사용

false

boolean

tlsVerify (보안)

TLS 확인

false

boolean

사용자 이름 (보안)

인증할 사용자 이름

 

문자열

86.3. 헤더 전략

모든 URI 옵션을 Header 속성으로 전달할 수 있습니다. 메시지 헤더에 있는 값이 URI 매개변수보다 우선합니다. header 속성은 다음과 같이 CamelDocker 접두사가 있는 URI 옵션 형식을 사용합니다.

Expand
URI 옵션헤더 속성

containerId

CamelDockerContainerId

86.4. 예제

다음 예제에서는 Docker의 이벤트를 사용합니다.

from("docker://events?host=192.168.59.103&port=2375").to("log:event");

다음 예제에서는 Docker에서 시스템 전체 정보를 쿼리합니다.

from("docker://info?host=192.168.59.103&port=2375").to("log:info");

86.5. 종속 항목

Camel 경로에서 Docker를 사용하려면 구성 요소를 구현하는 camel-docker 에 종속성을 추가해야 합니다.

Maven을 사용하는 경우 pom.xml에 다음을 추가하여 최신 버전과 가장 큰 릴리스의 버전 번호를 대체합니다(최신 버전의 다운로드 페이지 참조).

<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-docker</artifactId>
  <version>x.x.x</version>
</dependency>

87장. Dozer 구성 요소

Camel 버전 2.15에서 사용 가능

dozer: 구성 요소는 Camel 2.15.0 이후 Dozer 매핑 프레임워크를 사용하여 Java 빈 간에 매핑할 수 있는 기능을 제공합니다.  Camel은 Dozer 매핑을 유형 변환기로 트리거하는 기능도 지원합니다.  Dozer 끝점과 Dozer 변환기를 사용하는 경우의 주요 차이점은 다음과 같습니다.

  • 변환기 레지스트리를 통해 엔드 포인트 기반 vs. 글로벌 구성에서 Dozer 매핑 구성을 관리하는 기능입니다.
  • Dozer 끝점은 모든 변환 끝점을 지원하기 위해 Camel 데이터 형식을 사용하여 데이터를 마샬링/마달링하도록 구성할 수 있습니다.
  • Dozer 구성 요소를 사용하면 Dozer의 세분화된 통합 및 확장을 통해 추가 기능(예: 매핑에 표현식을 사용하여 리터럴 값 매핑 등)을 지원할 수 있습니다.

Dozer 구성 요소를 사용하려면 Maven 사용자가 pom.xml 에 다음 종속성을 추가해야 합니다.

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-dozer</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>

87.1. URI 형식

Dozer 구성 요소는 생산자 끝점만 지원합니다.

dozer:endpointId[?options]

여기서 endpointId 는 Dozer 엔드포인트 구성을 고유하게 식별하는 데 사용되는 이름입니다. 

Dozer 엔드포인트 URI의 예:

from("direct:orderInput").
  to("dozer:transformOrder?mappingFile=orderMapping.xml&targetModel=example.XYZOrder").
  to("direct:orderOutput");

87.2. 옵션

Dozer 구성 요소에는 옵션이 없습니다.

Dozer 엔드포인트는 URI 구문을 사용하여 구성됩니다.

dozer:name

다음 경로 및 쿼리 매개변수를 사용합니다.

87.2.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

name

사람이 읽을 수 있는 매핑 이름이 필요합니다.

 

문자열

87.2.2. 쿼리 매개변수(7 매개변수):

Expand
이름설명기본값유형

mappingConfiguration (producer)

Dozer 매핑 구성에 사용해야 하는 Camel 레지스트리의 DozerBeanMapperConfiguration 빈의 이름입니다. 이는 Dozer의 구성 방법을 세밀하게 제어하는 데 사용할 수 있는 mappingFile 옵션의 대안입니다. 빈이 Camel 레지스트리(예: myDozerConfig)에 있음을 나타내기 위해 값에 접두사를 사용해야 합니다.

 

DozerBeanMapper 구성

mappingFile (producer)

Dozer 구성 파일의 위치입니다. 파일은 기본적으로 classpath에서 로드되지만 file:, classpath: 또는 http:를 사용하여 특정 위치에서 구성을 로드할 수 있습니다.

dozerBeanMapping.xml

문자열

marshalId (producer)

매핑 출력을 Java가 아닌 유형으로 마샬링하는 데 사용할 Camel Context 내에 정의된 dataFormat의 id입니다.

 

문자열

sourceModel (producer)

매핑에 사용되는 소스 유형의 정규화된 클래스 이름입니다. 지정된 경우 Dozer로 매핑하기 전에 매핑에 대한 입력이 지정된 유형으로 변환됩니다.

 

문자열

targetModel (producer)

매핑에 사용된 대상 유형에 대한 정규화된 클래스 이름이 필요합니다.

 

문자열

unmarshalId (producer)

Java가 아닌 유형의 매핑 입력을 해제하는 데 사용할 Camel Context에 정의된 dataFormat의 id입니다.

 

문자열

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

87.3. Dozer에서 데이터 형식 사용

Dozer는 매핑을 위해 Java 이외의 소스와 대상을 지원하지 않으므로 XML 문서를 자체적으로 Java 오브젝트에 매핑할 수 없습니다.  다행히도 Camel은 데이터 형식을 사용하여 Java와 다양한 형식 간의 마샬링을 광범위하게 지원합니다.  Dozer 구성 요소는 Dozer를 통해 처리하기 전에 입력 및 출력 데이터를 데이터 형식으로 전달할 수 있도록 하여 이 지원을 활용합니다.  Dozer 구성 요소 외부에서 직접 이 작업을 수행할 수는 있지만 Dozer 구성 요소에서 직접 지원하면 단일 끝점을 사용하여 Camel 내 모든 변환을 구성할 수 있습니다.

예를 들어 Dozer 구성 요소를 사용하여 XML 데이터 구조와 JSON 데이터 구조 간에 매핑하려고 한다고 가정해 보겠습니다.  Camel Context에 다음과 같은 데이터 형식이 정의된 경우:

<dataFormats>
  <json library="Jackson" id="myjson"/>
  <jaxb contextPath="org.example" id="myjaxb"/>
</dataFormats>

그런 다음, Dozer 끝점을 구성하여 JAXB 데이터 형식을 사용하여 입력 XML을 분리 해제하고 Jackson을 사용하여 매핑 출력을 마샬링할 수 있습니다.

<endpoint uri="dozer:xml2json?marshalId=myjson&amp;unmarshalId=myjaxb&amp;targetModel=org.example.Order"/>

87.4. Dozer 구성

모든 Dozer 엔드포인트에는 소스와 대상 오브젝트 간 매핑을 정의하는 Dozer 매핑 구성 파일이 필요합니다.  mappingFile 또는 mappingConfiguration 옵션이 엔드포인트에 지정되지 않은 경우 구성 요소는 META-INF/dozerBeanMapping.xml의 위치를 기본값으로 합니다.  단일 엔드포인트에 대해 여러 매핑 구성 파일을 제공하거나 추가 구성 옵션(예: 이벤트 리스너, 사용자 지정 변환기 등)을 지정해야 하는 경우 org.apache.camel.dozer.dozer.dozer.dozerMapperConfiguration 의 인스턴스를 사용할 수 있습니다.

<bean id="mapper" class="org.apache.camel.converter.dozer.DozerBeanMapperConfiguration">  
  <property name="mappingFiles">
    <list>
      <value>mapping1.xml</value>
      <value>mapping2.xml</value>
    </list>
  </property>
</bean>

87.5. 매핑 확장

Dozer 구성 요소는 Dozer 매핑 프레임워크에 대한 여러 확장을 사용자 지정 변환기로 구현합니다.  이러한 변환기는 Dozer 자체에서 직접 지원하지 않는 매핑 함수를 구현합니다.

87.5.1. 변수 매핑

변수 매핑을 사용하면 소스 필드의 값을 사용하는 대신 Dozer 구성 내의 변수 정의 값을 target 필드에 매핑할 수 있습니다.  이는 다른 매핑 프레임워크의 연속 매핑과 같습니다. 여기서 대상 필드에 리터럴 값을 할당할 수 있습니다.  변수 매핑을 사용하려면 매핑 구성 내에서 변수를 정의한 다음 VariableMapper 클래스에서 선택한 대상 필드에 매핑하면 됩니다.

<mappings xmlns="http://dozermapper.github.io/schema/bean-mapping"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://dozermapper.github.io/schema/bean-mapping http://dozermapper.github.io/schema/bean-mapping.xsd">
  <configuration>
    <variables>
      <variable name="CUST_ID">ACME-SALES</variable>
    </variables>
  </configuration>
  <mapping>
    <class-a>org.apache.camel.component.dozer.VariableMapper</class-a>
    <class-b>org.example.Order</class-b>
    <field custom-converter-id="_variableMapping" custom-converter-param="${CUST_ID}">
      <a>literal</a>
      <b>custId</b>
    </field>
  </mapping>
</mappings>

87.5.2. 사용자 정의 매핑

사용자 지정 매핑을 사용하면 소스 필드가 대상 필드에 매핑되는 방법에 대한 자체 논리를 정의할 수 있습니다.  이는 Dozer 고객 컨버터와 기능 면에서 두 가지 주목할만한 차이점이 있습니다.

  • 사용자 지정 매핑이 있는 단일 클래스에 여러 개의 변환기 메서드를 포함할 수 있습니다.
  • 사용자 지정 매핑을 사용하여 Dozer 특정 인터페이스를 구현할 필요가 없습니다.

매핑 구성에서 기본 제공 '_customMapping' 변환기를 사용하여 사용자 정의 매핑을 선언합니다.  이 변환기의 매개 변수에는 다음과 같은 구문이 있습니다.

[class-name][,method-name]

메서드 이름은 선택 사항입니다. Dozer 구성 요소에서 매핑에 필요한 입력 및 출력 유형과 일치하는 메서드를 검색합니다.  사용자 정의 매핑 및 구성의 예는 아래에 제공됩니다.

public class CustomMapper {
    // All customer ids must be wrapped in "[ ]"
    public Object mapCustomer(String customerId) {
        return "[" + customerId + "]";
    }
} 
<mappings xmlns="http://dozermapper.github.io/schema/bean-mapping"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://dozermapper.github.io/schema/bean-mapping http://dozermapper.github.io/schema/bean-mapping.xsd">
  <mapping>
    <class-a>org.example.A</class-a>
    <class-b>org.example.B</class-b>
    <field custom-converter-id="_customMapping"
        custom-converter-param="org.example.CustomMapper,mapCustomer">
      <a>header.customerNum</a>
      <b>custId</b>
    </field>
  </mapping>
</mappings>

87.5.3. 표현식 매핑

표현식 매핑을 사용하면 Camel의 강력한 언어 기능을 사용하여 표현식을 평가하고 매핑의 대상 필드에 결과를 할당할 수 있습니다.  Camel이 지원하는 모든 언어는 표현식 매핑에 사용할 수 있습니다.  표현식의 기본 예에는 Camel 메시지 헤더 또는 교환 속성을 대상 필드에 매핑하거나 여러 소스 필드를 대상 필드에 연결하는 기능이 포함됩니다.  매핑 식의 구문은 다음과 같습니다.

[language]:[expression]

메시지 헤더를 대상 필드에 매핑하는 예:

<mappings xmlns="http://dozermapper.github.io/schema/bean-mapping"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://dozermapper.github.io/schema/bean-mapping http://dozermapper.github.io/schema/bean-mapping.xsd">
  <mapping>
    <class-a>org.apache.camel.component.dozer.ExpressionMapper</class-a>
    <class-b>org.example.B</class-b>
    <field custom-converter-id="_expressionMapping" custom-converter-param="simple:\${header.customerNumber}">
      <a>expression</a>
      <b>custId</b>
    </field>
  </mapping>
</mappings>

Dozer가 EL을 사용하여 정의된 변수 값을 해결하려고 할 때 오류가 발생하지 않도록 표현식 내 모든 속성을 "\"로 이스케이프해야 합니다.

88장. 드릴 구성 요소

Camel 버전 2.19에서 사용 가능

드릴: 구성 요소는 Apache DrillCluster 로 쿼리할 수 있는 기능을 제공합니다.

드릴은 빅 데이터 탐색을 위한 Apache 오픈 소스 SQL 쿼리 엔진입니다. 드릴은 처음부터 최신 빅 데이터 애플리케이션에서 오는 반-구조화된 빠른 진화의 데이터를 기반으로 한 고성능 분석을 지원하는 동시에 업계 표준 쿼리 언어인 ANSI SQL의 친숙하고 에코시스템을 제공합니다.

Maven 사용자는 이 구성 요소를 위해 다음 종속성을 pom.xml 에 추가해야 합니다.

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-drill</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>

88.1. URI 형식

drill://host[?options]

다음 형식 ?option=value&option=value&…​로 URI에 쿼리 옵션을 추가할 수 있습니다.

88.2. Drill Producer

생산자는 CamelDrillQuery 헤더를 사용하여 쿼리를 실행하고 결과를 본문에 넣습니다.

88.3. 옵션

Drill 구성 요소에는 옵션이 없습니다.

Drill 엔드포인트는 URI 구문을 사용하여 구성됩니다.

drill:host

다음 경로 및 쿼리 매개변수를 사용합니다.

88.3.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

host

필수 ZooKeeper 호스트 이름 또는 IP 주소. 호스트 이름 또는 IP 주소 대신 로컬로 사용하여 로컬 드릴비트에 연결합니다.

 

문자열

88.3.2. 쿼리 매개변수 (5 매개변수):

Expand
이름설명기본값유형

clusterId (producer)

클러스터 ID https://drill.apache.org/docs/using-the-jdbc-driver/determining-the-cluster-id

 

문자열

디렉토리 (producer)

ZooKeeper의 드릴 디렉터리

 

문자열

모드 (producer)

연결 모드: zk: Zookeeper 드릴bit: Drillbit 직접 연결 https://drill.apache.org/docs/using-the-jdbc-driver/

ZK

DrillConnectionMode

포트 (producer)

zookeeper 포트 번호

 

정수

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

88.4. 예를 들면 다음과 같습니다.

  • Camel 구성
  • 구성 요소
  • 끝점
  • 시작하기

89장. Dropbox Component

Camel 버전 2.14로 사용 가능

dropbox: 구성 요소를 사용하면 Dropbox 원격 폴더를 메시지의 생산자 또는 소비자로 처리할 수 있습니다. Dropbox Java Core API (이 구성 요소의 참조 버전은 1.7.x임)를 사용 하면 다음과 같은 기능이 있습니다.

  • 소비자로서 파일을 다운로드하고 쿼리를 통해 파일을 검색합니다.
  • 생산자로 파일을 다운로드하고, 원격 디렉터리 간에 파일을 이동하고, 파일/dir을 삭제하고, 파일을 업로드하고, 쿼리로 파일을 검색합니다.

Maven 사용자는 이 구성 요소를 위해 다음 종속성을 pom.xml 에 추가해야 합니다.

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-dropbox</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>

89.1. URI 형식

dropbox://[operation]?[options]

여기서 작업 은 Dropbox 원격 폴더에서 수행할 특정 동작(일반적으로 CRUD 작업입니다)입니다.

89.2. 작업

Expand
작업설명

del

Dropbox에서 파일 또는 디렉토리 삭제

get

Dropbox에서 파일 다운로드

move

Dropbox의 폴더에서 파일 이동

put

Dropbox에 파일 업로드

search

문자열 쿼리를 기반으로 Dropbox에서 파일 검색

작업을 수행하려면 추가 옵션이 필요하며 일부는 특정 작업에 필요합니다.

89.3. 옵션

Dropbox API를 사용하려면 accessToken 및 clientIdentifier  받아야 합니다.
이미지를 가져오는 방법을 설명 하는 Dropbox 문서 를 참조할 수 있습니다.  

Dropbox 구성 요소에는 옵션이 없습니다.

Dropbox 엔드포인트는 URI 구문을 사용하여 구성됩니다.

dropbox:operation

다음 경로 및 쿼리 매개변수를 사용합니다.

89.3.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

작업

필요한 특정 작업(일반적으로 Dropbox 원격 폴더에서 수행할 CRUD 작업임).

 

DropboxOperation

89.3.2. 쿼리 매개변수(12 매개변수):

Expand
이름설명기본값유형

Access Token (common)

required: 특정 Dropbox 사용자에게 API 요청을 하는 데 필요한 액세스 토큰

 

문자열

클라이언트 (일반)

기존 DbxClient 인스턴스를 DropBox 클라이언트로 사용합니다.

 

DbxClientV2

clientIdentifier (일반)

API 요청을 하기 위해 등록된 앱의 이름

 

문자열

localPath (common)

로컬 파일 시스템에서 Dropbox에 업로드할 선택적 폴더 또는 파일입니다. 이 옵션이 구성되지 않은 경우 메시지 본문이 업로드할 콘텐츠로 사용됩니다.

 

문자열

newRemotePath (common)

대상 파일 또는 폴더

 

문자열

쿼리 (일반)

검색할 하위 문자열 목록입니다. 파일은 모든 하위 문자열이 포함된 경우에만 일치합니다. 이 옵션을 설정하지 않으면 모든 파일이 일치합니다.

 

문자열

remotePath (common)

이동할 파일 또는 폴더

 

문자열

uploadMode (common)

업로드할 모드. 동일한 이름을 가진 파일이 이미 dropbox에 있는 경우 새 파일 이름이 이름이 변경된 경우. dropbox에 동일한 이름의 파일이 이미 존재하는 경우 이를 덮어씁니다.

 

DropboxUploadMode

bridgeErrorHandler (consumer)

소비자를 Camel 라우팅 오류 처리기에 브리징할 수 있습니다. 이는 소비자가 들어오는 메시지를 선택하는 동안 예외가 발생한 것을 의미하며, 이제 메시지로 처리되어 라우팅 오류 처리기에 의해 처리됩니다. 기본적으로 소비자는 org.apache.camel.spi.ExceptionHandler를 사용하여 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

false

boolean

예외 처리기 (consumer)

소비자가 사용자 지정 ExceptionHandler를 사용하도록 하려면 다음을 수행합니다. bridgeErrorHandler 옵션이 활성화되어 있는지 확인한 후 이 옵션이 사용되지 않습니다. 기본적으로 소비자는 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

 

ExceptionHandler

exchangePattern (consumer)

소비자가 교환을 생성할 때 교환 패턴을 설정합니다.

 

ExchangePattern

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

89.4. del 작업

Dropbox에서 파일을 삭제합니다.

Camel 생산자로만 작동합니다.

다음은 이 작업에 대한 옵션 목록입니다.

Expand
속성필수설명

remotePath

true

Dropbox에서 삭제할 폴더 또는 파일

89.4.1. 샘플

from("direct:start")
  .to("dropbox://del?accessToken=XXX&clientIdentifier=XXX&remotePath=/root/folder1")
  .to("mock:result");

from("direct:start")
  .to("dropbox://del?accessToken=XXX&clientIdentifier=XXX&remotePath=/root/folder1/file1.tar.gz")
  .to("mock:result");

89.4.2. 결과 메시지 헤더

다음 헤더는 메시지 결과에 설정됩니다.

Expand
속성

DELETED_PATH

dropbox에서 삭제된 경로의 이름

89.4.3. 결과 메시지 본문

다음 오브젝트는 메시지 본문 결과에 설정됩니다.

Expand
오브젝트 유형설명

문자열

dropbox에서 삭제된 경로의 이름

89.5. Get (download) 작업

Dropbox에서 파일을 다운로드합니다.

Camel 생산자 또는 Camel 소비자로 작동합니다.

다음은 이 작업에 대한 옵션 목록입니다.

Expand
속성필수설명

remotePath

true

Dropbox에서 다운로드할 폴더 또는 파일

89.5.1. 샘플

from("direct:start")
  .to("dropbox://get?accessToken=XXX&clientIdentifier=XXX&remotePath=/root/folder1/file1.tar.gz")
  .to("file:///home/kermit/?fileName=file1.tar.gz");

from("direct:start")
  .to("dropbox://get?accessToken=XXX&clientIdentifier=XXX&remotePath=/root/folder1")
  .to("mock:result");

from("dropbox://get?accessToken=XXX&clientIdentifier=XXX&remotePath=/root/folder1")
  .to("file:///home/kermit/");

89.5.2. 결과 메시지 헤더

다음 헤더는 메시지 결과에 설정됩니다.

Expand
속성

DOWNLOADED_FILE

단일 파일 다운로드의 경우, 다운로드한 원격 파일의 경로

DOWNLOADED_FILES

여러 파일을 다운로드하는 경우, 다운로드한 원격 파일의 경로

89.5.3. 결과 메시지 본문

다음 오브젝트는 메시지 본문 결과에 설정됩니다.

Expand
오브젝트 유형설명

ByteArrayOutputStream

단일 파일 다운로드의 경우, 다운로드한 파일을 나타내는 스트림

Map<String, ByteArrayOutputStream>

여러 파일을 다운로드하는 경우 다운로드한 원격 파일의 경로와 함께 다운로드한 파일을 나타내는 스트림의 키인 맵이 있습니다.

89.6. 이동 작업

한 폴더의 Dropbox 파일을 다른 폴더로 이동합니다.

Camel 생산자로만 작동합니다.

다음은 이 작업에 대한 옵션 목록입니다.

Expand
속성필수설명

remotePath

true

이동할 파일 또는 폴더

newRemotePath

true

대상 파일 또는 폴더

89.6.1. 샘플

from("direct:start")
  .to("dropbox://move?accessToken=XXX&clientIdentifier=XXX&remotePath=/root/folder1&newRemotePath=/root/folder2")
  .to("mock:result");

89.6.2. 결과 메시지 헤더

다음 헤더는 메시지 결과에 설정됩니다.

Expand
속성

MOVED_PATH

dropbox에서 이동된 경로의 이름

89.6.3. 결과 메시지 본문

다음 오브젝트는 메시지 본문 결과에 설정됩니다.

Expand
오브젝트 유형설명

문자열

dropbox에서 이동된 경로의 이름

89.7. 삽입(upload) 작업

Dropbox에 파일을 업로드합니다.

Camel 생산자로 작동합니다.

다음은 이 작업에 대한 옵션 목록입니다.

Expand
속성필수설명

uploadMode

true

add or force this option specifies how a file should be saved on dropbox: in case of "add" the new file will be renamed if a file with the same name already exists on dropbox. 같은 이름의 파일이 dropbox에 이미 존재하는 경우 이 파일을 덮어씁니다.

localPath

false

로컬 파일 시스템에서 Dropbox에 업로드할 폴더 또는 파일입니다. 이 옵션을 구성한 경우 Camel 메시지 본문의 콘텐츠가 포함된 단일 파일로 업로드하는 것보다 우선합니다(메시지 본문이 바이트 배열로 변환됨).

remotePath

false

Dropbox의 폴더 대상. 속성이 설정되지 않은 경우 구성 요소는 로컬 경로와 동일한 원격 경로에 파일을 업로드합니다. Windows 또는 절대 localPath가 없는 경우 다음과 같은 예외로 실행할 수 있습니다.

java.lang.IllegalArgumentException: 'path': bad path: "/": "C:/My/File"
OR
Caused by: java.lang.IllegalArgumentException: 'path': "MyFile": "MyFile"로 시작해야 합니다.

89.7.1. 샘플

from("direct:start").to("dropbox://put?accessToken=XXX&clientIdentifier=XXX&uploadMode=add&localPath=/root/folder1")
  .to("mock:result");

from("direct:start").to("dropbox://put?accessToken=XXX&clientIdentifier=XXX&uploadMode=add&localPath=/root/folder1&remotePath=/root/folder2")
  .to("mock:result");

및 메시지 본문의 콘텐츠가 포함된 단일 파일을 업로드

from("direct:start")
   .setHeader(DropboxConstants.HEADER_PUT_FILE_NAME, constant("myfile.txt"))
   .to("dropbox://put?accessToken=XXX&clientIdentifier=XXX&uploadMode=add&remotePath=/root/folder2")
   .to("mock:result");

파일 이름은 우선 순위에 따라 DropboxConstants.HEADER_PUT_PUT_FILE_NAME 또는 Exchange.FILE_NAME 헤더에 제공될 수 있습니다. 헤더가 제공되지 않으면 메시지 id(uuid)가 파일 이름으로 사용됩니다.

89.7.2. 결과 메시지 헤더

다음 헤더는 메시지 결과에 설정됩니다.

Expand
속성

UPLOADED_FILE

단일 파일 업로드의 경우 원격 경로의 경로가 업로드됩니다.

UPLOADED_FILES

여러 파일을 업로드하는 경우 원격 경로가 업로드된 문자열

89.7.3. 결과 메시지 본문

다음 오브젝트는 메시지 본문 결과에 설정됩니다.

Expand
오브젝트 유형설명

문자열

단일 파일 업로드의 경우 업로드 작업, OK 또는 KO의 결과

Map<String, DropboxResultCode>

여러 파일 업로드의 경우 업로드 작업, OK 또는 KO의 결과로 원격 파일의 경로를 키로 사용하는 맵이 있습니다.

89.8. 검색 작업

하위 디렉토리를 포함하여 원격 Dropbox 폴더 내에서 검색합니다.

Camel 생산자 및 Camel 소비자로 작동합니다.

다음은 이 작업에 대한 옵션 목록입니다.

Expand
속성필수설명

remotePath

true

Dropbox의 폴더는 검색할 위치입니다.

query

true

검색할 하위 문자열 목록입니다. 파일은 모든 하위 문자열이 포함된 경우에만 일치합니다. 이 옵션을 설정하지 않으면 모든 파일이 일치합니다. 쿼리는 엔드포인트 구성 또는 Camel 메시지에서 CamelDropboxQuery 헤더로 제공해야 합니다.

89.8.1. 샘플

from("dropbox://search?accessToken=XXX&clientIdentifier=XXX&remotePath=/XXX&query=XXX")
  .to("mock:result");

from("direct:start")
  .setHeader("CamelDropboxQuery", constant("XXX"))
  .to("dropbox://search?accessToken=XXX&clientIdentifier=XXX&remotePath=/XXX")
  .to("mock:result");

89.8.2. 결과 메시지 헤더

다음 헤더는 메시지 결과에 설정됩니다.

Expand
속성

FOUNDED_FILES

발견된 파일 경로 목록

89.8.3. 결과 메시지 본문

다음 오브젝트는 메시지 본문 결과에 설정됩니다.

Expand
오브젝트 유형설명

List<DbxEntry>

발견된 파일 경로 목록입니다. 이 오브젝트에 대한 자세한 내용은 Dropbox 문서를 참조하십시오.

 

90장. Ehcache 구성 요소

Camel 버전 2.18로 사용 가능

ehcache 구성 요소를 사용하면 Ehcache 3을 캐시 구현으로 사용하여 캐싱 작업을 수행할 수 있습니다.

이 구성 요소는 생산자 및 이벤트 기반 소비자 엔드 포인트를 지원합니다.

캐시 소비자는 이벤트 기반 소비자이며 특정 캐시 활동을 수신하고 응답하는 데 사용할 수 있습니다. 

Maven 사용자는 이 구성 요소를 위해 다음 종속성을 pom.xml 에 추가해야 합니다.

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-ehcache</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>

90.1. URI 형식

ehcache://cacheName[?options]

?option=value&option=#beanRef&…​ 형식으로 URI에 쿼리 옵션을 추가할 수 있습니다.

90.2. 옵션

Ehcache 구성 요소는 아래 나열된 7 가지 옵션을 지원합니다.

Expand
이름설명기본값유형

구성 (고급)

글로벌 구성 요소 구성 설정

 

EhcacheConfiguration

CacheManager (common)

캐시 관리자

 

CacheManager

CacheManager Configuration (common)

캐시 관리자 구성

 

설정

cacheConfiguration (일반)

캐시를 생성하는 데 사용할 기본 캐시 구성입니다.

 

CacheConfiguration<?,?>

cacheConfigurations (공용)

캐시를 생성하는 데 사용할 캐시 구성 맵입니다.

 

map

cacheConfigurationUri (일반)

Ehcache XML 구성 파일의 위치를 가리키는 URI

 

문자열

resolveProperty Placeholders (advanced)

구성 요소가 시작 시 자체적으로 속성 자리 표시자를 확인해야 하는지 여부입니다. String 유형의 속성만 속성 자리 표시자를 사용할 수 있습니다.Only properties which are of String type can use property placeholders.

true

boolean

Ehcache 끝점은 URI 구문을 사용하여 구성됩니다.

ehcache:cacheName

다음 경로 및 쿼리 매개변수를 사용합니다.

90.2.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

cacheName

필요한 캐시 이름

 

문자열

90.2.2. 쿼리 매개변수(17 매개변수):

Expand
이름설명기본값유형

CacheManager (common)

캐시 관리자

 

CacheManager

cacheManagerConfiguration (common)

캐시 관리자 구성

 

설정

configurationUri (common)

Ehcache XML 구성 파일의 위치를 가리키는 URI

 

문자열

createCacheIfNotExist (common)

캐시가 존재하는 경우 또는 사전 구성할 수 없는 경우 캐시를 생성해야 하는 경우 를 구성합니다.

true

boolean

bridgeErrorHandler (consumer)

소비자를 Camel 라우팅 오류 처리기에 브리징할 수 있습니다. 이는 소비자가 들어오는 메시지를 선택하는 동안 예외가 발생한 것을 의미하며, 이제 메시지로 처리되어 라우팅 오류 처리기에 의해 처리됩니다. 기본적으로 소비자는 org.apache.camel.spi.ExceptionHandler를 사용하여 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

false

boolean

EventFiring (consumer)

전달 모드(동기적, 비동기) 설정

비동기

EventFiring

EventOrdering (consumer)

전달 모드(주문, 순서가 지정되지 않음)를 설정합니다.

ORDERED

EventOrdering

eventTypes (consumer)

수신할 이벤트 유형을 설정합니다.

REMOVE,EXPIRED,REMOVED,CREATED,UPDATED

Set

예외 처리기 (consumer)

소비자가 사용자 지정 ExceptionHandler를 사용하도록 하려면 다음을 수행합니다. bridgeErrorHandler 옵션이 활성화되어 있는지 확인한 후 이 옵션이 사용되지 않습니다. 기본적으로 소비자는 WARN 또는 ERROR 수준에서 기록되고 무시되는 예외를 처리합니다.

 

ExceptionHandler

exchangePattern (consumer)

소비자가 교환을 생성할 때 교환 패턴을 설정합니다.

 

ExchangePattern

작업 (producer)

기본 캐시 작업을 구성하려면 다음을 수행합니다. 작업이 메시지 헤더에 설정된 경우 헤더의 작업이 우선합니다.

 

문자열

(producer)

기본 action 키를 구성하려면 다음을 수행합니다. 메시지가 메시지 헤더에 설정된 경우 헤더의 키가 우선합니다.

 

개체

구성 (고급)

캐시를 생성하는 데 사용할 기본 캐시 구성입니다.

 

CacheConfiguration<?,?>

구성 (advanced)

캐시를 생성하는 데 사용할 캐시 구성 맵입니다.

 

map

keytype (advanced)

캐시 키 유형, 기본 java.lang.Object

java.lang.Object

문자열

synchronous (advanced)

동기 처리를 엄격하게 사용해야 하는지 또는 Camel이 비동기 처리를 사용할 수 있는지 여부를 설정합니다(지원되는 경우).

false

boolean

ValueType (advanced)

캐시 값 유형, 기본 java.lang.Object

java.lang.Object

문자열

90.2.3. Message Headers Camel 

 

Expand
header유형설명

CamelEhcacheAction

문자열

캐시에서 수행할 수 있는 옵션은 다음과 같습니다.

* CLEAR * PUT * PUT_ALL * PUT_IF_ABSENT * GET * GET_ALL * REMOVE * REMOVE_ALL * REPLACE

CamelEhcacheActionHasResult

부울

동작 결과가 있는 경우 true로 설정합니다.

CamelEhcacheActionSucceeded

부울

actionucceded인 경우 true로 설정합니다.

CamelEhcacheKey

개체

작업에 사용되는 캐시 키

CamelEhcacheKeys

set<Object>

사용되는 키 목록입니다.

* PUT_ALL * GET_ALL * REMOVE_ALL

CamelEhcacheValue

개체

캐시 또는 작업 결과를 저장할 값입니다.

CamelEhcacheOldValue

개체

PUT_IF_ABSENT 또는 REPLACE와 같은 작업 비교에 사용되는 작업의 키와 연결된 이전 값

CamelEhcacheEventType

EventType

수신된 이벤트 유형입니다.

90.3. Ehcache 기반 멱등 리포지토리 예:

CacheManager manager = CacheManagerBuilder.newCacheManager(new XmlConfiguration("ehcache.xml"));
EhcacheIdempotentRepository repo = new EhcacheIdempotentRepository(manager, "idempotent-cache");

from("direct:in")
    .idempotentConsumer(header("messageId"), idempotentRepo)
    .to("mock:out");

 

90.4. Ehcache 기반 집계 저장소 예:

public class EhcacheAggregationRepositoryRoutesTest extends CamelTestSupport {
    private static final String ENDPOINT_MOCK = "mock:result";
    private static final String ENDPOINT_DIRECT = "direct:one";
    private static final int[] VALUES = generateRandomArrayOfInt(10, 0, 30);
    private static final int SUM = IntStream.of(VALUES).reduce(0, (a, b) -> a + b);
    private static final String CORRELATOR = "CORRELATOR";

    @EndpointInject(uri = ENDPOINT_MOCK)
    private MockEndpoint mock;

    @Produce(uri = ENDPOINT_DIRECT)
    private ProducerTemplate producer;

    @Test
    public void checkAggregationFromOneRoute() throws Exception {
        mock.expectedMessageCount(VALUES.length);
        mock.expectedBodiesReceived(SUM);

        IntStream.of(VALUES).forEach(
            i -> producer.sendBodyAndHeader(i, CORRELATOR, CORRELATOR)
        );

        mock.assertIsSatisfied();
    }

    private Exchange aggregate(Exchange oldExchange, Exchange newExchange) {
        if (oldExchange == null) {
            return newExchange;
        } else {
            Integer n = newExchange.getIn().getBody(Integer.class);
            Integer o = oldExchange.getIn().getBody(Integer.class);
            Integer v = (o == null ? 0 : o) + (n == null ? 0 : n);

            oldExchange.getIn().setBody(v, Integer.class);

            return oldExchange;
        }
    }

    @Override
    protected RoutesBuilder createRouteBuilder() throws Exception {
        return new RouteBuilder() {
            @Override
            public void configure() throws Exception {
                from(ENDPOINT_DIRECT)
                    .routeId("AggregatingRouteOne")
                    .aggregate(header(CORRELATOR))
                    .aggregationRepository(createAggregateRepository())
                    .aggregationStrategy(EhcacheAggregationRepositoryRoutesTest.this::aggregate)
                    .completionSize(VALUES.length)
                        .to("log:org.apache.camel.component.ehcache.processor.aggregate.level=INFO&showAll=true&mulltiline=true")
                        .to(ENDPOINT_MOCK);
            }
        };
    }

    protected EhcacheAggregationRepository createAggregateRepository() throws Exception {
        CacheManager cacheManager = CacheManagerBuilder.newCacheManager(new XmlConfiguration("ehcache.xml"));
        cacheManager.init();

        EhcacheAggregationRepository repository = new EhcacheAggregationRepository();
        repository.setCacheManager(cacheManager);
        repository.setCacheName("aggregate");

        return repository;
    }
}

91장. EJB 구성 요소

Camel 버전 2.4로 사용 가능

ejb: 구성 요소는 Camel 메시지 교환에 EJB를 바인딩합니다.

Maven 사용자는 이 구성 요소를 위해 다음 종속성을 pom.xml 에 추가해야 합니다.

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-ejb</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>

91.1. URI 형식

ejb:ejbName[?options]

여기서 ejbName 은 Application Server JNDI Registry에서 EJB를 조회하는 데 사용되는 문자열일 수 있습니다.

91.2. 옵션

EJB 구성 요소는 아래에 나열된 3 가지 옵션을 지원합니다.

Expand
이름설명기본값유형

컨텍스트 (producer)

EJB를 조회하는 데 사용할 컨텍스트

 

context

속성 (producer)

컨텍스트가 구성되지 않은 경우 javax.naming.Context 생성을 위한 속성입니다.

 

속성

resolveProperty Placeholders (advanced)

구성 요소가 시작 시 자체적으로 속성 자리 표시자를 확인해야 하는지 여부입니다. String 유형의 속성만 속성 자리 표시자를 사용할 수 있습니다.Only properties which are of String type can use property placeholders.

true

boolean

EJB 엔드포인트는 URI 구문을 사용하여 구성됩니다.

ejb:beanName

다음 경로 및 쿼리 매개변수를 사용합니다.

91.2.1. 경로 매개 변수 (1 매개변수):

Expand
이름설명기본값유형

beanName