Apache Camel コンポーネントリファレンス


Red Hat Fuse 7.9

Camel コンポーネントの設定リファレンス

概要

Apache Camel には 100 を超えるコンポーネントがあり、コンポーネントはそれぞれ、細かな設定が可能です。このガイドでは、各コンポーネントの設定について説明します。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。まずは、マスター (master)、スレーブ (slave)、ブラックリスト (blacklist)、ホワイトリスト (whitelist) の 4 つの用語の置き換えから始めます。この取り組みは膨大な作業を要するため、今後の複数のリリースで段階的に用語の置き換えを実施して参ります。詳細は、CTO である Chris Wright のメッセージ をご覧ください。

第1章 コンポーネントの概要

この章では、Apache Camel で使用できるすべてのコンポーネントの概要を説明します。

1.1. コンテナーの種類

Red Hat Fuse には、さまざまなコンテナータイプがあり、Camel アプリケーションをデプロイできます。

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

さらに、Camel アプリケーションは コンテナーレス で実行できるので、Camel アプリケーションは特別なコンテナーなしで JVM 内で直接実行されます。

場合によっては、Fuse ではコンテナーごとにサポートされる Camel コンポーネントが異なります。これにはさまざまな理由がありますが、場合によっては、コンポーネントがすべてのコンテナータイプに適しているわけではありません。たとえば、camel-ejb コンポーネントは Java EE (つまり、JBoss EAP) 用に特別に設計されており、他のコンテナータイプではサポートできません。

1.2. サポートされるコンポーネント

以下のキーに注意してください。

記号説明

サポート対象

サポートされないか、まだサポート対象ではない

非推奨

今後のリリースで削除される可能性があります

表1.1「Apache Camel コンポーネントサポートマトリックス」 では、各 Camel コンポーネントがサポートされるコンテナーについて、包括的に説明します。

表1.1 Apache Camel コンポーネントサポートマトリックス
コンポーネントコンテナーレスSpring Boot 2.xKarafJBoss EAP

activemq-camel

activemq-http

camel-ahc

camel-ahc-ws

camel-ahc-wss

camel-amqp

camel-apns

camel-as2

camel-asterisk

camel-atmos

camel-atmosphere-websocket

camel-atom

camel-atomix

camel-avro

camel-aws

camel-azure

camel-bam

非推奨

非推奨

非推奨

camel-bean

camel-bean-validator

camel-beanstalk

camel-binding

非推奨

非推奨

非推奨

camel-blueprint

camel-bonita

camel-box

camel-braintree

camel-browse

camel-cache

非推奨

非推奨

非推奨

camel-caffeine

camel-cdi

非推奨

camel-chronicle-engine

camel-chunk

camel-class

camel-cm-sms

camel-cmis

camel-coap

camel-cometd

camel-context

非推奨

camel-consul

camel-controlbus

camel-couchbase

camel-couchdb

camel-cql

camel-crypto

camel-crypto-cms

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

非推奨

camel-ehcache

camel-ejb

camel-elasticsearch

camel-elasticsearch5

camel-elasticsearch-rest

camel-elsql

camel-etcd

camel-eventadmin

camel-exec

camel-facebook

camel-fhir

camel-file

camel-flatpack

camel-flink

camel-fop

camel-freemarker

camel-ftp

camel-gae

非推奨

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-dsl

非推奨

camel-grpc

camel-guava-eventbus

camel-guice

非推奨

非推奨

camel-hawtdb

非推奨

非推奨

非推奨

camel-hazelcast

camel-hbase

camel-hdfs

非推奨

camel-hdfs2

camel-headersmap

camel-hipchat

camel-http

非推奨

非推奨

camel-http4

camel-hystrix

camel-ibatis

非推奨

camel-iec60870

camel-ignite

camel-imap

camel-infinispan

camel-influxdb

camel-ipfs

camel-irc

camel-ironmq

camel-jasypt

camel-javaspace

非推奨

camel-jbpm

camel-jcache

camel-jcifs

camel-jclouds

camel-jcr

camel-jdbc

camel-jetty

非推奨

非推奨

非推奨

camel-jetty8

camel-jetty9

camel-jgroups

camel-jing

camel-jira

camel-jms

camel-jmx

camel-jolt

camel-josql

非推奨

非推奨

非推奨

camel-jpa

camel-jsch

camel-json-validator

camel-jt400

camel-juel

非推奨

非推奨

非推奨

camel-kafka

camel-kestrel

非推奨

非推奨

非推奨

camel-krati

非推奨

非推奨

非推奨

camel-kubernetes

camel-kura

camel-ldap

camel-ldif

camel-leveldb

camel-linkedin

camel-log

camel-lpr

camel-lra

camel-lucene

camel-lumberjack

camel-master

camel-mail

camel-metrics

camel-micrometer

camel-milo

camel-mina

非推奨

camel-mina2

camel-mllp

camel-mock

camel-mongodb

camel-mongodb-gridfs

camel-mongodb3

camel-mqtt

非推奨

非推奨

非推奨

非推奨

camel-msv

camel-mustache

camel-mvel

camel-mybatis

camel-nagios

camel-nats

camel-netty

非推奨

非推奨

camel-netty-http

非推奨

非推奨

camel-netty4

camel-netty4-http

camel-nsq

camel-olingo2

camel-olingo4

camel-openapi-java

camel-openshift

非推奨

camel-openstack

camel-opentracing

camel-optaplanner

camel-paho

camel-paxlogging

camel-pdf

camel-pgevent

camel-pop3

camel-printer

camel-properties

camel-pubnub

camel-pulsar

camel-quartz

非推奨

camel-quartz2

camel-quickfix

camel-rabbitmq

camel-reactive-streams

camel-reactor

camel-ref

camel-rest

camel-rest-api

camel-rest-openapi

camel-rest-swagger

camel-restlet

camel-ribbon

camel-rmi

camel-routebox

非推奨

camel-rss

camel-rx

非推奨

非推奨

非推奨

camel-rxjava2

camel-saga

camel-salesforce

camel-sap

camel-sap-netweaver

camel-saxon

camel-scala

非推奨

非推奨

非推奨

camel-scheduler

camel-schematron

camel-scp

camel-scr

非推奨

非推奨

camel-script

非推奨

非推奨

非推奨

非推奨

camel-seda

camel-service

camel-servicenow

camel-servlet

camel-servletlistener

非推奨

非推奨

非推奨

camel-sftp

camel-shiro

camel-sip

camel-sjms

camel-sjms2

camel-slack

camel-smpp

camel-snakeyaml

camel-snmp

camel-solr

camel-spark

camel-spark-rest

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-template

camel-stub

camel-swagger

非推奨

非推奨

camel-swagger-java

camel-tagsoup

camel-telegram

camel-thrift

camel-tika

camel-timer

camel-twilio

camel-twitter

camel-undertow

camel-urlrewrite

非推奨

非推奨

非推奨

camel-validator

camel-velocity

camel-vertx

camel-vm

camel-weather

camel-web3j

camel-websocket

camel-weka

camel-wordpress

camel-xchange

camel-xmlrpc

camel-xmlsecurity

camel-xmpp

camel-xquery

camel-xslt

camel-yammer

camel-yql

camel-zendesk

camel-zipkin

camel-zookeeper

camel-zookeeper-master

表1.2 Apache Camel データ形式のサポートマトリックス
コンポーネントコンテナーレスSpring Boot 2.xKarafJBoss EAP

camel-asn1

camel-avro

camel-barcode

camel-base64

camel-beanio

camel-bindy

camel-boon

camel-castor

非推奨

非推奨

非推奨

camel-crypto

camel-csv

camel-fhir

camel-flatpack

camel-gzip

camel-hessian

非推奨

非推奨

非推奨

非推奨

camel-hl7

camel-ical

camel-jacksonxml

camel-jaxb

camel-jibx

camel-json-fastjson

camel-json-gson

camel-json-jackson

camel-json-johnzon

camel-json-xstream

camel-lzf

camel-mime-multipart

camel-pgp

camel-protobuf

camel-rss

camel-serialization

camel-soapjaxb

camel-string

camel-syslog

camel-tarfile

camel-thrift

camel-univocity-csv

camel-univocity-fixed

camel-univocity-tsv

camel-xmlbeans

非推奨

非推奨

非推奨

camel-xmljson

非推奨

非推奨

非推奨

非推奨

camel-xmlrpc

camel-xstream

camel-yaml-snakeyaml

camel-zip

camel-zipfile

表1.3 Apache Camel 言語サポートマトリックス
言語コンテナーレスSpring Boot 2.xKarafJBoss EAP

Bean メソッド

Constant

EL

非推奨

ExchangeProperty

File

Groovy

Header

JsonPath

JXPath

非推奨

MVEL

OGNL

PHP

非推奨

非推奨

非推奨

Python

非推奨

非推奨

非推奨

Ref

Ruby

非推奨

非推奨

非推奨

Simple

SpEL

Tokenize

XML トークン化

XPath

XQuery

第2章 ActiveMQ

ActiveMQ コンポーネント

ActiveMQ コンポーネントを使用すると、メッセージを JMS キューまたはトピックに送信するか、Apache ActiveMQ を使用して JMS キューまたはトピックからメッセージを消費できます。

このコンポーネントは、178章JMS コンポーネント をベースにしており、Spring の JMS サポートを宣言型トランザクションに、また Spring の JmsTemplate を送信に、MessageListenerContainer を消費に使用します。178章JMS コンポーネント のコンポーネントのオプションはすべて、このコンポーネントに該当します。

このコンポーネントを使用するには、クラスパスに activemq.jar または activemq-core.jar があり、camel-core.jarcamel-spring.jarcamel-jms.jar などの Apache Camel 依存関係があることを確認してください。

トランザクションとキャッシング

JMS でトランザクションを使用している場合は、パフォーマンスに影響を与える可能性があるため、JMS ページの下の トランザクションとキャッシュレベル セクションを参照してください。

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

オプション

これらのオプションはすべてこのオプションに該当するので、178章JMS コンポーネント コンポーネントのオプションを参照してください。

Camel on EAP デプロイメント

このコンポーネントは、Red Hat JBoss Enterprise Application Platform (JBoss EAP) コンテナー上で簡素化されたデプロイメントモデルを提供する Camel on EAP (Wildfly Camel) フレームワークによってサポートされます。

組み込みブローカーまたは外部ブローカーのいずれかで動作するように ActiveMQ Camel コンポーネントを設定できます。JBoss EAP コンテナーにブローカーを埋め込むには、EAP コンテナー設定ファイルで ActiveMQ リソースアダプターを設定します。詳細は、ActiveMQ リソースアダプターの設定 を参照してください。

接続ファクトリーの設定

次の テストケース は、ActiveMQ への接続に使用される brokerURL を指定しながら、activeMQComponent () メソッド を使用して ActiveMQComponent を CamelContext に追加する方法を示しています。

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

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>

接続プーリングの使用

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>
注記

プールされた接続ファクトリーの init メソッドと destroy メソッドに注目してください。これは、接続プールが適切に開始および終了されるようにするために重要です。

PooledConnectionFactory は、同時に使用される最大 8 つの接続を含む接続プールを作成します。各接続は、多くのセッションで共有できます。接続ごとのセッションの最大数を設定するために使用できる maxActive という名前のオプションがあります。デフォルト値は 500 です。ActiveMQ 5.7 以降、このオプションはその目的をさらに反映するように名前が変更され、maxActiveSessionPerConnection という名前になりました。concurrentConsumersmaxConnections よりも高い値に設定されていることに注意してください。各コンシューマーがセッションを使用していて、セッションが同じ接続を共有できるので、これは問題ありません。この例では、同時に 8 * 500 = 4000 のアクティブなセッションを指定できます。

ルートでの MessageListener POJO の呼び出し

ActiveMQ コンポーネントは、JMS MessageListener から Processor へのヘルパー Type Converter も提供します。これは、43章Bean コンポーネント コンポーネントは、任意のルート内で任意の JMS MessageListener Bean を直接呼び出すことができます。

たとえば、次のように JMS で MessageListener を作成できます。

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

次に、以下のようにルートで使用します。

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

つまり、任意の Apache Camel コンポーネントを再利用して、それらを JMS MessageListener POJO に簡単に統合できます。

ActiveMQ 宛先オプションの使用

ActiveMQ 5.6 以降で利用可能

"destination." の接頭辞を使用して、エンドポイント uri で 宛先オプション を設定できます。たとえば、コンシューマーを排他的とマークし、そのプリフェッチサイズを 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>

アドバイザリーメッセージの使用

ActiveMQ は、消費可能なトピックに配置される アドバイザリーメッセージ を生成できます。このようなメッセージは、遅いコンシューマーを検出した場合にアラートを送信したり、統計 (1 日に生成されるメッセージの数など) を作成したりするのに役立ちます。 次の 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 フォルダーの下に次のファイルが表示されます。

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}

コンポーネント JAR の取得

以下の依存関係が必要です。

  • activemq-camel

ActiveMQ は、ActiveMQ プロジェクト でリリースされた 178章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、HTTPS には 443 を使用します。

URI には、?option=value&option=value&…​ の形式でクエリーオプションを追加できます。

3.2. AhcEndpoint オプション

AHC エンドポイントは、URI 構文を使用して設定されます。

ahc:httpUri

パスおよびクエリーパラメーターを使用します。

3.2.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

httpUri

必須 使用する URI (例: http://hostname:port/path)

 

URI

3.2.2. クエリーパラメーター (13 パラメーター)

名前説明デフォルトタイプ

bridgeEndpoint (producer)

オプションが true の場合、Exchange.HTTP_URI ヘッダーは無視され、エンドポイントの URI を要求に使用します。また、throwExceptionOnFailure を false に設定して、AhcProducer がすべての障害応答を送り返すようにすることもできます。

false

boolean

bufferSize (producer)

Camel と AHC クライアントの間でデータを転送するときに使用される初期メモリー内バッファーサイズ。

4096

int

connectionClose (producer)

Connection Close ヘッダーを HTTP 要求に追加する必要があるかどうかを定義します。このパラメーターはデフォルトで false です)。

false

boolean

cookieHandler (producer)

HTTP セッションを維持するようにクッキーハンドラーを設定します。

 

CookieHandler

headerFilterStrategy (producer)

カスタムの HeaderFilterStrategy を使用して、Camel メッセージとの間でヘッダーをフィルタリングします。

 

HeaderFilterStrategy

throwExceptionOnFailure (producer)

リモートサーバーからの応答が失敗した場合に AhcOperationFailedException の出力を無効にするオプション。これにより、HTTP ステータスコードに関係なくすべての応答を取得できます。

true

boolean

transferException (producer)

有効にすると、エクスチェンジがコンシューマー側で処理に失敗し、発生した例外が application/x-java-serialized-object コンテンツタイプとして応答でシリアライズされた場合に、例外がシリアライズされました (例: Jetty または Servlet Camel のコンポーネント)。プロデューサ側では、AhcOperationFailedException の代わりに、例外がデシリアライズされ、そのまま出力されます。原因となった例外はシリアライズする必要があります。これは、デフォルトでオフになっています。これを有効にすると、Java が受信データをリクエストから Java にデシリアライズし、セキュリティー上のリスクが生じる可能性があることに注意してください。

false

boolean

binding (advanced)

AHC と Camel 間のバインド方法を制御できるカスタム AhcBinding を使用します。

 

AhcBinding

clientConfig (advanced)

カスタム com.ning.http.client.AsyncHttpClientConfig インスタンスを使用するように AsyncHttpClient を設定するには。

 

AsyncHttpClientConfig

clientConfigOptions (advanced)

マップのキー/値を使用して AsyncHttpClientConfig を設定します。

 

Map

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

clientConfigRealmOptions (security)

マップのキー/値を使用して AsyncHttpClientConfig レルムを設定します。

 

Map

sslContextParameters (security)

レジストリー内の org.apache.camel.util.jsse.SSLContextParameters への参照。この参照は、設定されている SSLContextParameters をコンポーネントレベルでオーバーライドします。JSSE 設定ユーティリティーの使用を参照してください。このオプションを設定すると、エンドポイントまたはコンポーネントレベルで clientConfig オプションを介して提供される SSL/TLS 設定オプションが上書きされることに注意してください。

 

SSLContextParameters

3.3. Spring Boot Auto-Configuration

このコンポーネントは、以下に示す 9 のオプションをサポートします。

名前説明デフォルトタイプ

camel.component.ahc.allow-java-serialized-object

リクエストが context-type=application/x-java-serialized-object を使用するときに Java シリアライゼーションを許可するかどうか。これはデフォルトでオフになっています。これを有効にすると、Java が受信データをリクエストから Java にデシリアライズし、セキュリティー上のリスクが生じる可能性があることに注意してください。

false

Boolean

camel.component.ahc.binding

AHC と Camel 間のバインド方法を制御できるカスタム AhcBinding を使用します。オプションは org.apache.camel.component.ahc.AhcBinding タイプです。

 

String

camel.component.ahc.client

カスタム AsyncHttpClient を使用するには。オプションは org.asynchttpclient です。AsyncHttpClient タイプ。

 

String

camel.component.ahc.client-config

カスタム com.ning.http.client.AsyncHttpClientConfig インスタンスを使用するように AsyncHttpClient を設定するには。オプションは org.asynchttpclient.AsyncHttpClientConfig タイプです。

 

String

camel.component.ahc.enabled

ahc コンポーネントを有効にします。

true

Boolean

camel.component.ahc.header-filter-strategy

カスタムの org.apache.camel.spi.HeaderFilterStrategy を使用して、Camel メッセージとの間でヘッダーをフィルターします。このオプションは org.apache.camel.spi.HeaderFilterStrategy タイプです。

 

String

camel.component.ahc.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

camel.component.ahc.ssl-context-parameters

レジストリー内の org.apache.camel.util.jsse.SSLContextParameters への参照。このオプションを設定すると、エンドポイントまたはコンポーネントレベルで clientConfig オプションを介して提供される SSL/TLS 設定オプションが上書きされることに注意してください。このオプションは org.apache.camel.util.jsse.SSLContextParameters タイプです。

 

String

camel.component.ahc.use-global-ssl-context-parameters

グローバル SSL コンテキストパラメーターの使用を有効にします。

false

Boolean

3.4. AhcComponent オプション

AHC コンポーネントは、以下に示す 8 つのオプションをサポートしています。

名前説明デフォルトタイプ

client (advanced)

カスタム AsyncHttpClient を使用します。

 

AsyncHttpClient

binding (advanced)

AHC と Camel 間のバインド方法を制御できるカスタム AhcBinding を使用します。

 

AhcBinding

clientConfig (advanced)

カスタム com.ning.http.client.AsyncHttpClientConfig インスタンスを使用するように AsyncHttpClient を設定するには。

 

AsyncHttpClientConfig

sslContextParameters (security)

レジストリー内の org.apache.camel.util.jsse.SSLContextParameters への参照。このオプションを設定すると、エンドポイントまたはコンポーネントレベルで clientConfig オプションを介して提供される SSL/TLS 設定オプションが上書きされることに注意してください。

 

SSLContextParameters

allowJavaSerialized Object (advanced)

リクエストが context-type=application/x-java-serialized-object を使用するときに Java シリアライゼーションを許可するかどうか。これはデフォルトでオフになっています。これを有効にすると、Java が受信データをリクエストから Java にデシリアライズし、セキュリティー上のリスクが生じる可能性があることに注意してください。

false

boolean

useGlobalSslContext Parameters (security)

グローバル SSL コンテキストパラメーターの使用を有効にします。

false

boolean

headerFilterStrategy (filter)

カスタムの org.apache.camel.spi.HeaderFilterStrategy を使用して、Camel メッセージとの間でヘッダーをフィルターします。

 

HeaderFilterStrategy

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

AhcComponent に任意のオプションを設定すると、それらのオプションが作成中の AhcEndpoints に伝播されることに注意してください。ただし、AhcEndpoint はカスタムオプションを設定/オーバーライドすることもできます。エンドポイントに設定されたオプションは、常に AhcComponent のオプションよりも優先されます。

3.5. メッセージヘッダー

名前タイプ説明

Exchange.HTTP_URI

String

呼び出す URI。エンドポイントで直接設定された既存の URI をオーバーライドします。

Exchange.HTTP_PATH

String

リクエスト URI のパス。ヘッダーは、HTTP_URI でリクエスト URI を構築するために使用されます。パスが / で始まる場合には、http プロデューサーは Exchange.HTTP_BASE_URI ヘッダーまたは exchange.getFromEndpoint ().getEndpointUri (); に基づいて相対パスを見つけようとします。

Exchange.HTTP_QUERY

String

Camel 2.11 以降: URI パラメーター。エンドポイントに直接設定された既存の URI パラメーターをオーバーライドします。

Exchange.HTTP_RESPONSE_CODE

int

外部サーバーからの HTTP 応答コード。OK の場合は 200 です。

Exchange.HTTP_CHARACTER_ENCODING

String

文字エンコーディング。

Exchange.CONTENT_TYPE

String

HTTP コンテンツタイプ。text/html などのコンテンツタイプを提供するために、IN メッセージと OUT メッセージの両方に設定されます。

Exchange.CONTENT_ENCODING

String

HTTP コンテンツエンコーディング。gzip などのコンテンツエンコーディングを提供するために、IN メッセージと OUT メッセージの両方に設定されます。

3.6. メッセージボディー

Camel は、外部サーバーからの HTTP レスポンスを OUT ボディに保存します。IN メッセージのすべてのヘッダーが OUT メッセージにコピーされるため、ヘッダーはルーティング中に保持されます。さらに、Camel は HTTP 応答ヘッダーも OUT メッセージヘッダーに追加します。

3.7. レスポンスコード

Camel は HTTP 応答コードに従って処理します。

  • 応答コードは 100..299 の範囲で、Camel はそれを成功応答と見なします。
  • 応答コードは 300..399 の範囲にあり、Camel はこれをリダイレクト応答と見なし、情報とともに AhcOperationFailedException を出力します。
  • 応答コードが 400+ の場合に、Camel はこれを外部サーバーの障害と見なし、情報とともに AhcOperationFailedException を出力します。

    throwExceptionOnFailure

    オプション throwExceptionOnFailurefalse に設定して、失敗した応答コードに対して AhcOperationFailedException が出力されないようにすることができます。これにより、リモートサーバーからの応答を取得できます。

3.8. AhcOperationFailedException

この例外には、次の情報が含まれています。

  • HTTP ステータスコード
  • HTTP ステータス行 (ステータスコードのテキスト)
  • サーバーがリダイレクトを返した場合は、ロケーションをリダイレクトします
  • サーバーがレスポンスとして本文を提供した場合、java.lang.String としてのレスポンス本文

3.9. GET または POST を使用した呼び出し

次のアルゴリズムを使用して、GET または POST HTTP メソッドを使用するかどうかを決定します。
1.ヘッダーで指定するメソッドを使用します。
2.ヘッダーにクエリー文字列が指定されている場合は GET
3.エンドポイントがクエリー文字列で設定されている場合は GET
4.送信するデータがある場合は POST (本文が null ではない)。
5.それ以外の場合は GET

3.10. 呼び出す 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.11. 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.12. 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.13. 文字セットの設定

POST を使用してデータを送信している場合は、Exchange プロパティーを使用して charset を設定できます。

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

3.13.1. エンドポイント URI からの URI パラメーター

このサンプルには、Web ブラウザーに入力したものとまったく同じ完全な URI エンドポイントがあります。もちろん、Web ブラウザーと同じように & 文字を区切り文字として使用して、複数の URI パラメーターを設定できます。Camel はここでトリックを行いません。

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

3.13.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);

上記のヘッダー値では、? を接頭辞として付けるべきでは ない ことに注意してください。& 文字を使用して、通常どおりパラメーターを区切ることができます。

3.13.3. 応答コードの取得

Exchange.HTTP_RESPONSE_CODE を使用して Out メッセージヘッダーから値を取得して、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.14. AsyncHttpClient の設定

AsyncHttpClient クライアントは、AsyncHttpClientConfig を使用してクライアントを設定します。
のドキュメントを参照してください。詳細は 非同期 HTTP クライアント を参照してください。

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 を使用します。今回の新しいバージョンでは、プレーン Bean スタイルの設定のサポートが追加されています。AsyncHttpClientConfigBean クラスは、AsyncHttpClientConfig で使用可能な設定オプションの getter と setter を提供します。AsyncHttpClientConfigBean のインスタンスは、AHC コンポーネントに直接渡すか、clientConfig URI パラメーターを使用してエンドポイント URI で参照できます。

また、Camel 2.9 では、設定オプションを URI で直接設定する機能も利用できます。clientConfig で始まる URI パラメーター。AsyncHttpClientConfig のさまざまな設定可能なプロパティーを設定するために使用できます。エンドポイント URI で指定されたプロパティーは、clientConfig URI パラメーターで参照される設定で指定されたプロパティーとマージされますが、"clientConfig." パラメーターを使用して設定されたプロパティーが優先されます。参照される AsyncHttpClientConfig インスタンスは、エンドポイントごとに常にコピーされるため、1 つのエンドポイントの設定は、以前に作成されたエンドポイントの設定とは無関係のままになります。次の例は、"clientConfig." タイプの URI を使用して AHC コンポーネントを設定する方法を示しています。URI パラメーターを入力します。

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

3.15. SSL サポート (HTTPS)

JSSE 設定ユーティリティーの使用

Camel 2.9 の時点で、AHC コンポーネントは Camel JSSE Configuration Utility を介した 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.16. 関連項目

  • Configuring Camel (Camel の設定)
  • コンポーネント
  • エンドポイント
  • スタートガイド
  • Jetty
  • HTTP
  • HTTP4

第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-wss には 443 を使用します。

4.2. AHC-WS オプション

AHC-WS コンポーネントは AHC コンポーネントに基づいているため、AHC コンポーネントのさまざまな設定オプションを使用できます。

AHC Websocket コンポーネントは、以下に示す 8 つのオプションをサポートしています。

名前説明デフォルトタイプ

client (advanced)

カスタム AsyncHttpClient を使用します。

 

AsyncHttpClient

binding (advanced)

AHC と Camel 間のバインド方法を制御できるカスタム AhcBinding を使用します。

 

AhcBinding

clientConfig (advanced)

カスタム com.ning.http.client.AsyncHttpClientConfig インスタンスを使用するように AsyncHttpClient を設定するには。

 

AsyncHttpClientConfig

sslContextParameters (security)

レジストリー内の org.apache.camel.util.jsse.SSLContextParameters への参照。このオプションを設定すると、エンドポイントまたはコンポーネントレベルで clientConfig オプションを介して提供される SSL/TLS 設定オプションが上書きされることに注意してください。

 

SSLContextParameters

allowJavaSerialized Object (advanced)

リクエストが context-type=application/x-java-serialized-object を使用するときに Java シリアライゼーションを許可するかどうか。これはデフォルトでオフになっています。これを有効にすると、Java が受信データをリクエストから Java にデシリアライズし、セキュリティー上のリスクが生じる可能性があることに注意してください。

false

boolean

useGlobalSslContext Parameters (security)

グローバル SSL コンテキストパラメーターの使用を有効にします。

false

boolean

headerFilterStrategy (filter)

カスタムの org.apache.camel.spi.HeaderFilterStrategy を使用して、Camel メッセージとの間でヘッダーをフィルターします。

 

HeaderFilterStrategy

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

AHC Websocket エンドポイントは、URI 構文を使用して設定されます。

ahc-ws:httpUri

パスおよびクエリーパラメーターを使用します。

4.2.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

httpUri

必須 使用する URI (例: http://hostname:port/path)

 

URI

4.2.2. クエリーパラメーター (18 パラメーター)

名前説明デフォルトタイプ

bridgeEndpoint (common)

オプションが true の場合、Exchange.HTTP_URI ヘッダーは無視され、エンドポイントの URI を要求に使用します。また、throwExceptionOnFailure を false に設定して、AhcProducer がすべての障害応答を送り返すようにすることもできます。

false

boolean

bufferSize (common)

Camel と AHC クライアントの間でデータを転送するときに使用される初期メモリー内バッファーサイズ。

4096

int

headerFilterStrategy (common)

カスタムの HeaderFilterStrategy を使用して、Camel メッセージとの間でヘッダーをフィルタリングします。

 

HeaderFilterStrategy

throwExceptionOnFailure (common)

リモートサーバーからの応答が失敗した場合に AhcOperationFailedException の出力を無効にするオプション。これにより、HTTP ステータスコードに関係なくすべての応答を取得できます。

true

boolean

transferException (common)

有効にすると、エクスチェンジがコンシューマー側で処理に失敗し、発生した例外が application/x-java-serialized-object コンテンツタイプとして応答でシリアライズされた場合に、例外がシリアライズされました (例: Jetty または Servlet Camel のコンポーネント)。プロデューサ側では、AhcOperationFailedException の代わりに、例外がデシリアライズされ、そのまま出力されます。原因となった例外はシリアライズする必要があります。これは、デフォルトでオフになっています。これを有効にすると、Java が受信データをリクエストから Java にデシリアライズし、セキュリティー上のリスクが生じる可能性があることに注意してください。

false

boolean

bridgeErrorHandler (consumer)

コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

false

boolean

sendMessageOnError (consumer)

Web ソケットリスナーがエラーを受信した場合にメッセージを送信するかどうか。

false

boolean

exceptionHandler (consumer)

コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

 

ExceptionHandler

exchangePattern (consumer)

コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。

 

ExchangePattern

connectionClose (producer)

Connection Close ヘッダーを HTTP 要求に追加する必要があるかどうかを定義します。このパラメーターはデフォルトで false です)。

false

boolean

cookieHandler (producer)

HTTP セッションを維持するようにクッキーハンドラーを設定します。

 

CookieHandler

useStreaming (producer)

ストリーミングを有効にして、データを複数のテキストフラグメントとして送信します。

false

boolean

binding (advanced)

AHC と Camel 間のバインド方法を制御できるカスタム AhcBinding を使用します。

 

AhcBinding

clientConfig (advanced)

カスタム com.ning.http.client.AsyncHttpClientConfig インスタンスを使用するように AsyncHttpClient を設定するには。

 

AsyncHttpClientConfig

clientConfigOptions (advanced)

マップのキー/値を使用して AsyncHttpClientConfig を設定します。

 

Map

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

clientConfigRealmOptions (security)

マップのキー/値を使用して AsyncHttpClientConfig レルムを設定します。

 

Map

sslContextParameters (security)

レジストリー内の org.apache.camel.util.jsse.SSLContextParameters への参照。この参照は、設定されている SSLContextParameters をコンポーネントレベルでオーバーライドします。JSSE 設定ユーティリティーの使用を参照してください。このオプションを設定すると、エンドポイントまたはコンポーネントレベルで clientConfig オプションを介して提供される SSL/TLS 設定オプションが上書きされることに注意してください。

 

SSLContextParameters

4.3. Spring Boot Auto-Configuration

このコンポーネントは、以下に示す 9 のオプションをサポートします。

名前説明デフォルトタイプ

camel.component.ahc-ws.allow-java-serialized-object

リクエストが context-type=application/x-java-serialized-object を使用するときに Java シリアライゼーションを許可するかどうか。これはデフォルトでオフになっています。これを有効にすると、Java が受信データをリクエストから Java にデシリアライズし、セキュリティー上のリスクが生じる可能性があることに注意してください。

false

Boolean

camel.component.ahc-ws.binding

AHC と Camel 間のバインド方法を制御できるカスタム AhcBinding を使用します。オプションは org.apache.camel.component.ahc.AhcBinding タイプです。

 

String

camel.component.ahc-ws.client

カスタム AsyncHttpClient を使用するには。オプションは org.asynchttpclient です。AsyncHttpClient タイプ。

 

String

camel.component.ahc-ws.client-config

カスタム com.ning.http.client.AsyncHttpClientConfig インスタンスを使用するように AsyncHttpClient を設定するには。オプションは org.asynchttpclient.AsyncHttpClientConfig タイプです。

 

String

camel.component.ahc-ws.enabled

ahc-ws コンポーネントを有効にします。

true

Boolean

camel.component.ahc-ws.header-filter-strategy

カスタムの org.apache.camel.spi.HeaderFilterStrategy を使用して、Camel メッセージとの間でヘッダーをフィルターします。このオプションは org.apache.camel.spi.HeaderFilterStrategy タイプです。

 

String

camel.component.ahc-ws.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

camel.component.ahc-ws.ssl-context-parameters

レジストリー内の org.apache.camel.util.jsse.SSLContextParameters への参照。このオプションを設定すると、エンドポイントまたはコンポーネントレベルで clientConfig オプションを介して提供される SSL/TLS 設定オプションが上書きされることに注意してください。このオプションは org.apache.camel.util.jsse.SSLContextParameters タイプです。

 

String

camel.component.ahc-ws.use-global-ssl-context-parameters

グローバル SSL コンテキストパラメーターの使用を有効にします。

false

Boolean

4.4. Websocket を介したデータの書き込みと読み取り

ahc-ws エンドポイントは、エンドポイントがそれぞれプロデューサーまたはコンシューマーとして設定されているかどうかに応じて、ソケットにデータを書き込むか、ソケットから読み取ることができます。

4.5. データの書き込みまたは読み取りのための 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.6. 関連項目

  • Configuring Camel (Camel の設定)
  • コンポーネント
  • エンドポイント
  • スタートガイド
  • AHC
  • Atmosphere-Websocket

第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 コンポーネントは、以下に示す 81 のオプションをサポートしています。

名前説明デフォルトタイプ

configuration (advanced)

共有 JMS 設定を使用します。

 

JmsConfiguration

acceptMessagesWhile Stopping (consumer)

コンシューマーが停止中にメッセージを受け入れるかどうかを指定します。実行時に JMS ルートを開始および停止するが、キューにメッセージが入れられている場合は、このオプションを有効にすることを検討してください。このオプションが false の場合は、JMS ルートを停止すると、メッセージが拒否される可能性があり、JMS ブローカは再配信を試行する必要がありますが、これも拒否される可能性があり、最終的にメッセージはJMS ブローカー上のデッドレターキューに移動される可能性があります。これを回避するには、このオプションを有効にすることをお勧めします。

false

boolean

allowReplyManagerQuick Stop (consumer)

JmsConfiguration#isAcceptMessagesWhileStopping が有効で、org.apache.camel.CamelContext が現在停止している場合に、要求/応答メッセージングのリプライマネージャーで使用される DefaultMessageListenerContainer が、DefaultMessageListenerContainer.runningAllowed フラグを迅速に停止できるようにするかどうか。このクイック停止機能は、通常の JMS コンシューマーではデフォルトで有効になっていますが、応答マネージャーを有効にするには、このフラグを有効にする必要があります。

false

boolean

acknowledgementMode (consumer)

整数として定義された JMS 確認応答モード。確認モードにベンダー固有の拡張を設定できます。通常のモードでは、代わりに acknowledgementModeName を使用することをお勧めします。

 

int

eagerLoadingOf Properties (consumer)

メッセージが読み込まれるとすぐに JMS プロパティーの先行読み込みを有効にします。これは、JMS プロパティーが必要ない場合があるため一般的に非効率的ですが、基盤となる JMS プロバイダーと JMS プロパティーの使用に関する問題を早期に発見できる場合があります。

false

boolean

acknowledgementModeName (consumer)

JMS 確認応答名。SESSION_TRANSACTED、CLIENT_ACKNOWLEDGE、AUTO_ACKNOWLEDGE、DUPS_OK_ACKNOWLEDGE のいずれかです。

AUTO_ ACKNOWLEDGE

String

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

String

replyToCacheLevelName (producer)

JMS を介して要求/応答を行うときに、応答コンシューマーのキャッシュレベルを名前で設定します。このオプションは、固定応答キュー (一時的ではない) を使用する場合にのみ適用されます。Camel はデフォルトで次を使用します: 排他的または replyToSelectorName と共有の CACHE_CONSUMER。そして、replyToSelectorName なしで共有するための CACHE_SESSION。IBM WebSphere などの一部の JMS ブローカーは、replyToCacheLevelName=CACHE_NONE を機能させるために設定する必要がある場合があります。注: 一時キューを使用する場合、CACHE_NONE は許可されず、CACHE_CONSUMER や CACHE_SESSION などのより高い値を使用する必要があります。

 

String

clientId (common)

使用する JMS クライアント ID を設定します。この値を指定する場合は、一意である必要があり、単一の JMS 接続インスタンスでのみ使用できることに注意してください。通常、永続的なトピックサブスクリプションの場合にのみ必要です。Apache ActiveMQ を使用している場合は、代わりに仮想トピックを使用することをお勧めします。

 

String

concurrentConsumers (consumer)

JMS から消費する場合の同時コンシューマーのデフォルト数を指定します (JMS を介した要求/応答ではありません)。スレッドの動的なスケールアップ/ダウンを制御するには、maxMessagesPerTask オプションも参照してください。JMS を介して要求/応答を行う場合は、オプション replyToConcurrentConsumers を使用して、応答メッセージリスナーの同時コンシューマーの数を制御します。

1

int

replyToConcurrent Consumers (producer)

JMS を介して要求/応答を行うときの同時コンシューマーのデフォルト数を指定します。スレッドの動的なスケールアップ/ダウンを制御するには、maxMessagesPerTask オプションも参照してください。

1

int

connectionFactory (common)

使用する接続ファクトリー。コンポーネントまたはエンドポイントで接続ファクトリーを設定する必要があります。

 

ConnectionFactory

username (security)

ConnectionFactory で使用するユーザー名。また、ConnectionFactory でユーザー名およびパスワードを直接設定することもできます。

 

String

password (security)

ConnectionFactory で使用するパスワード。また、ConnectionFactory でユーザー名およびパスワードを直接設定することもできます。

 

String

deliveryPersistent (producer)

デフォルトで永続配信を使用するかどうかを指定します。

true

boolean

deliveryMode (producer)

使用する配信モードを指定します。可能な値は、javax.jms.DeliveryMode によって定義された値です。NON_PERSISTENT = 1 および PERSISTENT = 2。

 

Integer

durableSubscriptionName (common)

永続トピックサブスクリプションを指定するための永続サブスクライバー名。clientId オプションも設定する必要があります。

 

String

exceptionListener (advanced)

基礎となる JMS 例外の通知を受ける JMS 例外リスナーを指定します。

 

ExceptionListener

errorHandler (advanced)

Message の処理中にキャッチされない例外が出力された場合に呼び出される org.springframework.util.ErrorHandler を指定します。デフォルトでは、errorHandler が設定されていない場合、これらの例外は WARN レベルでログに記録されます。errorHandlerLoggingLevel および errorHandlerLogStackTrace オプションを使用して、ログレベルとスタックトレースをログに記録するかどうかを設定できます。これにより、カスタム errorHandler をコーディングするよりも設定がはるかに簡単になります。

 

ErrorHandler

errorHandlerLogging Level (ロギング)

キャッチされていない例外をログに記録するためのデフォルトの errorHandler ログレベルを設定できます。

WARN

LoggingLevel

errorHandlerLogStack Trace (ロギング)

デフォルトの errorHandler でスタックトレースをログに記録するかどうかを制御できます。

true

boolean

explicitQosEnabled (producer)

メッセージの送信時に、deliveryMode、priority、または timeToLive のサービス品質を使用する必要があるかどうかを設定します。このオプションは、Spring の JmsTemplate に基づいています。deliveryMode、priority、および timeToLive オプションは、現在のエンドポイントに適用されます。これは、メッセージの粒度で動作し、Camel In メッセージヘッダーから排他的に QoS プロパティーを読み取る preserveMessageQos オプションとは対照的です。

false

boolean

exposeListenerSession (consumer)

メッセージを消費するときにリスナーセッションを公開するかどうかを指定します。

false

boolean

idleTaskExecutionLimit (advanced)

実行中にメッセージを受信していない、受信タスクのアイドル実行の制限を指定します。この制限に達すると、タスクはシャットダウンし、他の実行中のタスクに受信を任せます (動的スケジューリングの場合。maxConcurrentConsumers 設定を参照してください)。Spring から入手できる追加のドキュメントがあります。

1

int

idleConsumerLimit (advanced)

常にアイドル状態にできるコンシューマーの数の制限を指定します。

1

int

maxConcurrentConsumers (consumer)

JMS から消費する場合の同時コンシューマーの最大数を指定します (JMS を介した要求/応答ではありません)。スレッドの動的なスケールアップ/ダウンを制御するには、maxMessagesPerTask オプションも参照してください。JMS を介して要求/応答を行う場合は、オプション replyToMaxConcurrentConsumers を使用して、応答メッセージリスナーの同時コンシューマーの数を制御します。

 

int

replyToMaxConcurrent Consumers (producer)

JMS を介した要求/応答を使用する場合の同時コンシューマーの最大数を指定します。スレッドの動的なスケールアップ/ダウンを制御するには、maxMessagesPerTask オプションも参照してください。

 

int

replyOnTimeoutToMax ConcurrentConsumers (producer)

JMS 経由の要求/応答を使用するときにタイムアウトが発生したときに、ルーティングを継続するための同時コンシューマーの最大数を指定します。

1

int

maxMessagesPerTask (advanced)

タスクあたりのメッセージ数。-1 は無制限です。同時コンシューマーの範囲 (例: min 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 プロバイダーがこのヒントを受け入れる場合には、これらのメッセージのタイムスタンプはゼロに設定する必要があります。プロバイダーがヒントを無視する場合には、タイムスタンプを通常の値に設定する必要があります

true

boolean

alwaysCopyMessage (producer)

true の場合、メッセージがプロデューサーに渡されて送信されると、Camel は常にメッセージの JMS メッセージコピーを作成します。replyToDestinationSelectorName が設定されている場合など、状況によってはメッセージのコピーが必要です (また、replyToDestinationSelectorName が設定されている場合、Camel は alwaysCopyMessage オプションを true に設定します)。

false

boolean

useMessageIDAs CorrelationID (advanced)

InOut メッセージの JMSCorrelationID として JMSMessageID を常に使用するかどうかを指定します。

false

boolean

priority (producer)

1 より大きい値は、送信時のメッセージの優先度を指定します (0 が最低の優先度で、9 が最高の優先度です)。このオプションを有効にするには、explicitQosEnabled オプションも有効にする必要があります。

4

int

pubSubNoLocal (advanced)

独自の接続によってパブリッシュされたメッセージの配信を禁止するかどうかを指定します。

false

boolean

receiveTimeout (advanced)

メッセージ受信のタイムアウト (ミリ秒単位)。

1000

long

recoveryInterval (advanced)

リカバリーの試行の間隔を指定します。つまり、接続が更新されるタイミング(ミリ秒単位)を指定します。デフォルトは 5000 ミリ秒、つまり 5 秒です。

5000

long

taskExecutor (consumer)

メッセージを消費するためのカスタムタスクエグゼキュータを指定できます。

 

TaskExecutor

deliveryDelay (producer)

JMS の送信呼び出しに使用する配信遅延を設定します。このオプションには、JMS 2.0 準拠のブローカーが必要です。

-1

long

timeToLive (producer)

メッセージの送信時に、メッセージの有効期限をミリ秒単位で指定します。

-1

long

取引済み (取引)

トランザクションモードを使用するかどうかを指定します

false

boolean

lazyCreateTransaction Manager (トランザクション)

true の場合、オプション transacted=true のときに transactionManager が挿入されていない場合、Camel は JmsTransactionManager を作成します。

true

boolean

transactionManager (トランザクション)

使用する Spring トランザクションマネージャー。

 

PlatformTransaction Manager

transactionName (トランザクション)

使用するトランザクションの名前。

 

String

transactionTimeout (トランザクション)

トランザクションモードを使用している場合の、トランザクションのタイムアウト値 (秒単位)。

-1

int

testConnectionOn Startup (common)

起動時に接続をテストするかどうかを指定します。これにより、Camel の起動時に、すべての JMS コンシューマーが JMS ブローカーへの有効な接続を持つことが保証されます。接続を許可できない場合、Camel は起動時に例外を出力します。これにより、接続に失敗した状態で 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 を使用すると、ルート中にヘッダーに触れると (get または set)、Camel は新しい JMS メッセージを作成して新しい JMS 宛先に送信します。Camel が受信した元の JMS メッセージを強制的に送信するには、このオプションを true に設定します。

false

boolean

requestTimeout (producer)

InOut Exchange パターン使用時の応答待ちタイムアウト (ミリ秒単位)。デフォルトは 20 秒です。ヘッダー CamelJmsRequestTimeout を含めて、このエンドポイントで設定されたタイムアウト値をオーバーライドし、メッセージごとに個別のタイムアウト値を持つことができます。requestTimeoutCheckerInterval オプションも参照してください。

20000

long

requestTimeoutChecker Interval (advanced)

JMS を介してリクエスト/リプライを行うときに、Camel がタイムアウトになった Exchange をチェックする頻度を設定します。デフォルトでは、Camel は 1 秒に 1 回確認します。ただし、タイムアウトが発生したときに迅速に対応する必要がある場合は、この間隔を短くして、より頻繁にチェックすることができます。タイムアウトは、オプション requestTimeout によって決定されます。

1000

long

transferExchange (advanced)

本文とヘッダーだけでなく、電信送金で交換を転送できます。次のフィールドが転送されます: In body、Out body、Fault body、In ヘッダー、Out ヘッダー、Fault ヘッダー、交換プロパティー、交換例外。これには、オブジェクトがシリアライズ可能である必要があります。Camel はシリアル化できないオブジェクトを除外し、WARN レベルでログに記録します。プロデューサ側とコンシューマー側の両方でこのオプションを有効にする必要があるため、Camel はペイロードが Exchange であり、通常のペイロードではないことを認識します。

false

boolean

transferException (advanced)

有効で、Request Reply メッセージング (InOut) を使用していて、Exchange がコンシューマー側で失敗した場合、原因となった例外が javax.jms.ObjectMessage として応答で返されます。クライアントが Camel の場合、返された Exception は再出力されます。これにより、Camel JMS をルーティングのブリッジとして使用できます。たとえば、永続的なキューを使用して堅牢なルーティングを有効にできます。transferExchange も有効にしている場合は、このオプションが優先されることに注意してください。キャッチされた例外はシリアライズ可能である必要があります。コンシューマー側の元の Exception は、プロデューサーに返されるときに org.apache.camel.RuntimeCamelException などの外部例外にラップできます。

false

boolean

transferFault (advanced)

これを有効にし、Request Reply メッセージング (InOut) を使用していて、Exchange がコンシューマー側で SOAP エラー (例外ではない) で失敗した場合には、Message#isFault() のエラーフラグが応答で、org.apache.camel.component.jms.JmsConstants#JMS_TRANSFER_FAULT#JMS_TRANSFER_FAULT のキーを含んだ JMS ヘッダーとして送り返されます。クライアントが Camel の場合には、返される障害フラグは org.apache.camel.Message#setFault (boolean) に設定されます。cxf や spring-ws などの SOAP ベースなどの障害をサポートする Camel コンポーネントを使用する場合、これを有効できます。

false

boolean

jmsOperations (advanced)

org.springframework.jms.core.JmsOperations インターフェイスの独自の実装を使用できるようにします。Camel はデフォルトで JmsTemplate を使用します。テスト目的で使用できますが、Spring API ドキュメントに記載されているほどは使用されません。

 

JmsOperations

destinationResolver (advanced)

独自のリゾルバーを使用できるようにするプラグ可能な org.springframework.jms.support.destination.DestinationResolver (たとえば、JNDI レジストリーで実際の宛先を検索するため)。

 

DestinationResolver

replyToType (producer)

JMS を介して要求/応答を行うときに、replyTo キューに使用する戦略の種類を明示的に指定できます。可能な値は、Temporary、Shared、または Exclusive です。デフォルトでは、Camel は一時キューを使用します。ただし、replyTo が設定されている場合は、デフォルトで Shared が使用されます。このオプションを使用すると、共有キューの代わりに専用キューを使用できます。詳細については、Camel JMS のドキュメントを参照してください。特に、クラスター化された環境で実行する場合の影響に関する注意事項と、共有応答キューは代替の一時および排他的キューよりもパフォーマンスが低いという事実を参照してください。

 

ReplyToType

preserveMessageQos (producer)

JMS エンドポイントの QoS 設定ではなく、メッセージで指定された QoS 設定を使用してメッセージを送信する場合は、true に設定します。次の 3 つのヘッダーは、JMSPriority、JMSDeliveryMode、および JMSExpiration と見なされます。それらのすべてまたは一部のみを指定できます。指定されていない場合、Camel は代わりにエンドポイントからの値を使用するようにフォールバックします。したがって、このオプションを使用すると、ヘッダーはエンドポイントからの値をオーバーライドします。対照的に、explicitQosEnabled オプションは、エンドポイントに設定されたオプションのみを使用し、メッセージヘッダーの値は使用しません。

false

boolean

asyncConsumer (consumer)

JmsConsumer が Exchange を非同期的に処理するかどうか。有効にすると、JmsConsumer は JMS キューから次のメッセージを取得できますが、前のメッセージは (非同期ルーティングエンジンによって) 非同期に処理されます。これは、メッセージが 100% 厳密に順序どおりに処理されない可能性があることを意味します。無効になっている場合 (デフォルト)、JmsConsumer が JMS キューから次のメッセージを取得する前に Exchange が完全に処理されます。transactioned が有効になっている場合、トランザクションは同期的に実行する必要があるため、asyncConsumer=true は非同期的に実行されないことに注意してください (Camel 3.0 は非同期トランザクションをサポートする場合があります)。

false

boolean

allowNullBody (producer)

ボディーのないメッセージの送信を許可するかどうか。このオプションが false でメッセージボディーが null の場合は、JMSException が出力されます。

true

boolean

includeSentJMS MessageID (producer)

InOnly を使用して JMS 宛先に送信する場合にのみ適用されます (例: ファイアアンドフォーゲット)。このオプションを有効にすると、メッセージが JMS 宛先に送信されたときに JMS クライアントによって使用された実際の JMSMessageID で Camel Exchange が強化されます。

false

boolean

includeAllJMSX Properties (advanced)

JMS から Camel Message へのマッピング時に JMSXxxx プロパティーをすべて含めるかどうか。これを true に設定すると、JMSXAppID や JMSXUserID などのプロパティーが含まれます。注記: カスタムの headerFilterStrategy を使用している場合、このオプションは適用されません。

false

boolean

defaultTaskExecutor Type (consumer)

コンシューマーエンドポイントとプロデューサエンドポイントの ReplyTo コンシューマーの両方に対して、DefaultMessageListenerContainer で使用するデフォルトの TaskExecutor タイプを指定します。可能な値: SimpleAsync (Spring の SimpleAsyncTaskExecutor を使用) または ThreadPool (Spring の ThreadPoolTaskExecutor を最適な値で使用 - キャッシュされたスレッドプールのようなもの)。設定されていない場合は、デフォルトで以前の動作になり、コンシューマーエンドポイントにはキャッシュされたスレッドプールが使用され、応答コンシューマーには SimpleAsync が使用されます。ThreadPool の使用は、同時コンシューマーが動的に増減するエラスティック設定でスレッドのゴミを減らすために推奨されます。

 

DefaultTaskExecutor Type

jmsKeyFormatStrategy (advanced)

JMS 仕様に準拠できるように、JMS キーをエンコードおよびデコードするためのプラグ可能な戦略。Camel は、追加設定なしで、default と passthrough の 2 つの実装を提供します。デフォルトのストラテジーでは、ドットとハイフン(. および -)を安全にマーシャリングします。パススルー戦略では、キーはそのまま残ります。JMS ヘッダーキーに不正な文字が含まれているかどうかは問題にならない JMS ブローカーに使用できます。org.apache.camel.component.jms.JmsKeyFormatStrategy の独自の実装を提供し、# 表記を使用して参照できます。

 

JmsKeyFormatStrategy

allowAdditionalHeaders (producer)

このオプションは、JMS 仕様に従って無効な値を持つ可能性がある追加のヘッダーを許可するために使用されます。たとえば、WMQ などの一部のメッセージシステムは、バイト配列またはその他の無効な型の値を含む接頭辞 JMS_IBM_MQMD_ を使用するヘッダー名でこれを行います。コンマで区切られた複数のヘッダー名を指定し、ワイルドカードマッチングの接尾辞として使用できます。

 

String

queueBrowseStrategy (advanced)

キューを参照するときにカスタム QueueBrowseStrategy を使用します。

 

QueueBrowseStrategy

messageCreatedStrategy (advanced)

Camel が JMS メッセージを送信しているときに、Camel が javax.jms.Message オブジェクトの新しいインスタンスを作成するときに呼び出される、指定された MessageCreatedStrategy を使用します。

 

MessageCreatedStrategy

waitForProvision CorrelationToBeUpdated Counter (advanced)

JMS を介して要求/応答を行う場合、およびオプション useMessageIDAsCorrelationID が有効な場合に、暫定相関 ID が実際の相関 ID に更新されるのを待機する回数。

50

int

waitForProvision CorrelationToBeUpdated ThreadSleepingTime (advanced)

暫定相関 ID が更新されるのを待機するたびにスリープする間隔 (ミリ単位)。

100

long

correlationProperty (producer)

JMSCorrelationID プロパティーの代わりに、この JMS プロパティーを使用して、InOut 交換パターン (要求 - 応答) でメッセージを関連付けます。これにより、JMSCorrelationID JMS プロパティーを使用してメッセージと相関性のないシステムとメッセージを交換できます。JMSCorrelationID を使用すると、Camel によって使用または設定されません。ここで指定されたプロパティーの値は、同じ名前でメッセージのヘッダーに指定されていない場合に生成されます。

 

String

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 つの同時コンシューマー (このメッセージリスナコンテナーのデフォルト) のみが許可されます。

 

String

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 タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

AMQP エンドポイントは、URI 構文を使用して設定されます。

amqp:destinationType:destinationName

パスおよびクエリーパラメーターを使用します。

5.2.1. パスパラメーター (2 個のパラメーター):

名前説明デフォルトタイプ

destinationType

使用する宛先の種類

queue

String

destinationName

必須 宛先として使用するキューまたはトピックの名前

 

String

5.2.2. クエリーパラメーター (92 パラメーター)

名前説明デフォルトタイプ

clientId (common)

使用する JMS クライアント ID を設定します。この値を指定する場合は、一意である必要があり、単一の JMS 接続インスタンスでのみ使用できることに注意してください。通常、永続的なトピックサブスクリプションの場合にのみ必要です。Apache ActiveMQ を使用している場合は、代わりに仮想トピックを使用することをお勧めします。

 

String

connectionFactory (common)

使用する接続ファクトリー。コンポーネントまたはエンドポイントで接続ファクトリーを設定する必要があります。

 

ConnectionFactory

disableReplyTo (common)

Camel がメッセージの JMSReplyTo ヘッダーを無視するかどうかを指定します。true の場合、Camel は JMSReplyTo ヘッダーで指定された宛先に返信を送り返しません。Camel にルートから消費させたいが、コード内の別のコンポーネントが応答メッセージを処理するため、Camel に自動的に応答メッセージを送り返したくない場合は、このオプションを使用できます。Camel を異なるメッセージブローカー間のプロキシーとして使用し、あるシステムから別のシステムにメッセージをルーティングする場合にも、このオプションを使用できます。

false

boolean

durableSubscriptionName (common)

永続トピックサブスクリプションを指定するための永続サブスクライバー名。clientId オプションも設定する必要があります。

 

String

jmsMessageType (common)

JMS メッセージの送信に特定の javax.jms.Message 実装を強制的に使用できるようにします。可能な値は、Bytes、Map、Object、Stream、Text です。デフォルトでは、Camel は In body タイプから使用する JMS メッセージタイプを決定します。このオプションで指定できます。

 

JmsMessageType

testConnectionOnStartup (common)

起動時に接続をテストするかどうかを指定します。これにより、Camel の起動時に、すべての JMS コンシューマーが JMS ブローカーへの有効な接続を持つことが保証されます。接続を許可できない場合、Camel は起動時に例外を出力します。これにより、接続に失敗した状態で Camel が開始されなくなります。JMS プロデューサーもテストされています。

false

boolean

acknowledgementModeName (consumer)

JMS 確認応答名。SESSION_TRANSACTED、CLIENT_ACKNOWLEDGE、AUTO_ACKNOWLEDGE、DUPS_OK_ACKNOWLEDGE のいずれかです。

AUTO_ ACKNOWLEDGE

String

asyncConsumer (consumer)

JmsConsumer が Exchange を非同期的に処理するかどうか。有効にすると、JmsConsumer は JMS キューから次のメッセージを取得できますが、前のメッセージは (非同期ルーティングエンジンによって) 非同期に処理されます。これは、メッセージが 100% 厳密に順序どおりに処理されない可能性があることを意味します。無効になっている場合 (デフォルト)、JmsConsumer が JMS キューから次のメッセージを取得する前に Exchange が完全に処理されます。transactioned が有効になっている場合、トランザクションは同期的に実行する必要があるため、asyncConsumer=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

String

concurrentConsumers (consumer)

JMS から消費する場合の同時コンシューマーのデフォルト数を指定します (JMS を介した要求/応答ではありません)。スレッドの動的なスケールアップ/ダウンを制御するには、maxMessagesPerTask オプションも参照してください。JMS を介して要求/応答を行う場合は、オプション replyToConcurrentConsumers を使用して、応答メッセージリスナーの同時コンシューマーの数を制御します。

1

int

maxConcurrentConsumers (consumer)

JMS から消費する場合の同時コンシューマーの最大数を指定します (JMS を介した要求/応答ではありません)。スレッドの動的なスケールアップ/ダウンを制御するには、maxMessagesPerTask オプションも参照してください。JMS を介して要求/応答を行う場合は、オプション replyToMaxConcurrentConsumers を使用して、応答メッセージリスナーの同時コンシューマーの数を制御します。

 

int

replyTo (consumer)

Message.getJMSReplyTo() の着信値をオーバーライドする明示的な ReplyTo 宛先を提供します。

 

String

replyToDeliveryPersistent (consumer)

返信に対してデフォルトで永続的な配信を使用するかどうかを指定します。

true

boolean

selector (consumer)

使用する JMS セレクターを設定します。

 

String

subscriptionDurable (consumer)

サブスクリプションを永続化するかどうかを設定します。使用する永続サブスクリプション名は、subscriptionName プロパティーで指定できます。デフォルトは false です。通常、subscriptionName 値と組み合わせて永続的なサブスクリプションを登録するには、これを true に設定します (メッセージリスナークラス名がサブスクリプション名として十分でない場合)。トピック (pub-sub ドメイン) をリッスンする場合にのみ意味があるため、このメソッドは pubSubDomain フラグも切り替えます。

false

boolean

subscriptionName (consumer)

作成するサブスクリプションの名前を設定します。共有または永続的なサブスクリプションを持つトピック (pub-sub ドメイン) の場合に適用されます。サブスクリプション名は、このクライアントの JMS クライアント ID 内で一意である必要があります。デフォルトは、指定されたメッセージリスナーのクラス名です。注: 共有サブスクリプション (JMS 2.0 が必要) を除き、サブスクリプションごとに 1 つの同時コンシューマー (このメッセージリスナコンテナーのデフォルト) のみが許可されます。

 

String

subscriptionShared (consumer)

サブスクリプションを共有するかどうかを設定します。使用する共有サブスクリプション名は、subscriptionName プロパティーで指定できます。デフォルトは false です。通常は subscriptionName 値と組み合わせて共有サブスクリプションを登録するには、これを true に設定します (メッセージリスナークラス名がサブスクリプション名として十分でない場合)。共有サブスクリプションも永続的である可能性があるため、このフラグを subscriptionDurable と組み合わせることもできます (多くの場合は組み合わせます)。トピック (pub-sub ドメイン) をリッスンする場合にのみ意味があるため、このメソッドは pubSubDomain フラグも切り替えます。JMS 2.0 互換のメッセージブローカーが必要です。

false

boolean

acceptMessagesWhileStopping (consumer)

コンシューマーが停止中にメッセージを受け入れるかどうかを指定します。実行時に JMS ルートを開始および停止するが、キューにメッセージが入れられている場合は、このオプションを有効にすることを検討してください。このオプションが false の場合は、JMS ルートを停止すると、メッセージが拒否される可能性があり、JMS ブローカは再配信を試行する必要がありますが、これも拒否される可能性があり、最終的にメッセージはJMS ブローカー上のデッドレターキューに移動される可能性があります。これを回避するには、このオプションを有効にすることをお勧めします。

false

boolean

allowReplyManagerQuickStop (consumer)

JmsConfiguration#isAcceptMessagesWhileStopping が有効で、org.apache.camel.CamelContext が現在停止している場合に、要求/応答メッセージングのリプライマネージャーで使用される DefaultMessageListenerContainer が、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 (Spring の SimpleAsyncTaskExecutor を使用) または ThreadPool (Spring の ThreadPoolTaskExecutor を最適な値で使用 - キャッシュされたスレッドプールのようなもの)。設定されていない場合は、デフォルトで以前の動作になり、コンシューマーエンドポイントにはキャッシュされたスレッドプールが使用され、応答コンシューマーには SimpleAsync が使用されます。ThreadPool の使用は、同時コンシューマーが動的に増減するエラスティック設定でスレッドのゴミを減らすために推奨されます。

 

DefaultTaskExecutor Type

eagerLoadingOfProperties (consumer)

メッセージが読み込まれるとすぐに JMS プロパティーの先行読み込みを有効にします。これは、JMS プロパティーが必要ない場合があるため一般的に非効率的ですが、基盤となる JMS プロバイダーと JMS プロパティーの使用に関する問題を早期に発見できる場合があります。

false

boolean

exceptionHandler (consumer)

コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

 

ExceptionHandler

exchangePattern (consumer)

コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。

 

ExchangePattern

exposeListenerSession (consumer)

メッセージを消費するときにリスナーセッションを公開するかどうかを指定します。

false

boolean

replyToSameDestination Allowed (consumer)

JMS コンシューマーが、コンシューマーが使用しているのと同じ宛先に応答メッセージを送信できるかどうか。これにより、同じメッセージを消費してそれ自体に送り返すことで、無限ループが回避されます。

false

boolean

taskExecutor (consumer)

メッセージを消費するためのカスタムタスクエグゼキュータを指定できます。

 

TaskExecutor

deliveryDelay (producer)

JMS の送信呼び出しに使用する配信遅延を設定します。このオプションには、JMS 2.0 準拠のブローカーが必要です。

-1

long

deliveryMode (producer)

使用する配信モードを指定します。可能な値は、javax.jms.DeliveryMode によって定義された値です。NON_PERSISTENT = 1 および PERSISTENT = 2。

 

Integer

deliveryPersistent (producer)

デフォルトで永続配信を使用するかどうかを指定します。

true

boolean

explicitQosEnabled (producer)

メッセージの送信時に、deliveryMode、priority、または timeToLive のサービス品質を使用する必要があるかどうかを設定します。このオプションは、Spring の JmsTemplate に基づいています。deliveryMode、priority、および timeToLive オプションは、現在のエンドポイントに適用されます。これは、メッセージの粒度で動作し、Camel In メッセージヘッダーから排他的に QoS プロパティーを読み取る preserveMessageQos オプションとは対照的です。

false

Boolean

formatDateHeadersToIso8601 (producer)

JMS 日付プロパティーを ISO 8601 標準に従ってフォーマットするかどうかを設定します。

false

boolean

preserveMessageQos (producer)

JMS エンドポイントの QoS 設定ではなく、メッセージで指定された QoS 設定を使用してメッセージを送信する場合は、true に設定します。次の 3 つのヘッダーは、JMSPriority、JMSDeliveryMode、および JMSExpiration と見なされます。それらのすべてまたは一部のみを指定できます。指定されていない場合、Camel は代わりにエンドポイントからの値を使用するようにフォールバックします。したがって、このオプションを使用すると、ヘッダーはエンドポイントからの値をオーバーライドします。対照的に、explicitQosEnabled オプションは、エンドポイントに設定されたオプションのみを使用し、メッセージヘッダーの値は使用しません。

false

boolean

priority (producer)

1 より大きい値は、送信時のメッセージの優先度を指定します (0 が最低の優先度で、9 が最高の優先度です)。このオプションを有効にするには、explicitQosEnabled オプションも有効にする必要があります。

4

int

replyToConcurrentConsumers (producer)

JMS を介して要求/応答を行うときの同時コンシューマーのデフォルト数を指定します。スレッドの動的なスケールアップ/ダウンを制御するには、maxMessagesPerTask オプションも参照してください。

1

int

replyToMaxConcurrent Consumers (producer)

JMS を介した要求/応答を使用する場合の同時コンシューマーの最大数を指定します。スレッドの動的なスケールアップ/ダウンを制御するには、maxMessagesPerTask オプションも参照してください。

 

int

replyToOnTimeoutMax ConcurrentConsumers (producer)

JMS 経由の要求/応答を使用するときにタイムアウトが発生したときに、ルーティングを継続するための同時コンシューマーの最大数を指定します。

1

int

replyToOverride (producer)

JMS メッセージで明示的な ReplyTo 宛先を提供します。これは、replyTo の設定をオーバーライドします。メッセージをリモート Queue に転送し、ReplyTo 宛先から応答メッセージを受け取る場合に便利です。

 

String

replyToType (producer)

JMS を介して要求/応答を行うときに、replyTo キューに使用する戦略の種類を明示的に指定できます。可能な値は、Temporary、Shared、または Exclusive です。デフォルトでは、Camel は一時キューを使用します。ただし、replyTo が設定されている場合は、デフォルトで Shared が使用されます。このオプションを使用すると、共有キューの代わりに専用キューを使用できます。詳細については、Camel JMS のドキュメントを参照してください。特に、クラスター化された環境で実行する場合の影響に関する注意事項と、共有応答キューは代替の一時および排他的キューよりもパフォーマンスが低いという事実を参照してください。

 

ReplyToType

requestTimeout (producer)

InOut Exchange パターン使用時の応答待ちタイムアウト (ミリ秒単位)。デフォルトは 20 秒です。ヘッダー CamelJmsRequestTimeout を含めて、このエンドポイントで設定されたタイムアウト値をオーバーライドし、メッセージごとに個別のタイムアウト値を持つことができます。requestTimeoutCheckerInterval オプションも参照してください。

20000

long

timeToLive (producer)

メッセージの送信時に、メッセージの有効期限をミリ秒単位で指定します。

-1

long

allowAdditionalHeaders (producer)

このオプションは、JMS 仕様に従って無効な値を持つ可能性がある追加のヘッダーを許可するために使用されます。たとえば、WMQ などの一部のメッセージシステムは、バイト配列またはその他の無効な型の値を含む接頭辞 JMS_IBM_MQMD_ を使用するヘッダー名でこれを行います。コンマで区切られた複数のヘッダー名を指定し、ワイルドカードマッチングの接尾辞として使用できます。

 

String

allowNullBody (producer)

ボディーのないメッセージの送信を許可するかどうか。このオプションが false でメッセージボディーが null の場合は、JMSException が出力されます。

true

boolean

alwaysCopyMessage (producer)

true の場合、メッセージがプロデューサーに渡されて送信されると、Camel は常にメッセージの JMS メッセージコピーを作成します。replyToDestinationSelectorName が設定されている場合など、状況によってはメッセージのコピーが必要です (また、replyToDestinationSelectorName が設定されている場合、Camel は alwaysCopyMessage オプションを true に設定します)。

false

boolean

correlationProperty (producer)

InOut 交換パターンを使用する場合、JMSCorrelationID JMS プロパティーの代わりにこの JMS プロパティーを使用してメッセージを関連付けます。設定されたメッセージがこのプロパティーの値のみに関連付けられる場合、JMSCorrelationID プロパティーは無視され、Camel によって設定されません。

 

String

disableTimeToLive (producer)

このオプションを使用して、有効期限を強制的に無効にします。たとえば、JMS を介して要求/応答を行う場合、Camel はデフォルトで、送信されるメッセージの存続時間として requestTimeout 値を使用します。問題は、送信側システムと受信側システムのクロックを同期させる必要があるため、同期していることです。これをアーカイブするのは必ずしも簡単ではありません。したがって、disableTimeToLive=true を使用して、送信されたメッセージに有効期限の値を設定しないようにすることができます。その後、メッセージは受信側システムで期限切れになりません。詳細については、以下の生存時間についてのセクションを参照してください。

false

boolean

forceSendOriginalMessage (producer)

mapJmsMessage=false を使用すると、ルート中にヘッダーに触れると (get または set)、Camel は新しい JMS メッセージを作成して新しい JMS 宛先に送信します。Camel が受信した元の JMS メッセージを強制的に送信するには、このオプションを true に設定します。

false

boolean

includeSentJMSMessageID (producer)

InOnly を使用して JMS 宛先に送信する場合にのみ適用されます (例: ファイアアンドフォーゲット)。このオプションを有効にすると、メッセージが JMS 宛先に送信されたときに JMS クライアントによって使用された実際の JMSMessageID で Camel Exchange が強化されます。

false

boolean

replyToCacheLevelName (producer)

JMS を介して要求/応答を行うときに、応答コンシューマーのキャッシュレベルを名前で設定します。このオプションは、固定応答キュー (一時的ではない) を使用する場合にのみ適用されます。Camel はデフォルトで次を使用します: 排他的または replyToSelectorName と共有の CACHE_CONSUMER。そして、replyToSelectorName なしで共有するための CACHE_SESSION。IBM WebSphere などの一部の JMS ブローカーは、replyToCacheLevelName=CACHE_NONE を機能させるために設定する必要がある場合があります。注: 一時キューを使用する場合、CACHE_NONE は許可されず、CACHE_CONSUMER や CACHE_SESSION などのより高い値を使用する必要があります。

 

String

replyToDestinationSelector Name (producer)

使用する固定名を使用して JMS セレクターを設定し、共有キューを使用している場合 (つまり、一時的な応答キューを使用していない場合) に、他の応答から自分の応答を除外できるようにします。

 

String

streamMessageTypeEnabled (producer)

StreamMessage タイプを有効にするかどうかを設定します。ファイル、InputStream などのストリーミングの種類のメッセージペイロードは、BytesMessage または StreamMessage として送信されます。このオプションは、どの種類が使用されるかを制御します。デフォルトでは、BytesMessage が使用され、メッセージペイロード全体がメモリーに読み込まれます。このオプションを有効にすると、メッセージペイロードがチャンク単位でメモリーに読み込まれ、データがなくなるまで各チャンクが StreamMessage に書き込まれます。

false

boolean

allowSerializedHeaders (advanced)

シリアル化されたヘッダーを含めるかどうかを制御します。transferExchange が true の場合にのみ適用されます。これには、オブジェクトがシリアライズ可能である必要があります。Camel はシリアル化できないオブジェクトを除外し、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.destination.DestinationResolver (たとえば、JNDI レジストリーで実際の宛先を検索するため)。

 

DestinationResolver

errorHandler (advanced)

Message の処理中にキャッチされない例外が出力された場合に呼び出される org.springframework.util.ErrorHandler を指定します。デフォルトでは、errorHandler が設定されていない場合、これらの例外は WARN レベルでログに記録されます。errorHandlerLoggingLevel および errorHandlerLogStackTrace オプションを使用して、ログレベルとスタックトレースをログに記録するかどうかを設定できます。これにより、カスタム errorHandler をコーディングするよりも設定がはるかに簡単になります。

 

ErrorHandler

exceptionListener (advanced)

基礎となる JMS 例外の通知を受ける JMS 例外リスナーを指定します。

 

ExceptionListener

headerFilterStrategy (advanced)

カスタムの HeaderFilterStrategy を使用して、Camel メッセージとの間でヘッダーをフィルタリングします。

 

HeaderFilterStrategy

idleConsumerLimit (advanced)

常にアイドル状態にできるコンシューマーの数の制限を指定します。

1

int

idleTaskExecutionLimit (advanced)

実行中にメッセージを受信していない、受信タスクのアイドル実行の制限を指定します。この制限に達すると、タスクはシャットダウンし、他の実行中のタスクに受信を任せます (動的スケジューリングの場合。maxConcurrentConsumers 設定を参照してください)。Spring から入手できる追加のドキュメントがあります。

1

int

includeAllJMSXProperties (advanced)

JMS から Camel Message へのマッピング時に JMSXxxx プロパティーをすべて含めるかどうか。これを true に設定すると、JMSXAppID や JMSXUserID などのプロパティーが含まれます。注記: カスタムの headerFilterStrategy を使用している場合、このオプションは適用されません。

false

boolean

jmsKeyFormatStrategy (advanced)

JMS 仕様に準拠できるように、JMS キーをエンコードおよびデコードするためのプラグ可能な戦略。Camel は、追加設定なしで、default と passthrough の 2 つの実装を提供します。デフォルトのストラテジーでは、ドットとハイフン(. および -)を安全にマーシャリングします。パススルー戦略では、キーはそのまま残ります。JMS ヘッダーキーに不正な文字が含まれているかどうかは問題にならない JMS ブローカーに使用できます。org.apache.camel.component.jms.JmsKeyFormatStrategy の独自の実装を提供し、# 表記を使用して参照できます。

 

String

mapJmsMessage (advanced)

Camel が受信した JMS メッセージを適切なペイロードタイプ (javax.jms.TextMessage を文字列など) に自動マップするかどうかを指定します。

true

boolean

maxMessagesPerTask (advanced)

タスクあたりのメッセージ数。-1 は無制限です。同時コンシューマーの範囲 (例: min 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 を決定するために使用される MessageListenerContainerFactory のレジストリー ID。これを設定すると、consumerType が自動的に Custom に設定されます。

 

MessageListener ContainerFactory

messageTimestampEnabled (advanced)

メッセージの送信時にデフォルトでタイムスタンプを有効にするかどうかを指定します。これは、JMS ブローカへの単なるヒントです。JMS プロバイダーがこのヒントを受け入れる場合には、これらのメッセージのタイムスタンプはゼロに設定する必要があります。プロバイダーがヒントを無視する場合には、タイムスタンプを通常の値に設定する必要があります

true

boolean

pubSubNoLocal (advanced)

独自の接続によってパブリッシュされたメッセージの配信を禁止するかどうかを指定します。

false

boolean

receiveTimeout (advanced)

メッセージ受信のタイムアウト (ミリ秒単位)。

1000

long

recoveryInterval (advanced)

リカバリーの試行の間隔を指定します。つまり、接続が更新されるタイミング(ミリ秒単位)を指定します。デフォルトは 5000 ミリ秒、つまり 5 秒です。

5000

long

requestTimeoutChecker Interval (advanced)

JMS を介してリクエスト/リプライを行うときに、Camel がタイムアウトになった Exchange をチェックする頻度を設定します。デフォルトでは、Camel は 1 秒に 1 回確認します。ただし、タイムアウトが発生したときに迅速に対応する必要がある場合は、この間隔を短くして、より頻繁にチェックすることができます。タイムアウトは、オプション requestTimeout によって決定されます。

1000

long

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

transferException (advanced)

有効で、Request Reply メッセージング (InOut) を使用していて、Exchange がコンシューマー側で失敗した場合、原因となった例外が javax.jms.ObjectMessage として応答で返されます。クライアントが Camel の場合、返された Exception は再出力されます。これにより、Camel JMS をルーティングのブリッジとして使用できます。たとえば、永続的なキューを使用して堅牢なルーティングを有効にできます。transferExchange も有効にしている場合は、このオプションが優先されることに注意してください。キャッチされた例外はシリアライズ可能である必要があります。コンシューマー側の元の Exception は、プロデューサーに返されるときに org.apache.camel.RuntimeCamelException などの外部例外にラップできます。

false

boolean

transferExchange (advanced)

本文とヘッダーだけでなく、電信送金で交換を転送できます。次のフィールドが転送されます: In body、Out body、Fault body、In ヘッダー、Out ヘッダー、Fault ヘッダー、交換プロパティー、交換例外。これには、オブジェクトがシリアライズ可能である必要があります。Camel はシリアル化できないオブジェクトを除外し、WARN レベルでログに記録します。プロデューサ側とコンシューマー側の両方でこのオプションを有効にする必要があるため、Camel はペイロードが Exchange であり、通常のペイロードではないことを認識します。

false

boolean

transferFault (advanced)

これを有効にし、Request Reply メッセージング (InOut) を使用していて、Exchange がコンシューマー側で SOAP エラー (例外ではない) で失敗した場合には、Message#isFault() のエラーフラグが応答で、org.apache.camel.component.jms.JmsConstants#JMS_TRANSFER_FAULT#JMS_TRANSFER_FAULT のキーを含んだ JMS ヘッダーとして送り返されます。クライアントが Camel の場合には、返される障害フラグは org.apache.camel.Message#setFault (boolean) に設定されます。cxf や spring-ws などの SOAP ベースなどの障害をサポートする Camel コンポーネントを使用する場合、これを有効できます。

false

boolean

useMessageIDAsCorrelation ID (advanced)

InOut メッセージの JMSCorrelationID として JMSMessageID を常に使用するかどうかを指定します。

false

boolean

waitForProvisionCorrelation ToBeUpdatedCounter (advanced)

JMS を介して要求/応答を行う場合、およびオプション useMessageIDAsCorrelationID が有効な場合に、暫定相関 ID が実際の相関 ID に更新されるのを待機する回数。

50

int

waitForProvisionCorrelation ToBeUpdatedThreadSleeping Time (advanced)

暫定相関 ID が更新されるのを待機するたびにスリープする間隔 (ミリ単位)。

100

long

errorHandlerLoggingLevel (logging)

キャッチされていない例外をログに記録するためのデフォルトの errorHandler ログレベルを設定できます。

WARN

LoggingLevel

errorHandlerLogStackTrace (logging)

デフォルトの errorHandler でスタックトレースをログに記録するかどうかを制御できます。

true

boolean

password (security)

ConnectionFactory で使用するパスワード。また、ConnectionFactory でユーザー名およびパスワードを直接設定することもできます。

 

String

username (security)

ConnectionFactory で使用するユーザー名。また、ConnectionFactory でユーザー名およびパスワードを直接設定することもできます。

 

String

取引済み (取引)

トランザクションモードを使用するかどうかを指定します

false

boolean

lazyCreateTransaction Manager (トランザクション)

true の場合、オプション transacted=true のときに transactionManager が挿入されていない場合、Camel は JmsTransactionManager を作成します。

true

boolean

transactionManager (トランザクション)

使用する Spring トランザクションマネージャー。

 

PlatformTransaction Manager

transactionName (トランザクション)

使用するトランザクションの名前。

 

String

transactionTimeout (トランザクション)

トランザクションモードを使用している場合の、トランザクションのタイムアウト値 (秒単位)。

-1

int

5.3. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 81 のオプションをサポートします。

名前説明デフォルトタイプ

camel.component.amqp.accept-messages-while-stopping

コンシューマーが停止中にメッセージを受け入れるかどうかを指定します。実行時に JMS ルートを開始および停止するが、キューにメッセージが入れられている場合は、このオプションを有効にすることを検討してください。このオプションが false の場合は、JMS ルートを停止すると、メッセージが拒否される可能性があり、JMS ブローカは再配信を試行する必要がありますが、これも拒否される可能性があり、最終的にメッセージはJMS ブローカー上のデッドレターキューに移動される可能性があります。これを回避するには、このオプションを有効にすることをお勧めします。

false

Boolean

camel.component.amqp.acknowledgement-mode

整数として定義された JMS 確認応答モード。確認モードにベンダー固有の拡張を設定できます。通常のモードでは、代わりに acknowledgementModeName を使用することをお勧めします。

 

Integer

camel.component.amqp.acknowledgement-mode-name

JMS 確認応答名。SESSION_TRANSACTED、CLIENT_ACKNOWLEDGE、AUTO_ACKNOWLEDGE、DUPS_OK_ACKNOWLEDGE のいずれかです。

AUTO_ ACKNOWLEDGE

String

camel.component.amqp.allow-additional-headers

このオプションは、JMS 仕様に従って無効な値を持つ可能性がある追加のヘッダーを許可するために使用されます。たとえば、WMQ などの一部のメッセージシステムは、バイト配列またはその他の無効な型の値を含む接頭辞 JMS_IBM_MQMD_ を使用するヘッダー名でこれを行います。コンマで区切られた複数のヘッダー名を指定し、ワイルドカードマッチングの接尾辞として使用できます。

 

String

camel.component.amqp.allow-null-body

ボディーのないメッセージの送信を許可するかどうか。このオプションが false でメッセージボディーが null の場合は、JMSException が出力されます。

true

Boolean

camel.component.amqp.allow-reply-manager-quick-stop

JmsConfiguration#isAcceptMessagesWhileStopping が有効で、org.apache.camel.CamelContext が現在停止している場合に、要求/応答メッセージングのリプライマネージャーで使用される DefaultMessageListenerContainer が、DefaultMessageListenerContainer.runningAllowed フラグを迅速に停止できるようにするかどうか。このクイック停止機能は、通常の JMS コンシューマーではデフォルトで有効になっていますが、応答マネージャーを有効にするには、このフラグを有効にする必要があります。

false

Boolean

camel.component.amqp.always-copy-message

true の場合、メッセージがプロデューサーに渡されて送信されると、Camel は常にメッセージの JMS メッセージコピーを作成します。replyToDestinationSelectorName が設定されている場合など、状況によってはメッセージのコピーが必要です (また、replyToDestinationSelectorName が設定されている場合、Camel は alwaysCopyMessage オプションを true に設定します)。

false

Boolean

camel.component.amqp.async-consumer

JmsConsumer が Exchange を非同期的に処理するかどうか。有効にすると、JmsConsumer は JMS キューから次のメッセージを取得できますが、前のメッセージは (非同期ルーティングエンジンによって) 非同期に処理されます。これは、メッセージが 100% 厳密に順序どおりに処理されない可能性があることを意味します。無効になっている場合 (デフォルト)、JmsConsumer が JMS キューから次のメッセージを取得する前に Exchange が完全に処理されます。transactioned が有効になっている場合、トランザクションは同期的に実行する必要があるため、asyncConsumer=true は非同期的に実行されないことに注意してください (Camel 3.0 は非同期トランザクションをサポートする場合があります)。

false

Boolean

camel.component.amqp.async-start-listener

ルートの開始時に JmsConsumer メッセージリスナーを非同期で開始するかどうか。たとえば、JmsConsumer がリモート JMS ブローカーへの接続を取得できない場合は、再試行中やフェイルオーバー中にブロックされる可能性があります。これにより、ルートの開始時に Camel がブロックされます。このオプションを true に設定すると、ルートの起動を許可します。一方、JmsConsumer は非同期モードで専用のスレッドを使用して JMS ブローカーに接続します。このオプションを使用する場合は、接続を確立できない場合は例外が WARN レベルでログに記録され、コンシューマーはメッセージを受信できず、ルートを再起動して再試行できます。

false

Boolean

camel.component.amqp.async-stop-listener

ルートを停止するときに、JmsConsumer メッセージリスナーを非同期的に停止するかどうか。

false

Boolean

camel.component.amqp.auto-startup

コンシューマーコンテナーを自動起動するかどうかを指定します。

true

Boolean

camel.component.amqp.cache-level

基礎となる JMS リソースの ID によってキャッシュレベルを設定します。詳細は、cacheLevelName オプションを参照してください。

 

Integer

camel.component.amqp.cache-level-name

基礎となる JMS リソースのキャッシュレベルを名前で設定します。可能な値は、CACHE_AUTO、CACHE_CONNECTION、CACHE_CONSUMER、CACHE_NONE、および CACHE_SESSION です。デフォルト設定は CACHE_AUTO です。詳細は、Spring のドキュメントとトランザクションキャッシュレベルを参照してください。

CACHE_AUTO

String

camel.component.amqp.client-id

使用する JMS クライアント ID を設定します。この値を指定する場合は、一意である必要があり、単一の JMS 接続インスタンスでのみ使用できることに注意してください。通常、永続的なトピックサブスクリプションの場合にのみ必要です。Apache ActiveMQ を使用している場合は、代わりに仮想トピックを使用することをお勧めします。

 

String

camel.component.amqp.concurrent-consumers

JMS から消費する場合の同時コンシューマーのデフォルト数を指定します (JMS を介した要求/応答ではありません)。スレッドの動的なスケールアップ/ダウンを制御するには、maxMessagesPerTask オプションも参照してください。JMS を介して要求/応答を行う場合は、オプション replyToConcurrentConsumers を使用して、応答メッセージリスナーの同時コンシューマーの数を制御します。

1

Integer

camel.component.amqp.configuration

共有 JMS 設定を使用するには。オプションは org.apache.camel.component.jms.JmsConfiguration タイプです。

 

String

camel.component.amqp.connection-factory

使用する接続ファクトリー。コンポーネントまたはエンドポイントで接続ファクトリーを設定する必要があります。オプションは javax.jms.ConnectionFactory タイプです。

 

String

camel.component.amqp.correlation-property

JMSCorrelationID プロパティーの代わりに、この JMS プロパティーを使用して、InOut 交換パターン (要求 - 応答) でメッセージを関連付けます。これにより、JMSCorrelationID JMS プロパティーを使用してメッセージと相関性のないシステムとメッセージを交換できます。JMSCorrelationID を使用すると、Camel によって使用または設定されません。ここで指定されたプロパティーの値は、同じ名前でメッセージのヘッダーに指定されていない場合に生成されます。

 

String

camel.component.amqp.default-task-executor-type

コンシューマーエンドポイントとプロデューサエンドポイントの ReplyTo コンシューマーの両方に対して、DefaultMessageListenerContainer で使用するデフォルトの TaskExecutor タイプを指定します。可能な値: SimpleAsync (Spring の SimpleAsyncTaskExecutor を使用) または ThreadPool (Spring の ThreadPoolTaskExecutor を最適な値で使用 - キャッシュされたスレッドプールのようなもの)。設定されていない場合は、デフォルトで以前の動作になり、コンシューマーエンドポイントにはキャッシュされたスレッドプールが使用され、応答コンシューマーには SimpleAsync が使用されます。ThreadPool の使用は、同時コンシューマーが動的に増減するエラスティック設定でスレッドのゴミを減らすために推奨されます。

 

DefaultTaskExecutor Type

camel.component.amqp.delivery-mode

使用する配信モードを指定します。可能な値は、javax.jms.DeliveryMode によって定義された値です。NON_PERSISTENT = 1 および PERSISTENT = 2。

 

Integer

camel.component.amqp.delivery-persistent

デフォルトで永続配信を使用するかどうかを指定します。

true

Boolean

camel.component.amqp.destination-resolver

独自のリゾルバーを使用できるようにするプラグ可能な org.springframework.jms.support.destination.DestinationResolver (たとえば、JNDI レジストリーで実際の宛先を検索するため)。オプションは org.springframework.jms.support.destination.DestinationResolver 型です。

 

String

camel.component.amqp.durable-subscription-name

永続トピックサブスクリプションを指定するための永続サブスクライバー名。clientId オプションも設定する必要があります。

 

String

camel.component.amqp.eager-loading-of-properties

メッセージが読み込まれるとすぐに JMS プロパティーの先行読み込みを有効にします。これは、JMS プロパティーが必要ない場合があるため一般的に非効率的ですが、基盤となる JMS プロバイダーと JMS プロパティーの使用に関する問題を早期に発見できる場合があります。

false

Boolean

camel.component.amqp.enabled

amqp コンポーネントを有効にします。

true

Boolean

camel.component.amqp.error-handler

Message の処理中にキャッチされない例外が出力された場合に呼び出される org.springframework.util.ErrorHandler を指定します。デフォルトでは、errorHandler が設定されていない場合、これらの例外は WARN レベルでログに記録されます。errorHandlerLoggingLevel および errorHandlerLogStackTrace オプションを使用して、ログレベルとスタックトレースをログに記録するかどうかを設定できます。これにより、カスタム errorHandler をコーディングするよりも設定がはるかに簡単になります。オプションは org.springframework.util.ErrorHandler 型です。

 

String

camel.component.amqp.error-handler-log-stack-trace

デフォルトの errorHandler でスタックトレースをログに記録するかどうかを制御できます。

true

Boolean

camel.component.amqp.error-handler-logging-level

キャッチされていない例外をログに記録するためのデフォルトの errorHandler ログレベルを設定できます。

 

LoggingLevel

camel.component.amqp.exception-listener

基礎となる JMS 例外の通知を受ける JMS 例外リスナーを指定します。オプションは javax.jms.ExceptionListener 型です。

 

String

camel.component.amqp.explicit-qos-enabled

メッセージの送信時に、deliveryMode、priority、または timeToLive のサービス品質を使用する必要があるかどうかを設定します。このオプションは、Spring の JmsTemplate に基づいています。deliveryMode、priority、および timeToLive オプションは、現在のエンドポイントに適用されます。これは、メッセージの粒度で動作し、Camel In メッセージヘッダーから排他的に QoS プロパティーを読み取る preserveMessageQos オプションとは対照的です。

false

Boolean

camel.component.amqp.expose-listener-session

メッセージを消費するときにリスナーセッションを公開するかどうかを指定します。

false

Boolean

camel.component.amqp.force-send-original-message

mapJmsMessage=false を使用すると、ルート中にヘッダーに触れると (get または set)、Camel は新しい JMS メッセージを作成して新しい JMS 宛先に送信します。Camel が受信した元の JMS メッセージを強制的に送信するには、このオプションを true に設定します。

false

Boolean

camel.component.amqp.format-date-headers-to-iso8601

日付ヘッダーを ISO 8601 標準に従ってフォーマットするかどうかを設定します。

false

Boolean

camel.component.amqp.header-filter-strategy

カスタムの org.apache.camel.spi.HeaderFilterStrategy を使用して、Camel メッセージとの間でヘッダーをフィルターします。このオプションは org.apache.camel.spi.HeaderFilterStrategy タイプです。

 

String

camel.component.amqp.idle-consumer-limit

常にアイドル状態にできるコンシューマーの数の制限を指定します。

1

Integer

camel.component.amqp.idle-task-execution-limit

実行中にメッセージを受信していない、受信タスクのアイドル実行の制限を指定します。この制限に達すると、タスクはシャットダウンし、他の実行中のタスクに受信を任せます (動的スケジューリングの場合。maxConcurrentConsumers 設定を参照してください)。Spring から入手できる追加のドキュメントがあります。

1

Integer

camel.component.amqp.include-all-j-m-s-x-properties

JMS から Camel Message へのマッピング時に JMSXxxx プロパティーをすべて含めるかどうか。これを true に設定すると、JMSXAppID や JMSXUserID などのプロパティーが含まれます。注記: カスタムの headerFilterStrategy を使用している場合、このオプションは適用されません。

false

Boolean

camel.component.amqp.include-sent-j-m-s-message-i-d

InOnly を使用して JMS 宛先に送信する場合にのみ適用されます (例: ファイアアンドフォーゲット)。このオプションを有効にすると、メッセージが JMS 宛先に送信されたときに JMS クライアントによって使用された実際の JMSMessageID で Camel Exchange が強化されます。

false

Boolean

camel.component.amqp.jms-key-format-strategy

JMS 仕様に準拠できるように、JMS キーをエンコードおよびデコードするためのプラグ可能な戦略。Camel は、追加設定なしで、default と passthrough の 2 つの実装を提供します。デフォルトのストラテジーでは、ドットとハイフン(. および -)を安全にマーシャリングします。パススルー戦略では、キーはそのまま残ります。JMS ヘッダーキーに不正な文字が含まれているかどうかは問題にならない JMS ブローカーに使用できます。org.apache.camel.component.jms.JmsKeyFormatStrategy の独自の実装を提供し、# 表記を使用して参照できます。オプションは org.apache.camel.component.jms.JmsKeyFormatStrategy タイプです。

 

String

camel.component.amqp.jms-operations

org.springframework.jms.core.JmsOperations インターフェイスの独自の実装を使用できるようにします。Camel はデフォルトで JmsTemplate を使用します。テスト目的で使用できますが、Spring API ドキュメントに記載されているほどは使用されません。オプションは org.springframework.jms.core.JmsOperations タイプです。

 

String

camel.component.amqp.lazy-create-transaction-manager

true の場合、オプション transacted=true のときに transactionManager が挿入されていない場合、Camel は JmsTransactionManager を作成します。

true

Boolean

camel.component.amqp.map-jms-message

Camel が受信した JMS メッセージを適切なペイロードタイプ (javax.jms.TextMessage を文字列など) に自動マップするかどうかを指定します。

true

Boolean

camel.component.amqp.max-concurrent-consumers

JMS から消費する場合の同時コンシューマーの最大数を指定します (JMS を介した要求/応答ではありません)。スレッドの動的なスケールアップ/ダウンを制御するには、maxMessagesPerTask オプションも参照してください。JMS を介して要求/応答を行う場合は、オプション replyToMaxConcurrentConsumers を使用して、応答メッセージリスナーの同時コンシューマーの数を制御します。

 

Integer

camel.component.amqp.max-messages-per-task

タスクあたりのメッセージ数。-1 は無制限です。同時コンシューマーの範囲 (例: min max) を使用する場合、このオプションを使用して値を 100 などに設定し、必要な作業が少ない場合にコンシューマーが縮小する速度を制御できます。

-1

Integer

camel.component.amqp.message-converter

カスタム Spring org.springframework.jms.support.converter.MessageConverter を使用して、javax.jms.Message との間でどのようにマッピングするかを制御できるようにします。オプションは org.springframework.jms.support.converter.MessageConverter 型です。

 

String

camel.component.amqp.message-created-strategy

Camel が JMS メッセージを送信しているときに、Camel が javax.jms.Message オブジェクトの新しいインスタンスを作成するときに呼び出される、指定された MessageCreatedStrategy を使用します。オプションは org.apache.camel.component.jms.MessageCreatedStrategy タイプです。

 

String

camel.component.amqp.message-id-enabled

送信時に、メッセージ ID を追加するかどうかを指定します。これは、JMS ブローカへの単なるヒントです。JMS プロバイダーがこのヒントを受け入れる場合には、これらのメッセージはメッセージ ID を null に設定する必要があります。プロバイダーがヒントを無視する場合には、メッセージ ID は通常の一意の値に設定する必要があります

true

Boolean

camel.component.amqp.message-timestamp-enabled

メッセージの送信時にデフォルトでタイムスタンプを有効にするかどうかを指定します。これは、JMS ブローカへの単なるヒントです。JMS プロバイダーがこのヒントを受け入れる場合には、これらのメッセージのタイムスタンプはゼロに設定する必要があります。プロバイダーがヒントを無視する場合には、タイムスタンプを通常の値に設定する必要があります

true

Boolean

camel.component.amqp.password

ConnectionFactory で使用するパスワード。また、ConnectionFactory でユーザー名およびパスワードを直接設定することもできます。

 

String

camel.component.amqp.preserve-message-qos

JMS エンドポイントの QoS 設定ではなく、メッセージで指定された QoS 設定を使用してメッセージを送信する場合は、true に設定します。次の 3 つのヘッダーは、JMSPriority、JMSDeliveryMode、および JMSExpiration と見なされます。それらのすべてまたは一部のみを指定できます。指定されていない場合、Camel は代わりにエンドポイントからの値を使用するようにフォールバックします。したがって、このオプションを使用すると、ヘッダーはエンドポイントからの値をオーバーライドします。対照的に、explicitQosEnabled オプションは、エンドポイントに設定されたオプションのみを使用し、メッセージヘッダーの値は使用しません。

false

Boolean

camel.component.amqp.priority

1 より大きい値は、送信時のメッセージの優先度を指定します (0 が最低の優先度で、9 が最高の優先度です)。このオプションを有効にするには、explicitQosEnabled オプションも有効にする必要があります。

4

Integer

camel.component.amqp.pub-sub-no-local

独自の接続によってパブリッシュされたメッセージの配信を禁止するかどうかを指定します。

false

Boolean

camel.component.amqp.queue-browse-strategy

キューを参照するときにカスタム QueueBrowseStrategy を使用するには。オプションは org.apache.camel.component.jms.QueueBrowseStrategy タイプです。

 

String

camel.component.amqp.receive-timeout

メッセージ受信のタイムアウト (ミリ秒単位)。

1000

Long

camel.component.amqp.recovery-interval

リカバリーの試行の間隔を指定します。つまり、接続が更新されるタイミング(ミリ秒単位)を指定します。デフォルトは 5000 ミリ秒、つまり 5 秒です。

5000

Long

camel.component.amqp.reply-on-timeout-to-max-concurrent-consumers

JMS 経由の要求/応答を使用するときにタイムアウトが発生したときに、ルーティングを継続するための同時コンシューマーの最大数を指定します。

1

Integer

camel.component.amqp.reply-to-cache-level-name

JMS を介して要求/応答を行うときに、応答コンシューマーのキャッシュレベルを名前で設定します。このオプションは、固定応答キュー (一時的ではない) を使用する場合にのみ適用されます。Camel はデフォルトで次を使用します: 排他的または replyToSelectorName と共有の CACHE_CONSUMER。そして、replyToSelectorName なしで共有するための CACHE_SESSION。IBM WebSphere などの一部の JMS ブローカーは、replyToCacheLevelName=CACHE_NONE を機能させるために設定する必要がある場合があります。注: 一時キューを使用する場合、CACHE_NONE は許可されず、CACHE_CONSUMER や CACHE_SESSION などのより高い値を使用する必要があります。

 

String

camel.component.amqp.reply-to-concurrent-consumers

JMS を介して要求/応答を行うときの同時コンシューマーのデフォルト数を指定します。スレッドの動的なスケールアップ/ダウンを制御するには、maxMessagesPerTask オプションも参照してください。

1

Integer

camel.component.amqp.reply-to-max-concurrent-consumers

JMS を介した要求/応答を使用する場合の同時コンシューマーの最大数を指定します。スレッドの動的なスケールアップ/ダウンを制御するには、maxMessagesPerTask オプションも参照してください。

 

Integer

camel.component.amqp.reply-to-type

JMS を介して要求/応答を行うときに、replyTo キューに使用する戦略の種類を明示的に指定できます。可能な値は、Temporary、Shared、または Exclusive です。デフォルトでは、Camel は一時キューを使用します。ただし、replyTo が設定されている場合は、デフォルトで Shared が使用されます。このオプションを使用すると、共有キューの代わりに専用キューを使用できます。詳細については、Camel JMS のドキュメントを参照してください。特に、クラスター化された環境で実行する場合の影響に関する注意事項と、共有応答キューは代替の一時および排他的キューよりもパフォーマンスが低いという事実を参照してください。

 

ReplyToType

camel.component.amqp.request-timeout

InOut Exchange パターン使用時の応答待ちタイムアウト (ミリ秒単位)。デフォルトは 20 秒です。ヘッダー CamelJmsRequestTimeout を含めて、このエンドポイントで設定されたタイムアウト値をオーバーライドし、メッセージごとに個別のタイムアウト値を持つことができます。requestTimeoutCheckerInterval オプションも参照してください。

20000

Long

camel.component.amqp.request-timeout-checker-interval

JMS を介してリクエスト/リプライを行うときに、Camel がタイムアウトになった Exchange をチェックする頻度を設定します。デフォルトでは、Camel は 1 秒に 1 回確認します。ただし、タイムアウトが発生したときに迅速に対応する必要がある場合は、この間隔を短くして、より頻繁にチェックすることができます。タイムアウトは、オプション requestTimeout によって決定されます。

1000

Long

camel.component.amqp.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

camel.component.amqp.stream-message-type-enabled

StreamMessage タイプを有効にするかどうかを設定します。ファイル、InputStream などのストリーミングの種類のメッセージペイロードは、BytesMessage または StreamMessage として送信されます。このオプションは、どの種類が使用されるかを制御します。デフォルトでは、BytesMessage が使用され、メッセージペイロード全体がメモリーに読み込まれます。このオプションを有効にすると、メッセージペイロードがチャンク単位でメモリーに読み込まれ、データがなくなるまで各チャンクが StreamMessage に書き込まれます。

false

Boolean

camel.component.amqp.subscription-durable

サブスクリプションを永続化するかどうかを設定します。使用する永続サブスクリプション名は、subscriptionName プロパティーで指定できます。デフォルトは false です。通常、subscriptionName 値と組み合わせて永続的なサブスクリプションを登録するには、これを true に設定します (メッセージリスナークラス名がサブスクリプション名として十分でない場合)。トピック (pub-sub ドメイン) をリッスンする場合にのみ意味があるため、このメソッドは pubSubDomain フラグも切り替えます。

false

Boolean

camel.component.amqp.subscription-name

作成するサブスクリプションの名前を設定します。共有または永続的なサブスクリプションを持つトピック (pub-sub ドメイン) の場合に適用されます。サブスクリプション名は、このクライアントの JMS クライアント ID 内で一意である必要があります。デフォルトは、指定されたメッセージリスナーのクラス名です。注: 共有サブスクリプション (JMS 2.0 が必要) を除き、サブスクリプションごとに 1 つの同時コンシューマー (このメッセージリスナコンテナーのデフォルト) のみが許可されます。

 

String

camel.component.amqp.subscription-shared

サブスクリプションを共有するかどうかを設定します。使用する共有サブスクリプション名は、subscriptionName プロパティーで指定できます。デフォルトは false です。通常は subscriptionName 値と組み合わせて共有サブスクリプションを登録するには、これを true に設定します (メッセージリスナークラス名がサブスクリプション名として十分でない場合)。共有サブスクリプションも永続的である可能性があるため、このフラグを subscriptionDurable と組み合わせることもできます (多くの場合は組み合わせます)。トピック (pub-sub ドメイン) をリッスンする場合にのみ意味があるため、このメソッドは pubSubDomain フラグも切り替えます。JMS 2.0 互換のメッセージブローカーが必要です。

false

Boolean

camel.component.amqp.task-executor

メッセージを消費するためのカスタムタスクエグゼキュータを指定できます。オプションは org.springframework.core.task.TaskExecutor 型です。

 

String

camel.component.amqp.test-connection-on-startup

起動時に接続をテストするかどうかを指定します。これにより、Camel の起動時に、すべての JMS コンシューマーが JMS ブローカーへの有効な接続を持つことが保証されます。接続を許可できない場合、Camel は起動時に例外を出力します。これにより、接続に失敗した状態で Camel が開始されなくなります。JMS プロデューサーもテストされています。

false

Boolean

camel.component.amqp.time-to-live

メッセージの送信時に、メッセージの有効期限をミリ秒単位で指定します。

-1

Long

camel.component.amqp.transacted

トランザクションモードを使用するかどうかを指定します

false

Boolean

camel.component.amqp.transaction-manager

使用する Spring トランザクションマネージャー。オプションは org.springframework.transaction.PlatformTransactionManager 型です。

 

String

camel.component.amqp.transaction-name

使用するトランザクションの名前。

 

String

camel.component.amqp.transaction-timeout

トランザクションモードを使用している場合の、トランザクションのタイムアウト値 (秒単位)。

-1

Integer

camel.component.amqp.transfer-exception

有効で、Request Reply メッセージング (InOut) を使用していて、Exchange がコンシューマー側で失敗した場合、原因となった例外が javax.jms.ObjectMessage として応答で返されます。クライアントが Camel の場合、返された Exception は再出力されます。これにより、Camel JMS をルーティングのブリッジとして使用できます。たとえば、永続的なキューを使用して堅牢なルーティングを有効にできます。transferExchange も有効にしている場合は、このオプションが優先されることに注意してください。キャッチされた例外はシリアライズ可能である必要があります。コンシューマー側の元の Exception は、プロデューサーに返されるときに org.apache.camel.RuntimeCamelException などの外部例外にラップできます。

false

Boolean

camel.component.amqp.transfer-exchange

本文とヘッダーだけでなく、電信送金で交換を転送できます。次のフィールドが転送されます: In body、Out body、Fault body、In ヘッダー、Out ヘッダー、Fault ヘッダー、交換プロパティー、交換例外。これには、オブジェクトがシリアライズ可能である必要があります。Camel はシリアル化できないオブジェクトを除外し、WARN レベルでログに記録します。プロデューサ側とコンシューマー側の両方でこのオプションを有効にする必要があるため、Camel はペイロードが Exchange であり、通常のペイロードではないことを認識します。

false

Boolean

camel.component.amqp.transfer-fault

これを有効にし、Request Reply メッセージング (InOut) を使用していて、Exchange がコンシューマー側で SOAP エラー (例外ではない) で失敗した場合には、Message#isFault() のエラーフラグが応答で、org.apache.camel.component.jms.JmsConstants#JMS_TRANSFER_FAULT#JMS_TRANSFER_FAULT のキーを含んだ JMS ヘッダーとして送り返されます。クライアントが Camel の場合には、返される障害フラグは org.apache.camel.Message#setFault (boolean) に設定されます。cxf や spring-ws などの SOAP ベースなどの障害をサポートする Camel コンポーネントを使用する場合、これを有効できます。

false

Boolean

camel.component.amqp.use-message-i-d-as-correlation-i-d

InOut メッセージの JMSCorrelationID として JMSMessageID を常に使用するかどうかを指定します。

false

Boolean

camel.component.amqp.username

ConnectionFactory で使用するユーザー名。また、ConnectionFactory でユーザー名およびパスワードを直接設定することもできます。

 

String

camel.component.amqp.wait-for-provision-correlation-to-be-updated-counter

JMS を介して要求/応答を行う場合、およびオプション useMessageIDAsCorrelationID が有効な場合に、暫定相関 ID が実際の相関 ID に更新されるのを待機する回数。

50

Integer

camel.component.amqp.wait-for-provision-correlation-to-be-updated-thread-sleeping-time

暫定相関 ID が更新されるのを待機するたびにスリープする間隔 (ミリ単位)。

100

Long

5.4. 使用方法

AMQP コンポーネントは JMS コンポーネントから継承されるため、前者の使用法は後者とほぼ同じです。

AMQP コンポーネントの使用

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

5.5. 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) ファクトリーメソッドが非推奨になり、AMQPComponent#amqpComponent (String connectionURI) が後継となったことに注意してください。 

AMQP 1.0 コンポーネントの作成

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

Camel 2.17 以降、AMQP コンポーネントを自動的に設定するために、org.apache.camel.component.amqp.AMQPConnectionDetails のインスタンスをレジストリーに追加することもできます。たとえば、Spring Boot の場合には、Bean を定義するだけです。

AMQP 接続の詳細の自動設定

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

同様に、Camel-CDI を使用する場合は、CDI プロデューサーメソッドも使用できます。

CDI の AMQP 接続の詳細の自動設定

@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 固有のオプションを有効にする

たとえば、amqp.traceFrames を有効にする必要がある場合は、次の例のように、オプションを URI に追加することで有効にできます。

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

参考までに、QPID JMS クライアント設定 を参照してください。

5.6. トピックの使用

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.7. 関連項目

  • Configuring Camel (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 コンポーネントは、次に示す 2 つのオプションをサポートしています。

名前説明デフォルトタイプ

apnsService (common)

必須 使用する ApnsService。org.apache.camel.component.apns.factory.ApnsServiceFactory を使用して ApnsService を構築できます

 

ApnsService

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

APNS エンドポイントは、URI 構文を使用して設定されます。

apns:name

パスおよびクエリーパラメーターを使用します。

6.2.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

name

エンドポイントの名前

 

String

6.2.2. クエリーパラメーター (20 パラメーター)

名前説明デフォルトタイプ

tokens (common)

通知するデバイスに関連するトークンを静的に宣言する場合は、このプロパティーを設定します。トークンはコンマで区切られます。

 

String

bridgeErrorHandler (consumer)

コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

false

boolean

sendEmptyMessageWhenIdle (consumer)

ポーリングコンシューマーがファイルをポーリングしなかった場合、このオプションを有効にして、代わりに空のメッセージ (ボディーなし) を送信できます。

false

boolean

exceptionHandler (consumer)

コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

 

ExceptionHandler

exchangePattern (consumer)

コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。

 

ExchangePattern

pollStrategy (consumer)

プラグ可能な org.apache.camel.PollingConsumerPollingStrategy を使用すると、エクスチェンジが作成され、Camel でルーティングされる前に、通常はポーリング操作中に発生するエラー処理を制御するカスタム実装が提供できます。

 

PollingConsumerPoll Strategy

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

backoffErrorThreshold (scheduler)

backoffMultipler が開始する前に発生する必要がある後続のエラーポーリング (エラーによって失敗した) の数。

 

int

backoffIdleThreshold (scheduler)

backoffMultipler が開始する前に発生する必要がある後続のアイドルポーリングの数。

 

int

backoffMultiplier (scheduler)

後続のアイドル状態/エラーが連続して発生した場合に、スケジュールされたポーリングコンシューマーのバックオフを許可します。乗数は、実際に次の試行が行われる前にスキップされるポーリングの数です。このオプションが使用されている場合は、backoffIdleThreshold や backoffErrorThreshold も設定する必要があります。

 

int

delay (scheduler)

次のポーリングまでの時間 (ミリ秒単位)。60s (60 秒)、5m30s (5 分 30 秒)、1h (1 時間) などの単位を使用して時間値を指定することもできます。

500

long

greedy (scheduler)

greedy が有効で、以前の実行が 1 つ以上のメッセージをポーリングした場合、ScheduledPollConsumer は即座に再度実行されます。

false

boolean

initialDelay (scheduler)

最初のポーリングが開始されるまでの時間 (ミリ秒単位)。60s (60 秒)、5m30s (5 分 30 秒)、1h (1 時間) などの単位を使用して時間値を指定することもできます。

1000

long

runLoggingLevel (scheduler)

コンシューマーはポーリング時に開始/完了のログ行を記録します。このオプションを使用すると、ログレベルを設定できます。

TRACE

LoggingLevel

scheduledExecutorService (scheduler)

コンシューマーに使用するカスタム/共有スレッドプールを設定できます。デフォルトでは、各コンシューマーに独自の単一スレッドのスレッドプールがあります。

 

ScheduledExecutor Service

scheduler (scheduler)

camel-spring または camel-quartz2 コンポーネントから cron スケジューラーを使用します。

none

ScheduledPollConsumer Scheduler

schedulerProperties (scheduler)

カスタムスケジューラーまたは Quartz2 や Spring ベースのスケジューラーを使用する場合に、追加のプロパティーを設定します。

 

Map

startScheduler (scheduler)

スケジューラーを自動起動するかどうか。

true

boolean

timeUnit (scheduler)

initialDelay および delay オプションの時間単位。

MILLISECONDS

TimeUnit

useFixedDelay (scheduler)

固定遅延または固定レートを使用するかどうかを制御します。詳細は、JDK の ScheduledExecutorService を参照してください。

true

boolean

6.3. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 3 つのオプションをサポートします。

名前説明デフォルトタイプ

camel.component.apns.apns-service

使用する ApnsService。org.apache.camel.component.apns.factory.ApnsServiceFactory を使用して ApnsService を構築できます。オプションは com.notnoop.apns.ApnsService タイプです。

 

String

camel.component.apns.enabled

apns コンポーネントを有効にします。

true

Boolean

camel.component.apns.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

URI には、?option=value&option=value&…​ の形式でクエリーオプションを追加できます。

6.3.1. コンポーネント

ApnsComponentcom.notnoop.apns.ApnsService で設定する必要があります。サービスは、org.apache.camel.component.apns.factory.ApnsServiceFactory を使用して作成および設定できます。例については、以下を参照してください。また、テストソースコード でも同様です。

6.3.1.1. SSL 設定

安全な接続を使用するには、コンポーネントの設定に使用される org.apache.camel.component.apns.factory.ApnsServiceFactoryorg.apache.camel.util.jsse.SSLContextParameters のインスタンスを注入する必要があります。例については、テストリソースを参照してください。SSL の例

6.4. Exchange データ形式

Camel がアクティブではないデバイスに対応するフィードバックデータを取得するタイミングで、InactiveDevice オブジェクトのリストを取得します。取得されたリストの各 InactiveDevice オブジェクトは In ボディーとして設定され、コンシューマーエンドポイントによって処理されます。

6.5. メッセージヘッダー

Camel Apns はこれらのヘッダーを使用します。

プロパティーデフォルト説明

CamelApnsTokens

 

デフォルトでは空です。

CamelApnsMessageType

STRING, PAYLOAD, APNS_NOTIFICATION 

メッセージタイプに PAYLOAD を選択した場合には、メッセージは APNS ペイロードと見なされ、そのまま送信されます。STRING を選択した場合には、メッセージは APNS ペイロードとして変換されます。Camel 2.16 以降では、メッセージボディーを com.notnoop.apns.ApnsNotification タイプとして送信するために APNS_NOTIFICATION が使用されます。

6.6. ApnsServiceFactory builder callback

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.7. サンプル

6.7.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.7.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 - URI を介して静的に設定された iOS ターゲットデバイス

    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.8. 関連項目

第7章 ASN.1 File DataFormat

Camel バージョン 2.20 以降で利用可能

ASN.1 データ形式 Data Format Intoduction to ASN.1(https://www.itu.int/en/ITU-T/asn1/Pages/introduction.aspx) は、Bouncy に基づく Camel Frameworks のデータ形式の実装です。Castle の bcprov-jdk15on ライブラリーと jASN.1 の Java コンパイラーは、アプリケーションが複雑であろうと非常に単純であろうと、言語実装やこれらのデータの物理表現に関係なく、通信プロトコルによって送信されるデータを記述するために使用される正式な表記法に使用されます。メッセージはプレーン Java オブジェクトに非整列化 (単純な Java POJO への変換) できます。Camel のルーティングエンジンとデータ変換の助けを借りて、POJO を操作し、カスタマイズされた書式を適用し、他の Camel コンポーネントを呼び出してメッセージを変換し、上流のシステムに送信することができます。

7.1. ASN.1 データ形式オプション

ASN.1 ファイルのデータ形式は、以下に示す 3 個のオプションをサポートしています。

名前デフォルトJava タイプ説明

usingIterator

false

Boolean

asn1 ファイルに複数のエントリーがある場合には、このオプションを true に設定すると、スプリッター EIP を使用して、ストリーミングモードで反復子を使用してデータを分割できます。

clazzName

 

String

アンマーシャリング時に使用するクラスの名前

contentTypeHeader

false

Boolean

データフォーマットがデータ形式を実行できる場合は、データフォーマットの型で Content-Type ヘッダーを設定するかどうか。たとえば、XML にマーシャリングするデータ形式の場合は application/xml、JSON にマーシャリングするデータ形式の場合は JSon です。

7.2. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 4 つのオプションをサポートします。

名前説明デフォルトタイプ

camel.dataformat.asn1.clazz-name

アンマーシャリング時に使用するクラスの名前

 

String

camel.dataformat.asn1.content-type-header

データフォーマットがデータ形式を実行できる場合は、データフォーマットの型で Content-Type ヘッダーを設定するかどうか。たとえば、XML にマーシャリングするデータ形式の場合は application/xml、JSON にマーシャリングするデータ形式の場合は JSon です。

false

Boolean

camel.dataformat.asn1.enabled

asn1 データ形式の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

Boolean

camel.dataformat.asn1.using-iterator

asn1 ファイルに複数のエントリーがある場合には、このオプションを true に設定すると、スプリッター EIP を使用して、ストリーミングモードで反復子を使用してデータを分割できます。

false

Boolean

ND

7.3. Unmarshal

ASN.1 構造化メッセージを非整列化するには、3 つの異なる方法があります。(通常はバイナリーファイル)

この最初の例では、BER ファイルペイロードを OutputStream にアンマーシャリングし、モックエンドポイントに送信します。

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

2 番目の例では、Split EIP を使用して BER ファイルペイロードをバイト配列に非整列化します。分割 EIP を適用する理由は、通常、各 BER ファイルまたは (ASN.1 構造化ファイル) には処理する複数のレコードが含まれており、分割 EIP はファイル内の各レコードを実際に ASN1Primitive のインスタンスであるバイト配列として取得するのに役立つためです (bcprov-jdk15on ライブラリーでの Bouncy Castle の ASN.1 サポート) 次に、(ASN1Primitive.fromByteArray) の public static メソッドを使用して、バイト配列を ASN1Primitive に変換できます。このような例では、usingIterator=true を設定する必要があることに注意してください。

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

最後の例では、分割 EIP を使用して BER ファイルペイロードをプレーンな古い Java オブジェクトに非整列化します。分割 EIP を適用する理由は、前の例ですでに説明されています。その理由に注意して覚えておいてください。このような例では、クラスの完全修飾名または <YourObject>.class 参照をデータ形式で設定する必要もあります。ここで注意すべき重要なことは、オブジェクトは、ASN.1 構造の Java オブジェクト表現を生成する優れたツールである jasn1 コンパイラーによって生成されている必要があるということです。jasn1 コンパイラーの参照用法については、JASN.1 プロジェクトページ (https://www.openmuc.org/asn1/) を参照してください。また、maven の exec プラグインを使用してコンパイラーを呼び出す方法も参照してください。たとえば、このデータ形式の単体テストでは、サンプルの ASN.1 構造体 (TestSMSBerCdr.asn1) が src/test/resources/asn1_structure に追加されます。jasn1 コンパイラーが呼び出され、Java オブジェクトの表現 が ${basedir}/target/generated/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.4. 依存関係

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 Component

重要

Karaf の camel-as2 コンポーネントは、テクノロジープレビュー機能のみです。テクノロジープレビュー機能は、Red Hat 製品のサービスレベルアグリーメント (SLA) の対象外であり、機能的に完全ではないことがあります。Red Hat は実稼働環境でこれらを使用することを推奨していません。

テクノロジープレビューの機能は、最新の製品機能をいち早く提供して、開発段階で機能のテストを行い、フィードバックを提供していただくことを目的としています。Red Hat のテクノロジープレビュー機能のサポート範囲に関する詳細は、テクノロジープレビュー機能のサポート範囲 を参照してください。

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 コンポーネントは、以下に示す 2 個のオプションをサポートしています。

名前説明デフォルトタイプ

configuration (common)

共有設定を使用するには

 

AS2Configuration

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

AS2 エンドポイントは、URI 構文を使用して設定されます。

as2:apiName

パスおよびクエリーパラメーターを使用します。

8.2.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

apiName

必須 操作の種類

 

AS2ApiName

8.2.2. クエリーパラメーター (30 パラメーター)

名前説明デフォルトタイプ

as2From (common)

AS2 メッセージの AS2From ヘッダーの値。

 

String

as2MessageStructure (common)

AS2 メッセージの構造。PLAIN - 暗号化なし、署名なし、SIGNED - 暗号化なし、署名、ENCRYPTED - 暗号化あり、署名なし、ENCRYPTED_SIGNED - 暗号化あり、署名

 

AS2MessageStructure

as2To (common)

AS2 メッセージの AS2To ヘッダーの値。

 

String

as2Version (common)

AS2 プロトコルのバージョン。

1.1

String

clientFqdn (common)

クライアントの完全修飾ドメイン名 (FQDN)。エンドポイントによって送信されるメッセージ ID で使用されます。

camel.apache.org

String

dispositionNotificationTo (common)

Disposition-Notification-To ヘッダーの値。このパラメーターに値を割り当てると、AS2 メッセージのメッセージ処理通知 (MDN) が要求されます。

 

String

ediMessageTransferEncoding (common)

EDI メッセージの転送エンコーディング。

 

String

ediMessageType (common)

EDI メッセージのコンテンツタイプ。application/edifact、application/edi-x12、application/edi-consent のいずれか

 

ContentType

encryptingAlgorithm (common)

EDI メッセージの暗号化に使用されるアルゴリズム。

 

AS2EncryptionAlgorithm

encryptingCertificateChain (common)

EDI メッセージの暗号化に使用される証明書のチェーン。

 

Certificate[]

encryptingPrivateKey (common)

EDI メッセージの暗号化に使用されるキー。

 

PrivateKey

from (common)

AS2 メッセージの From ヘッダーの値。

 

String

inBody (common)

ボディにて交換で渡されるパラメーターの名前を設定します。

 

String

methodName (common)

必須: 選択した操作に使用するサブ操作

 

String

requestUri (common)

EDI メッセージのリクエスト URI。

/

String

server (common)

AS2 サーバーを識別するサーバーメッセージヘッダーに含まれる値。

Camel AS2 サーバーエンドポイント

String

serverFqdn (common)

サーバーの完全修飾ドメイン名 (FQDN)。エンドポイントによって送信されるメッセージ ID で使用されます。

camel.apache.org

String

serverPortNumber (common)

サーバーのポート番号。

 

Integer

signedReceiptMicAlgorithms (common)

メッセージ破棄通知 (MDN) で返されるメッセージ整合性チェック (MIC) を生成するために要求されたアルゴリズムのリスト (優先順)。

 

String[]

signingAlgorithm (common)

EDI メッセージの署名に使用されるアルゴリズム。

 

AS2SignatureAlgorithm

signingCertificateChain (common)

EDI メッセージの署名に使用される証明書のチェーン。

 

Certificate[]

signingPrivateKey (common)

EDI メッセージの署名に使用される鍵。

 

PrivateKey

subject (common)

AS2 メッセージの Subject ヘッダーの値。

 

String

targetHostname (common)

ターゲットホストのホスト名 (IP または DNS 名)。

 

String

targetPortNumber (common)

ターゲットホストのポート番号。-1 はスキームのデフォルトポートを示します。

 

Integer

userAgent (common)

AS2 ユーザーエージェントを識別する User-Agent メッセージヘッダーに含まれる値。

Camel AS2 クライアントエンドポイント

String

bridgeErrorHandler (consumer)

コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

false

boolean

exceptionHandler (consumer)

コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

 

ExceptionHandler

exchangePattern (consumer)

コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。

 

ExchangePattern

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

8.3. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 28 のオプションをサポートします。

名前説明デフォルトタイプ

camel.component.as2.configuration.api-name

実行する操作の種類

 

AS2ApiName

camel.component.as2.configuration.as2-from

AS2 メッセージの AS2From ヘッダーの値。

 

String

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

AS2 メッセージの構造。PLAIN - 暗号化なし、署名なし、SIGNED - 暗号化なし、署名、ENCRYPTED - 暗号化あり、署名なし、ENCRYPTED_SIGNED - 暗号化あり、署名

 

AS2MessageStructure

camel.component.as2.configuration.as2-to

AS2 メッセージの AS2To ヘッダーの値。

 

String

camel.component.as2.configuration.as2-version

AS2 プロトコルのバージョン。

1.1

String

camel.component.as2.configuration.client-fqdn

クライアントの完全修飾ドメイン名 (FQDN)。エンドポイントによって送信されるメッセージ ID で使用されます。

camel.apache.org

String

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

Disposition-Notification-To ヘッダーの値。このパラメーターに値を割り当てると、AS2 メッセージのメッセージ処理通知 (MDN) が要求されます。

 

String

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

EDI メッセージの転送エンコーディング。

 

String

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 ヘッダーの値。

 

String

camel.component.as2.configuration.method-name

選択した操作に使用するサブ操作

 

String

camel.component.as2.configuration.request-uri

EDI メッセージのリクエスト URI。

/

String

camel.component.as2.configuration.server

AS2 サーバーを識別するサーバーメッセージヘッダーに含まれる値。

Camel AS2 サーバーエンドポイント

String

camel.component.as2.configuration.server-fqdn

サーバーの完全修飾ドメイン名 (FQDN)。エンドポイントによって送信されるメッセージ ID で使用されます。

camel.apache.org

String

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

サーバーのポート番号。

 

Integer

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

メッセージ破棄通知 (MDN) で返されるメッセージ整合性チェック (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 メッセージの Subject ヘッダーの値。

 

String

camel.component.as2.configuration.target-hostname

ターゲットホストのホスト名 (IP または DNS 名)。

 

String

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

ターゲットホストのポート番号。-1 はスキームのデフォルトポートを示します。

 

Integer

camel.component.as2.configuration.user-agent

AS2 ユーザーエージェントを識別する User-Agent メッセージヘッダーに含まれる値。

Camel AS2 クライアントエンドポイント

String

camel.component.as2.enabled

as2 コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

Boolean

camel.component.as2.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

8.4. クライアントエンドポイント:

クライアントエンドポイントは、エンドポイント 接頭辞 client の後にメソッドの名前と次に説明する関連オプションを使用します。エンドポイント URI には接頭辞 client が含まれている必要があります。

as2://client/method?[options]

必須ではないエンドポイントオプションは [] で示されます。エンドポイントに必須のオプションがない場合、[] オプションのセットの 1 つを提供する必要があります。プロデューサエンドポイントは、特別なオプション inBody を 使用することもできます。このオプションには、値が Camel Exchange In メッセージに含まれるエンドポイントオプションの名前が含まれている必要があります。

エンドポイントオプションは、エンドポイント URI またはメッセージヘッダーで動的に指定できます。メッセージヘッダー名は CamelAS2.<option> の形式である必要があります。inBody オプションはメッセージヘッダーをオーバーライドすることに注意してください。つまり、エンドポイントオプション inBody=optionCamelAS2.option ヘッダーをオーバーライドします。

エンドポイント URI またはメッセージヘッダーのオプション defaultRequest に値が指定されていない場合は、null と見なされます。null 値は、他のオプションが一致するエンドポイントを満たさない場合にのみ使用されることに注意してください。

AS2 API エラーの場合、エンドポイントは org.apache.http.HttpException から生成された例外が原因で RuntimeCamelException を出力します。

メソッドオプション結果ボディーのタイプ

send

ediMessage、requestUri、subject、from、as2From、as2To、as2MessageStructure、ediMessageContentType、ediMessageTransferEncoding、dispositionNotificationTo、signedReceiptMicAlgorithms

org.apache.http.protocol.HttpCoreContext

クライアント の URI オプション

名前タイプ

ediMessage

String

requestUri

String

subject

String

from

String

as2From

String

as2To

String

as2MessageStructure

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

ediMessageContentType

String

ediMessageTransferEncoding

String

dispositionNotificationTo

String

signedReceiptMicAlgorithms

String[]

8.5. サーバーエンドポイント:

サーバーエンドポイントは、エンドポイント 接頭辞 server を使用し、その後にメソッドの名前と次に説明する関連オプションを続けます。エンドポイント URI には、接頭辞 server が 含まれている必要があります。

as2://server/method?[options]

必須ではないエンドポイントオプションは [] で示されます。エンドポイントに必須のオプションがない場合、[] オプションのセットの 1 つを提供する必要があります。プロデューサエンドポイントは、特別なオプション inBody を 使用することもできます。このオプションには、値が Camel Exchange In メッセージに含まれるエンドポイントオプションの名前が含まれている必要があります。

エンドポイントオプションは、エンドポイント URI またはメッセージヘッダーで動的に指定できます。メッセージヘッダー名は CamelAS2.<option> の形式である必要があります。inBody オプションはメッセージヘッダーをオーバーライドすることに注意してください。つまり、エンドポイントオプション inBody=optionCamelAS2.option ヘッダーをオーバーライドします。

エンドポイント URI またはメッセージヘッダーのオプション defaultRequest に値が指定されていない場合は、null と見なされます。null 値は、他のオプションが一致するエンドポイントを満たさない場合にのみ使用されることに注意してください。

AS2 API エラーの場合、エンドポイントは org.apache.http.HttpException から生成された例外が原因で RuntimeCamelException を出力します。

メソッドオプション結果ボディーのタイプ

listen

requestUriPattern

org.apache.http.protocol.HttpCoreContext

サーバー の URI オプション

名前タイプ

requestUriPattern

String

第9章 アスタリスクコンポーネント

Camel バージョン 2.18 以降で利用可能

asterisk: コンポーネントを使用すると、asterisk-java を使用して、Asterisk PBX サーバー 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 個のパラメーター):

名前説明デフォルトタイプ

name

必須 論理名

 

String

9.2.2. クエリーパラメーター (8 つのパラメーター):

名前説明デフォルトタイプ

hostname (common)

必須 アスタリスクサーバーのホスト名

 

String

password (common)

必須 ログインパスワード

 

String

username (common)

必須 ログインユーザー名

 

String

bridgeErrorHandler (consumer)

コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

false

boolean

exceptionHandler (consumer)

コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

 

ExceptionHandler

exchangePattern (consumer)

コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。

 

ExchangePattern

action (producer)

キューのステータス、sip ピア、または拡張状態の取得など、実行するアクション。

 

AsteriskAction

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

9.3. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 2 つのオプションをサポートします。

名前説明デフォルトタイプ

camel.component.asterisk.enabled

アスタリスクコンポーネントを有効にする

true

Boolean

camel.component.asterisk.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

9.4. アクション

サポートされているアクションは次のとおりです。

  • QUEUE_STATUS、キューのステータス
  • SIP_PEERS、SIP ピアの一覧表示
  • EXTENSION_STATE、拡張ステータスをチェック

第10章 Atmos コンポーネント

Camel バージョン 2.15 以降で利用可能

Camel-Atmos は、Atmos Client を使用して ViPR オブジェクトデータサービスを操作できるようにする Apache Camel コンポーネントです。

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

10.1. オプション

Atmos コンポーネントは、次に示す 5 個のオプションをサポートしています。

名前説明デフォルトタイプ

fullTokenId (security)

Atmos クライアントに渡すトークン ID

 

String

secretKey (security)

Atmos クライアントに渡す秘密鍵

 

String

uri (advanced)

Atmos クライアントが接続するサーバーの URI

 

String

sslValidation (security)

Atmos クライアントが SSL 検証を実行する必要があるかどうか

false

boolean

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

Atmos エンドポイントは、URI 構文を使用して設定されます。

atmos:name/operation

パスおよびクエリーパラメーターを使用します。

10.1.1. パスパラメーター (2 個のパラメーター):

名前説明デフォルトタイプ

name

Atmos 名

 

String

operation

実行するために 必要な 操作

 

AtmosOperation

10.1.2. クエリーパラメーター (12 パラメーター)

名前説明デフォルトタイプ

enableSslValidation (common)

Atmos SSL 検証

false

boolean

fullTokenId (common)

Atmos クライアントの fullTokenId

 

String

localPath (common)

ファイルを置くローカルパス

 

String

newRemotePath (common)

ファイル移動時の Atmos 上の新しいパス

 

String

query (common)

Atmos での検索クエリー

 

String

remotePath (common)

Atmos でファイルを配置する場所

 

String

secretKey (common)

Atmos 共有シークレット

 

String

uri (common)

Atomos サーバー uri

 

String

bridgeErrorHandler (consumer)

コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

false

boolean

exceptionHandler (consumer)

コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

 

ExceptionHandler

exchangePattern (consumer)

コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。

 

ExchangePattern

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

10.2. Spring Boot Auto-Configuration

コンポーネントは、以下に示す 6 つのオプションをサポートします。

名前説明デフォルトタイプ

camel.component.atmos.enabled

atmos コンポーネントを有効にする

true

Boolean

camel.component.atmos.full-token-id

Atmos クライアントに渡すトークン ID

 

String

camel.component.atmos.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

camel.component.atmos.secret-key

Atmos クライアントに渡す秘密鍵

 

String

camel.component.atmos.ssl-validation

Atmos クライアントが SSL 検証を実行する必要があるかどうか

false

Boolean

camel.component.atmos.uri

Atmos クライアントが接続するサーバーの URI

 

String

10.3. 依存関係

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.4. 統合

atmos の統合を見ると、ScheduledPollConsumer の一種である GetConsumer という 1 つのタイプのコンシューマーがあります。

  • Get

一方、生産者には 4 つのタイプがあります。

  • Get
  • Del
  • Move
  • Put

10.5. 例

これらの例は、テストから取得されます。

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

ここでは、これはコンシューマーの例です。remotePath は、データが読み取られる場所からのパスを表し、camel exchange をプロデューサに渡します。その下で、このコンポーネントは、この操作と他のすべての操作に atmos クライアント API を使用します。

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

これがプロデューサーのサンプルです。remotePath は、ViPR オブジェクトデータサービスで操作が発生するパスを表します。プロデューサーでは、操作 (GetDelMovePut) が ViPR オブジェクトデータサービスで実行され、結果が camel exchange のヘッダーに設定されます。

操作に関しては、次のヘッダーが camel exchange に設定されています

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

10.6. 関連項目

  • Configuring Camel (Camel の設定)
  • コンポーネント
  • エンドポイント
  • スタートガイド

第11章 Atmosphere Websocket コンポーネント

Camel バージョン 2.14 以降で利用可能

Attention-websocket: コンポーネントは、Websocket を介して外部クライアントと通信するサーブレットに 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 オプション

Atmosphere Websocket コンポーネントは、以下に示す 9 個のオプションをサポートしています。

名前説明デフォルトタイプ

servletName (consumer)

使用するサーブレットのデフォルト名。デフォルト名は CamelServlet です。

CamelServlet

String

httpRegistry (consumer)

カスタム org.apache.camel.component.servlet.HttpRegistry を使用します。

 

HttpRegistry

attachmentMultipart Binding (consumer)

Camel エクスチェンジで multipart/form-data を添付として自動的にバインドするかどうか。オプション attachmentMultipartBinding=true と disableStreamCache=false は一緒に使用できません。AttachmentMultipartBinding を使用するには、disableStreamCache を削除します。サーブレットの使用時にこれを有効にするには、サーブレット固有の設定が必要になる場合があるため、これはデフォルトでオフになっています。

false

boolean

fileNameExtWhitelist (consumer)

アップロードされたファイルを受け入れるための受け入れられたファイル名拡張子のホワイトリスト。複数の拡張子は、txt、xml のようにコンマで区切ることができます。

 

String

httpBinding (advanced)

カスタム HttpBinding を使用して、Camel メッセージと HttpClient との間のマッピングを制御します。

 

HttpBinding

httpConfiguration (advanced)

共有 HttpConfiguration を基本設定として使用するには、以下を行います。

 

HttpConfiguration

allowJavaSerialized Object (advanced)

リクエストが context-type=application/x-java-serialized-object を使用する場合に Java シリアル化を許可するかどうか。これは、デフォルトでオフになっています。これを有効にすると、Java が受信データをリクエストから Java にデシリアライズし、セキュリティー上のリスクが生じる可能性があることに注意してください。

false

boolean

headerFilterStrategy (filter)

カスタムの org.apache.camel.spi.HeaderFilterStrategy を使用して、Camel メッセージとの間でヘッダーをフィルターします。

 

HeaderFilterStrategy

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

Atmosphere Websocket エンドポイントは、URI 構文を使用して設定されます。

atmosphere-websocket:servicePath

パスおよびクエリーパラメーターを使用します。

11.1.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

servicePath

必須 Websocket エンドポイントの名前

 

String

11.1.2. クエリーパラメーター (38 パラメーター)

名前説明デフォルトタイプ

chunked (common)

このオプションが false の場合、サーブレットは HTTP ストリーミングを無効にし、応答に content-length ヘッダーを設定します。

true

boolean

disableStreamCache (common)

サーブレットからの生の入力ストリームがキャッシュされるかどうかを決定します (Camel はストリームをメモリー内/ファイルへのオーバーフロー、ストリームキャッシュに読み込みます)。デフォルトでは、Camel はサーブレット入力ストリームをキャッシュして複数回の読み取りをサポートし、Camel がストリームからすべてのデータを取得できるようにします。ただし、ファイルやその他の永続ストアに直接ストリーミングするなど、生のストリームにアクセスする必要がある場合は、このオプションを true に設定できます。ストリームの複数回の読み取りをサポートするためにこのオプションが false の場合、DefaultHttpBinding は要求入力ストリームをストリームキャッシュにコピーし、それをメッセージ本文に入れます。サーブレットを使用してエンドポイントをブリッジ/プロキシーする場合、メッセージペイロードを複数回読み取る必要がない場合は、このオプションを有効にしてパフォーマンスを向上させることを検討してください。http/http4 プロデューサーは、デフォルトでレスポンスボディーストリームをキャッシュします。このオプションを true に設定すると、プロデューサは応答本文ストリームをキャッシュせず、応答ストリームをそのままメッセージ本文として使用します。

false

boolean

headerFilterStrategy (common)

カスタムの HeaderFilterStrategy を使用して、Camel メッセージとの間でヘッダーをフィルタリングします。

 

HeaderFilterStrategy

sendToAll (common)

すべてに送信する (ブロードキャスト) か、単一の受信者に送信するか。

false

boolean

transferException (common)

有効にすると、エクスチェンジがコンシューマー側で処理に失敗し、発生した例外が application/x-java-serialized-object コンテンツタイプとして応答でシリアライズされた場合に、例外がシリアライズされました。プロデューサー側では、例外がデシリアライズされ、HttpOperationFailedException ではなくそのまま出力されます。原因となった例外はシリアライズする必要があります。これは、デフォルトでオフになっています。これを有効にすると、Java が受信データをリクエストから Java にデシリアライズし、セキュリティー上のリスクが生じる可能性があることに注意してください。

false

boolean

useStreaming (common)

ストリーミングを有効にして、データを複数のテキストフラグメントとして送信します。

false

boolean

httpBinding (common)

カスタム HttpBinding を使用して、Camel メッセージと HttpClient との間のマッピングを制御します。

 

HttpBinding

async (consumer)

非同期モードで動作するようにコンシューマーを設定します

false

boolean

bridgeErrorHandler (consumer)

コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

false

boolean

httpMethodRestrict (consumer)

GET/POST/PUT など、HttpMethod が一致する場合にのみ消費を許可するために使用されます。複数のメソッドをコンマで区切って指定できます。

 

String

matchOnUriPrefix (consumer)

完全に一致するものが見つからない場合に、コンシューマーが URI 接頭辞を照合してターゲットコンシューマーを見つけようとするかどうか。

false

boolean

responseBufferSize (consumer)

javax.servlet.ServletResponse.

 

Integer

servletName (consumer)

使用するサーブレットの名前

CamelServlet

String

attachmentMultipartBinding (consumer)

Camel エクスチェンジで multipart/form-data を添付として自動的にバインドするかどうか。オプション attachmentMultipartBinding=true と disableStreamCache=false は一緒に使用できません。AttachmentMultipartBinding を使用するには、disableStreamCache を削除します。サーブレットの使用時にこれを有効にするには、サーブレット固有の設定が必要になる場合があるため、これはデフォルトでオフになっています。

false

boolean

eagerCheckContentAvailable (consumer)

content-length ヘッダーが 0 または存在しない場合に、HTTP リクエストにコンテンツがあるかどうかを先行チェックするかどうか。これは、HTTP クライアントがストリーミングデータを送信しない場合に有効にすることができます。

false

boolean

exceptionHandler (consumer)

コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

 

ExceptionHandler

exchangePattern (consumer)

コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。

 

ExchangePattern

fileNameExtWhitelist (consumer)

アップロードされたファイルを受け入れるための受け入れられたファイル名拡張子のホワイトリスト。複数の拡張子は、txt、xml のようにコンマで区切ることができます。

 

String

optionsEnabled (consumer)

このサーブレットコンシューマーに対して HTTP OPTIONS を有効にするかどうかを指定します。デフォルトでは、OPTIONS はオフになっています。

false

boolean

traceEnabled (consumer)

このサーブレットコンシューマーに対して HTTP TRACE を有効にするかどうかを指定します。デフォルトでは、TRACE はオフになっています。

false

boolean

bridgeEndpoint (producer)

オプションが true の場合、HttpProducer は Exchange.HTTP_URI ヘッダーを無視し、エンドポイントの URI を要求に使用します。オプション throwExceptionOnFailure を false に設定して、HttpProducer がすべての障害応答を送り返すようにすることもできます。

false

boolean

connectionClose (producer)

Connection Close ヘッダーを HTTP 要求に追加する必要があるかどうかを指定します。デフォルトでは、connectionClose は 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 ヘッダーを現在の Exchange Host ヘッダーに含まれる値に設定します。これは、ダウンストリームサーバーが受信した Host ヘッダーにアップストリームクライアントが呼び出した URL を反映させたいリバースプロキシーアプリケーションで役立ちます。Host ヘッダーを使用するアプリケーションが、プロキシーされたサービスの正確な URL を生成できるようにします。

false

boolean

throwExceptionOnFailure (producer)

リモートサーバーからの応答が失敗した場合に HttpOperationFailedException を出力することを無効にするオプション。これにより、HTTP ステータスコードに関係なくすべての応答を取得できます。

true

boolean

cookieHandler (producer)

HTTP セッションを維持するようにクッキーハンドラーを設定します。

 

CookieHandler

okStatusCodeRange (producer)

正常な応答と見なされるステータスコード。値は含まれます。複数の範囲をコンマで区切って定義できます (例: 200-204,209,301-304)。各範囲は、ダッシュを含む 1 つの数字または from-to である必要があります。

200-299

String

urlRewrite (producer)

非推奨 カスタム org.apache.camel.component.http.UrlRewrite を参照して、エンドポイントをブリッジ/プロキシーするときに URL を書き換えることができます。詳細は、http://camel.apache.org/urlrewrite.html を参照してください。

 

UrlRewrite

mapHttpMessageBody (advanced)

このオプションが true の場合、交換の IN exchange ボディは HTTP ボディにマップされます。これを false に設定すると、HTTP マッピングが回避されます。

true

boolean

mapHttpMessageFormUrl EncodedBody (advanced)

このオプションが true の場合、交換の IN exchange Form Encoded ボディは HTTP にマップされます。これを false に設定すると、HTTP Form Encoded ボディマッピングが回避されます。

true

boolean

mapHttpMessageHeaders (advanced)

このオプションが true の場合、交換の IN exchange ヘッダーは HTTP ヘッダーにマップされます。これを false に設定すると、HTTP ヘッダーのマッピングが回避されます。

true

boolean

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

proxyAuthScheme (proxy)

使用するプロキシー認証スキーム

 

String

proxyHost (proxy)

使用するプロキシーホスト名

 

String

proxyPort (proxy)

使用するプロキシーポート

 

int

authHost (security)

NTML で使用する認証ホスト

 

String

11.2. Spring Boot Auto-Configuration

コンポーネントは、以下に示す 10 個のオプションをサポートします。

名前説明デフォルトタイプ

camel.component.atmosphere-websocket.allow-java-serialized-object

リクエストが context-type=application/x-java-serialized-object を使用する場合に Java シリアル化を許可するかどうか。これは、デフォルトでオフになっています。これを有効にすると、Java が受信データをリクエストから Java にデシリアライズし、セキュリティー上のリスクが生じる可能性があることに注意してください。

false

Boolean

camel.component.atmosphere-websocket.attachment-multipart-binding

Camel エクスチェンジで multipart/form-data を添付として自動的にバインドするかどうか。オプション attachmentMultipartBinding=true と disableStreamCache=false は一緒に使用できません。AttachmentMultipartBinding を使用するには、disableStreamCache を削除します。サーブレットの使用時にこれを有効にするには、サーブレット固有の設定が必要になる場合があるため、これはデフォルトでオフになっています。

false

Boolean

camel.component.atmosphere-websocket.enabled

atmosphere -websocket コンポーネントを有効にする

true

Boolean

camel.component.atmosphere-websocket.file-name-ext-whitelist

アップロードされたファイルを受け入れるための受け入れられたファイル名拡張子のホワイトリスト。複数の拡張子は、txt、xml のようにコンマで区切ることができます。

 

String

camel.component.atmosphere-websocket.header-filter-strategy

カスタムの org.apache.camel.spi.HeaderFilterStrategy を使用して、Camel メッセージとの間でヘッダーをフィルターします。このオプションは org.apache.camel.spi.HeaderFilterStrategy タイプです。

 

String

camel.component.atmosphere-websocket.http-binding

カスタム HttpBinding を使用して、Camel メッセージと HttpClient との間のマッピングを制御します。オプションは org.apache.camel.http.common.HttpBinding タイプです。

 

String

camel.component.atmosphere-websocket.http-configuration

共有 HttpConfiguration を基本設定として使用するには、以下を行います。オプションは org.apache.camel.http.common.HttpConfiguration タイプです。

 

String

camel.component.atmosphere-websocket.http-registry

カスタム org.apache.camel.component.servlet.HttpRegistry を使用します。オプションは org.apache.camel.component.servlet.HttpRegistry タイプです。

 

String

camel.component.atmosphere-websocket.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

camel.component.atmosphere-websocket.servlet-name

使用するサーブレットのデフォルト名。デフォルト名は CamelServlet です。

CamelServlet

String

11.3. URI 形式

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

11.4. Websocket を介したデータの読み取りと書き込み

atmopshere-websocket エンドポイントは、エンドポイントがそれぞれプロデューサーまたはコンシューマーとして設定されているかどうかに応じて、ソケットにデータを書き込むか、ソケットから読み取ることができます。

11.5. データを読み書きするための 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.6. 関連項目

  • Configuring Camel (Camel の設定)
  • コンポーネント
  • エンドポイント
  • スタートガイド
  • SERVLET
  • AHC-WS * Websocket

第12章 Atom コンポーネント

Camel バージョン 1.2 以降で利用可能

atom: コンポーネントは、Atom フィードのポーリングに使用されます。

デフォルトでは、Camel は 60 秒ごとにフィードをポーリングします。
注記: コンポーネントは現在、ポーリング (consuming) フィードのみをサポートしています。

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 個のパラメーター):

名前説明デフォルトタイプ

feedUri

必須 ポーリングするフィードへの URI。

 

String

12.2.2. クエリーパラメーター ( 27 パラメーター)

名前説明デフォルトタイプ

bridgeErrorHandler (consumer)

コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

false

boolean

feedHeader (consumer)

フィードオブジェクトをヘッダーとして追加するかどうかを設定します

true

boolean

filter (consumer)

エントリーのフィルタリングを使用するかどうかを設定します。

true

boolean

lastUpdate (consumer)

Atom フィードからのエントリーのフィルタリングに使用するタイムスタンプを設定します。このオプションは、splitEntries と組み合わせてのみ使用できます。

 

Date

password (consumer)

HTTP フィードからのポーリング時に Basic 認証に使用するパスワードを設定します

 

String

sendEmptyMessageWhenIdle (consumer)

ポーリングコンシューマーがファイルをポーリングしなかった場合、このオプションを有効にして、代わりに空のメッセージ (ボディーなし) を送信できます。

false

boolean

sortEntries (consumer)

エントリーを公開日順にソートするかどうかを設定します。splitEntries = true の場合のみ機能します。

false

boolean

splitEntries (consumer)

エントリーを個別に送信するか、フィード全体を 1 つのメッセージとして送信するかを設定します

true

boolean

throttleEntries (consumer)

1 回のフィードポーリングで識別されたすべてのエントリーをすぐに配信するかどうかを設定します。true の場合、consumer.delay ごとに 1 つのエントリーのみが処理されます。splitEntries = true の場合にのみ適用されます。

true

boolean

username (consumer)

HTTP フィードからのポーリング時に Basic 認証に使用されるユーザー名を設定します

 

String

exceptionHandler (consumer)

コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

 

ExceptionHandler

exchangePattern (consumer)

コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。

 

ExchangePattern

pollStrategy (consumer)

プラグ可能な org.apache.camel.PollingConsumerPollingStrategy を使用すると、エクスチェンジが作成され、Camel でルーティングされる前に、通常はポーリング操作中に発生するエラー処理を制御するカスタム実装が提供できます。

 

PollingConsumerPoll Strategy

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

backoffErrorThreshold (scheduler)

backoffMultipler が開始する前に発生する必要がある後続のエラーポーリング (エラーによって失敗した) の数。

 

int

backoffIdleThreshold (scheduler)

backoffMultipler が開始する前に発生する必要がある後続のアイドルポーリングの数。

 

int

backoffMultiplier (scheduler)

後続のアイドル状態/エラーが連続して発生した場合に、スケジュールされたポーリングコンシューマーのバックオフを許可します。乗数は、実際に次の試行が行われる前にスキップされるポーリングの数です。このオプションが使用されている場合は、backoffIdleThreshold や backoffErrorThreshold も設定する必要があります。

 

int

delay (scheduler)

次のポーリングまでの時間 (ミリ秒単位)。60s (60 秒)、5m30s (5 分 30 秒)、1h (1 時間) などの単位を使用して時間値を指定することもできます。

500

long

greedy (scheduler)

greedy が有効で、以前の実行が 1 つ以上のメッセージをポーリングした場合、ScheduledPollConsumer は即座に再度実行されます。

false

boolean

initialDelay (scheduler)

最初のポーリングが開始されるまでの時間 (ミリ秒単位)。60s (60 秒)、5m30s (5 分 30 秒)、1h (1 時間) などの単位を使用して時間値を指定することもできます。

1000

long

runLoggingLevel (scheduler)

コンシューマーはポーリング時に開始/完了のログ行を記録します。このオプションを使用すると、ログレベルを設定できます。

TRACE

LoggingLevel

scheduledExecutorService (scheduler)

コンシューマーに使用するカスタム/共有スレッドプールを設定できます。デフォルトでは、各コンシューマーに独自の単一スレッドのスレッドプールがあります。

 

ScheduledExecutor Service

scheduler (scheduler)

camel-spring または camel-quartz2 コンポーネントから cron スケジューラーを使用します。

none

ScheduledPollConsumer Scheduler

schedulerProperties (scheduler)

カスタムスケジューラーまたは Quartz2 や Spring ベースのスケジューラーを使用する場合に、追加のプロパティーを設定します。

 

Map

startScheduler (scheduler)

スケジューラーを自動起動するかどうか。

true

boolean

timeUnit (scheduler)

initialDelay および delay オプションの時間単位。

MILLISECONDS

TimeUnit

useFixedDelay (scheduler)

固定遅延または固定レートを使用するかどうかを制御します。詳細は、JDK の ScheduledExecutorService を参照してください。

true

boolean

12.3. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 2 つのオプションをサポートします。

名前説明デフォルトタイプ

camel.component.atom.enabled

atom コンポーネントを有効にする

true

Boolean

camel.component.atom.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

URI には、?option=value&option=value&…​ の形式でクエリーオプションを追加できます。

12.4. Exchange データ形式

Camel は、返された Exchange の In ボディーにエントリーを設定します。splitEntries フラグに応じて、Camel は 1 つの Entry または List<Entry> を返します。

オプション動作

splitEntries

true

現在処理中のフィードから 1 つのエントリーのみが設定されます: exchange.in.body (Entry)

splitEntries

false

フィードからのエントリーの全リストが設定されます: exchange.in.body (List<Entry>)

Camel は、In ヘッダーに Feed オブジェクトを設定できます (これを無効にするには、feedHeader オプションを参照してください)。

12.5. メッセージヘッダー

Camel atom はこれらのヘッダーを使用します。

ヘッダー説明

CamelAtomFeed

org.apache.abdera.model.Feed オブジェクトを使用すると、このヘッダーに設定されます。

12.6. サンプル

このサンプルでは、James Strachan のブログを調査します。

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

このサンプルでは、SEDA キューで気に入った良いブログのみをフィルタリングします。このサンプルは、コンテナーで実行したり、Spring を使用したりせずに、Camel をスタンドアロンでセットアップする方法も示しています。

12.7. 関連項目

  • Configuring Camel (Camel の設定)
  • コンポーネント
  • エンドポイント
  • スタートガイド
  • RSS

第13章 Atomix マップコンポーネント

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 個のオプションをサポートしています。

名前説明デフォルトタイプ

configuration (common)

共有コンポーネントの設定

 

AtomixMapConfiguration

atomix (common)

共有 AtomixClient インスタンス

 

AtomixClient

nodes (common)

AtomixClient が接続する必要のあるノード

 

List

configurationUri (common)

AtomixClient 設定へのパス

 

String

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

Atomix Map エンドポイントは、URI 構文を使用して設定されます。

atomix-map:resourceName

パスおよびクエリーパラメーターを使用します。

13.2.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

resourceName

必須 分散リソース名

 

String

13.2.2. クエリーパラメーター (18 パラメーター)

名前説明デフォルトタイプ

atomix (common)

使用する Atomix インスタンス

 

Atomix

configurationUri (common)

Atomix 設定 uri。

 

String

defaultAction (common)

これがデフォルト動作です。

PUT

Action

key (common)

ヘッダーに何も設定されていない場合に使用するキー、または特定のキーのイベントをリッスンするキー。

 

Object

nodes (common)

クラスターを設定するノードのアドレス。

 

String

resultHeader (common)

結果を届けるヘッダー。

 

String

transport (common)

Atomix トランスポートを設定します。

io.atomix.catalyst.transport.netty.NettyTransport

トランスポート

ttl (common)

リソース ttl。

 

long

bridgeErrorHandler (consumer)

コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

false

boolean

exceptionHandler (consumer)

コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

 

ExceptionHandler

exchangePattern (consumer)

コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。

 

ExchangePattern

defaultResourceConfig (advanced)

クラスター全体のデフォルトのリソース設定。

 

Properties

defaultResourceOptions (advanced)

ローカルのデフォルトリソースオプション。

 

Properties

ephemeral (advanced)

ローカルメンバーが PersistentMember としてグループに参加するかどうかを設定します。ephemeral に設定すると、ローカルメンバーは自動生成された ID を受け取るため、ローカルメンバーは無視されます。

false

boolean

readConsistency (advanced)

読み取り一貫性レベル。

 

ReadConsistency

resourceConfigs (advanced)

クラスター全体のリソース設定。

 

Map

resourceOptions (advanced)

ローカルリソースの設定

 

Map

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

13.3. Spring Boot Auto-Configuration

このコンポーネントは、以下に示す 9 のオプションをサポートします。

名前説明デフォルトタイプ

camel.component.atomix-map.atomix

共有 AtomixClient インスタンス。オプションは io.atomix.AtomixClient タイプです。

 

String

camel.component.atomix-map.configuration-uri

AtomixClient 設定へのパス

 

String

camel.component.atomix-map.configuration.default-action

これがデフォルト動作です。

 

AtomixMap$Action

camel.component.atomix-map.configuration.key

ヘッダーに何も設定されていない場合に使用するキー、または特定のキーのイベントをリッスンするキー。

 

Object

camel.component.atomix-map.configuration.result-header

結果を届けるヘッダー。

 

String

camel.component.atomix-map.configuration.ttl

リソース ttl。

 

Long

camel.component.atomix-map.enabled

atomix-map コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

Boolean

camel.component.atomix-map.nodes

AtomixClient が接続する必要のあるノード

 

List

camel.component.atomix-map.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

13.4. ヘッダー

名前タイプ説明

CamelAtomixResourceAction

AtomixMap.Action

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

実行する動作

CamelAtomixResourceKey

Object

-

操作するキー

CamelAtomixResourceValue

Object

-

Missing In Body が使用されている場合の値

CamelAtomixResourceOldValue

Object

-

古い値

CamelAtomixResourceTTL

String / long

-

エントリー TTL

CamelAtomixResourceReadConsistency

ReadConsistency

  • ATOMIC
  • ATOMIC_LEASE
  • SEQUENTIAL
  • LOCAL

読み取りの一貫性レベル

13.5. Atomix クラスターに接続するためのコンポーネントの設定

参加する Atomix クラスターのノードは、以下の例のように、エンドポイントまたはコンポーネントレベル (推奨) で設定できます。

  • エンドポイント:

    <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.6. 使用例:

  • TTL が 1 秒の要素を PUT します。

    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 メッセージングコンポーネント

Camel バージョン 2.20 以降で利用可能

camel atomix-messaging コンポーネントを使用すると、Atomix の Group Messaging を操作できます。

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 個のオプションをサポートしています。

名前説明デフォルトタイプ

configuration (common)

共有コンポーネントの設定

 

AtomixMessaging 設定

atomix (common)

共有 AtomixClient インスタンス

 

AtomixClient

nodes (common)

AtomixClient が接続する必要のあるノード

 

List

configurationUri (common)

AtomixClient 設定へのパス

 

String

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

Atomix メッセージングエンドポイントは、URI 構文を使用して設定されます。

atomix-messaging:resourceName

パスおよびクエリーパラメーターを使用します。

14.1.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

resourceName

必須 分散リソース名

 

String

14.1.2. クエリーパラメーター (19 パラメーター)

名前説明デフォルトタイプ

atomix (common)

使用する Atomix インスタンス

 

Atomix

broadcastType (common)

ブロードキャストタイプ。

ALL

BroadcastType

channelName (common)

メッセージングチャネル名

 

String

configurationUri (common)

Atomix 設定 uri。

 

String

defaultAction (common)

これがデフォルト動作です。

DIRECT

Action

memberName (common)

Atomix グループのメンバー名

 

String

nodes (common)

クラスターを設定するノードのアドレス。

 

String

resultHeader (common)

結果を届けるヘッダー。

 

String

transport (common)

Atomix トランスポートを設定します。

io.atomix.catalyst.transport.netty.NettyTransport

トランスポート

bridgeErrorHandler (consumer)

コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

false

boolean

exceptionHandler (consumer)

コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

 

ExceptionHandler

exchangePattern (consumer)

コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。

 

ExchangePattern

defaultResourceConfig (advanced)

クラスター全体のデフォルトのリソース設定。

 

Properties

defaultResourceOptions (advanced)

ローカルのデフォルトリソースオプション。

 

Properties

ephemeral (advanced)

ローカルメンバーが PersistentMember としてグループに参加するかどうかを設定します。ephemeral に設定すると、ローカルメンバーは自動生成された ID を受け取るため、ローカルメンバーは無視されます。

false

boolean

readConsistency (advanced)

読み取り一貫性レベル。

 

ReadConsistency

resourceConfigs (advanced)

クラスター全体のリソース設定。

 

Map

resourceOptions (advanced)

ローカルリソースの設定

 

Map

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

14.2. Spring Boot Auto-Configuration

コンポーネントは、以下に示す 10 個のオプションをサポートします。

名前説明デフォルトタイプ

camel.component.atomix-messaging.atomix

共有 AtomixClient インスタンス。オプションは io.atomix.AtomixClient タイプです。

 

String

camel.component.atomix-messaging.configuration-uri

AtomixClient 設定へのパス

 

String

camel.component.atomix-messaging.configuration.broadcast-type

ブロードキャストタイプ。

 

AtomixMessaging$ BroadcastType

camel.component.atomix-messaging.configuration.channel-name

メッセージングチャネル名

 

String

camel.component.atomix-messaging.configuration.default-action

これがデフォルト動作です。

 

AtomixMessaging$Action

camel.component.atomix-messaging.configuration.member-name

Atomix グループのメンバー名

 

String

camel.component.atomix-messaging.configuration.result-header

結果を届けるヘッダー。

 

String

camel.component.atomix-messaging.enabled

atomix-messaging コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

Boolean

camel.component.atomix-messaging.nodes

AtomixClient が接続する必要のあるノード

 

List

camel.component.atomix-messaging.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

第15章 Atomix MultiMap Component

Camel バージョン 2.20 以降で利用可能

camel atomix-multimap コンポーネントを使用すると、AtomixDistributed 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個のオプションをサポートしています。

名前説明デフォルトタイプ

configuration (consumer)

共有コンポーネントの設定

 

AtomixMultiMap Configuration

atomix (consumer)

共有 AtomixClient インスタンス

 

AtomixClient

nodes (consumer)

AtomixClient が接続する必要のあるノード

 

List

configurationUri (consumer)

AtomixClient 設定へのパス

 

String

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

Atomix MultiMap エンドポイントは、URI 構文を使用して設定されます。

atomix-multimap:resourceName

パスおよびクエリーパラメーターを使用します。

15.1.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

resourceName

必須 分散リソース名

 

String

15.1.2. クエリーパラメーター (18 パラメーター)

名前説明デフォルトタイプ

atomix (consumer)

使用する Atomix インスタンス

 

Atomix

bridgeErrorHandler (consumer)

コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

false

boolean

configurationUri (consumer)

Atomix 設定 uri。

 

String

defaultAction (consumer)

これがデフォルト動作です。

PUT

Action

key (consumer)

ヘッダーに何も設定されていない場合に使用するキー、または特定のキーのイベントをリッスンするキー。

 

Object

nodes (consumer)

クラスターを設定するノードのアドレス。

 

String

resultHeader (consumer)

結果を届けるヘッダー。

 

String

transport (consumer)

Atomix トランスポートを設定します。

io.atomix.catalyst.transport.netty.NettyTransport

トランスポート

ttl (consumer)

リソース ttl。

 

long

exceptionHandler (consumer)

コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

 

ExceptionHandler

exchangePattern (consumer)

コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。

 

ExchangePattern

defaultResourceConfig (advanced)

クラスター全体のデフォルトのリソース設定。

 

Properties

defaultResourceOptions (advanced)

ローカルのデフォルトリソースオプション。

 

Properties

ephemeral (advanced)

ローカルメンバーが PersistentMember としてグループに参加するかどうかを設定します。ephemeral に設定すると、ローカルメンバーは自動生成された ID を受け取るため、ローカルメンバーは無視されます。

false

boolean

readConsistency (advanced)

読み取り一貫性レベル。

 

ReadConsistency

resourceConfigs (advanced)

クラスター全体のリソース設定。

 

Map

resourceOptions (advanced)

ローカルリソースの設定

 

Map

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

15.2. Spring Boot Auto-Configuration

このコンポーネントは、以下に示す 9 のオプションをサポートします。

名前説明デフォルトタイプ

camel.component.atomix-multimap.atomix

共有 AtomixClient インスタンス。オプションは io.atomix.AtomixClient タイプです。

 

String

camel.component.atomix-multimap.configuration-uri

AtomixClient 設定へのパス

 

String

camel.component.atomix-multimap.configuration.default-action

これがデフォルト動作です。

 

AtomixMultiMap$Action

camel.component.atomix-multimap.configuration.key

ヘッダーに何も設定されていない場合に使用するキー、または特定のキーのイベントをリッスンするキー。

 

Object

camel.component.atomix-multimap.configuration.result-header

結果を届けるヘッダー。

 

String

camel.component.atomix-multimap.configuration.ttl

リソース ttl。

 

Long

camel.component.atomix-multimap.enabled

atomix-multimap コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

Boolean

camel.component.atomix-multimap.nodes

AtomixClient が接続する必要のあるノード

 

List

camel.component.atomix-multimap.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

第16章 Atomix キューコンポーネント

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 個のオプションをサポートしています。

名前説明デフォルトタイプ

configuration (common)

共有コンポーネントの設定

 

AtomixQueue Configuration

atomix (common)

共有 AtomixClient インスタンス

 

AtomixClient

nodes (common)

AtomixClient が接続する必要のあるノード

 

List

configurationUri (common)

AtomixClient 設定へのパス

 

String

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

Atomix キューエンドポイントは、URI 構文を使用して設定されます。

atomix-queue:resourceName

パスおよびクエリーパラメーターを使用します。

16.1.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

resourceName

必須 分散リソース名

 

String

16.1.2. クエリーパラメーター (16 個のパラメーター):

名前説明デフォルトタイプ

atomix (common)

使用する Atomix インスタンス

 

Atomix

configurationUri (common)

Atomix 設定 uri。

 

String

defaultAction (common)

これがデフォルト動作です。

追加

Action

nodes (common)

クラスターを設定するノードのアドレス。

 

String

resultHeader (common)

結果を届けるヘッダー。

 

String

transport (common)

Atomix トランスポートを設定します。

io.atomix.catalyst.transport.netty.NettyTransport

トランスポート

bridgeErrorHandler (consumer)

コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

false

boolean

exceptionHandler (consumer)

コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

 

ExceptionHandler

exchangePattern (consumer)

コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。

 

ExchangePattern

defaultResourceConfig (advanced)

クラスター全体のデフォルトのリソース設定。

 

Properties

defaultResourceOptions (advanced)

ローカルのデフォルトリソースオプション。

 

Properties

ephemeral (advanced)

ローカルメンバーが PersistentMember としてグループに参加するかどうかを設定します。ephemeral に設定すると、ローカルメンバーは自動生成された ID を受け取るため、ローカルメンバーは無視されます。

false

boolean

readConsistency (advanced)

読み取り一貫性レベル。

 

ReadConsistency

resourceConfigs (advanced)

クラスター全体のリソース設定。

 

Map

resourceOptions (advanced)

ローカルリソースの設定

 

Map

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

16.2. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 7 のオプションをサポートします。

名前説明デフォルトタイプ

camel.component.atomix-queue.atomix

共有 AtomixClient インスタンス。オプションは io.atomix.AtomixClient タイプです。

 

String

camel.component.atomix-queue.configuration-uri

AtomixClient 設定へのパス

 

String

camel.component.atomix-queue.configuration.default-action

これがデフォルト動作です。

 

AtomixQueue$Action

camel.component.atomix-queue.configuration.result-header

結果を届けるヘッダー。

 

String

camel.component.atomix-queue.enabled

atomix-queue コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

Boolean

camel.component.atomix-queue.nodes

AtomixClient が接続する必要のあるノード

 

List

camel.component.atomix-queue.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

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 個のオプションをサポートしています。

名前説明デフォルトタイプ

configuration (common)

共有コンポーネントの設定

 

AtomixSetConfiguration

atomix (common)

共有 AtomixClient インスタンス

 

AtomixClient

nodes (common)

AtomixClient が接続する必要のあるノード

 

List

configurationUri (common)

AtomixClient 設定へのパス

 

String

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

Atomix Set エンドポイントは、URI 構文を使用して設定されます。

atomix-set:resourceName

パスおよびクエリーパラメーターを使用します。

17.1.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

resourceName

必須 分散リソース名

 

String

17.1.2. クエリーパラメーター (17 パラメーター)

名前説明デフォルトタイプ

atomix (common)

使用する Atomix インスタンス

 

Atomix

configurationUri (common)

Atomix 設定 uri。

 

String

defaultAction (common)

これがデフォルト動作です。

追加

Action

nodes (common)

クラスターを設定するノードのアドレス。

 

String

resultHeader (common)

結果を届けるヘッダー。

 

String

transport (common)

Atomix トランスポートを設定します。

io.atomix.catalyst.transport.netty.NettyTransport

トランスポート

ttl (common)

リソース ttl。

 

long

bridgeErrorHandler (consumer)

コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

false

boolean

exceptionHandler (consumer)

コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

 

ExceptionHandler

exchangePattern (consumer)

コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。

 

ExchangePattern

defaultResourceConfig (advanced)

クラスター全体のデフォルトのリソース設定。

 

Properties

defaultResourceOptions (advanced)

ローカルのデフォルトリソースオプション。

 

Properties

ephemeral (advanced)

ローカルメンバーが PersistentMember としてグループに参加するかどうかを設定します。ephemeral に設定すると、ローカルメンバーは自動生成された ID を受け取るため、ローカルメンバーは無視されます。

false

boolean

readConsistency (advanced)

読み取り一貫性レベル。

 

ReadConsistency

resourceConfigs (advanced)

クラスター全体のリソース設定。

 

Map

resourceOptions (advanced)

ローカルリソースの設定

 

Map

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

17.2. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 8 個のオプションをサポートします。

名前説明デフォルトタイプ

camel.component.atomix-set.atomix

共有 AtomixClient インスタンス。オプションは io.atomix.AtomixClient タイプです。

 

String

camel.component.atomix-set.configuration-uri

AtomixClient 設定へのパス

 

String

camel.component.atomix-set.configuration.default-action

これがデフォルト動作です。

 

AtomixSet$Action

camel.component.atomix-set.configuration.result-header

結果を届けるヘッダー。

 

String

camel.component.atomix-set.configuration.ttl

リソース ttl。

 

Long

camel.component.atomix-set.enabled

atomix-set コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

Boolean

camel.component.atomix-set.nodes

AtomixClient が接続する必要のあるノード

 

List

camel.component.atomix-set.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

第18章 Atomix Value コンポーネント

Camel バージョン 2.20 以降で利用可能

camel atomix-value コンポーネントを使用すると、Atomix の Distributed Value を操作できます。

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 個のオプションをサポートしています。

名前説明デフォルトタイプ

configuration (common)

共有コンポーネントの設定

 

AtomixValue Configuration

atomix (common)

共有 AtomixClient インスタンス

 

AtomixClient

nodes (common)

AtomixClient が接続する必要のあるノード

 

List

configurationUri (common)

AtomixClient 設定へのパス

 

String

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

Atomix Value エンドポイントは、URI 構文を使用して設定されます。

atomix-value:resourceName

パスおよびクエリーパラメーターを使用します。

18.1.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

resourceName

必須 分散リソース名

 

String

18.1.2. クエリーパラメーター (17 パラメーター)

名前説明デフォルトタイプ

atomix (common)

使用する Atomix インスタンス

 

Atomix

configurationUri (common)

Atomix 設定 uri。

 

String

defaultAction (common)

これがデフォルト動作です。

SET

Action

nodes (common)

クラスターを設定するノードのアドレス。

 

String

resultHeader (common)

結果を届けるヘッダー。

 

String

transport (common)

Atomix トランスポートを設定します。

io.atomix.catalyst.transport.netty.NettyTransport

トランスポート

ttl (common)

リソース ttl。

 

long

bridgeErrorHandler (consumer)

コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

false

boolean

exceptionHandler (consumer)

コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

 

ExceptionHandler

exchangePattern (consumer)

コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。

 

ExchangePattern

defaultResourceConfig (advanced)

クラスター全体のデフォルトのリソース設定。

 

Properties

defaultResourceOptions (advanced)

ローカルのデフォルトリソースオプション。

 

Properties

ephemeral (advanced)

ローカルメンバーが PersistentMember としてグループに参加するかどうかを設定します。ephemeral に設定すると、ローカルメンバーは自動生成された ID を受け取るため、ローカルメンバーは無視されます。

false

boolean

readConsistency (advanced)

読み取り一貫性レベル。

 

ReadConsistency

resourceConfigs (advanced)

クラスター全体のリソース設定。

 

Map

resourceOptions (advanced)

ローカルリソースの設定

 

Map

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

18.2. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 8 個のオプションをサポートします。

名前説明デフォルトタイプ

camel.component.atomix-value.atomix

共有 AtomixClient インスタンス。オプションは io.atomix.AtomixClient タイプです。

 

String

camel.component.atomix-value.configuration-uri

AtomixClient 設定へのパス

 

String

camel.component.atomix-value.configuration.default-action

これがデフォルト動作です。

 

AtomixValue$Action

camel.component.atomix-value.configuration.result-header

結果を届けるヘッダー。

 

String

camel.component.atomix-value.configuration.ttl

リソース ttl。

 

Long

camel.component.atomix-value.enabled

atomix-value コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

Boolean

camel.component.atomix-value.nodes

AtomixClient が接続する必要のあるノード

 

List

camel.component.atomix-value.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

第19章 Avro コンポーネント

Camel バージョン 2.10 以降で利用可能

このコンポーネントは、avro のデータ形式を提供するので、Apache Avro のバイナリーデータ形式を使用したメッセージのシリアル化と逆シリアル化が可能になります。さらに、netty または http 経由で avro を使用するためのプロデューサーとコンシューマーのエンドポイントを提供することにより、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 のドキュメント を参照してください。

ただし、スキーマファーストのアプローチは強制されず、既存のクラスのスキーマを作成できます。2.12 以降、 既存のプロトコルインターフェイスを使用して RCP 呼び出しを行うことができます。プロトコル自体にはインターフェイスを使用し、パラメーターと結果の型には POJO Bean またはプリミティブ/文字列クラスを使用する必要があります。上記のスキーマに対応するクラスの例を次に示します。

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>

別の方法として、コンテキスト内でデータ形式を指定し、ルートから参照することもできます。

    <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 データ形式を使用してアンマーシャリングできます。

19.3. Camel での Avro RPC の使用

前述のように、Avro は http や netty などの複数のトランスポートを介した RPC サポートも提供します。Camel は、これら 2 つのトランスポートのコンシューマーとプロデューサーを提供します。

avro:[transport]:[host]:[port][?options]

現在サポートされているトランスポート値は http または netty です。

2.12 以降、 URI でメッセージ名を直接指定できます。

avro:[transport]:[host]:[port][/messageName][?options]

コンシューマーの場合、これにより、同じソケットに複数のルートを接続できます。正しいルートへのディスパッチは、avro コンポーネントによって自動的に行われます。messageName が指定されていないルート (存在する場合) がデフォルトとして使用されます。

avro ipc に camel プロデューサーを使用する場合、in メッセージボディーには、avro プロトコルで指定された操作のパラメーターを含める必要があります。応答は、out メッセージの本文に追加されます。

avro ipc に camel avro コンシューマーを使用する場合と同様に、リクエストパラメーターは、作成された exchange の in メッセージ本文内に配置され、exchange が処理されると、out メッセージの本文がレスポンスとして送信されます。.

注記: デフォルトでは、コンシューマーパラメーターは配列にラップされます。パラメーターが 1 つしかない場合は、2.12 以降singleParameter URI オプションを使用して、配列をラップせずに in メッセージボディーで直接受け取ることができます。

19.4. Avro RPC URI オプション

Avro コンポーネントは、以下に示す 2 個のオプションをサポートしています。

名前説明デフォルトタイプ

configuration (advanced)

共有 AvroConfiguration を使用してオプションを 1 回設定する場合

 

AvroConfiguration

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

Avro エンドポイントは、URI 構文を使用して設定されます。

avro:transport:host:port/messageName

パスおよびクエリーパラメーターを使用します。

19.4.1. パスパラメーター (4 パラメーター)

名前説明デフォルトタイプ

transport

使用するトランスポートが 必要です。http または netty のいずれかです。

 

AvroTransport

port

必須 使用するポート番号

 

int

host

使用する 必須 ホスト名

 

String

messageName

送信するメッセージの名前。

 

String

19.4.2. クエリーパラメーター (10 パラメーター)

名前説明デフォルトタイプ

protocol (common)

使用する Avro プロトコル

 

Protocol

protocolClassName (common)

FQN クラス名で定義された使用する Avro プロトコル

 

String

protocolLocation (common)

Avro プロトコルのロケーション

 

String

reflectionProtocol (common)

指定されたプロトコルオブジェクトがリフレクションプロトコルの場合。protocolClassName ではプロトコルタイプが自動検出されるため、protocol パラメーターでのみ使用する必要があります。

false

boolean

singleParameter (common)

true の場合、consumer パラメーターは配列にラップされません。プロトコルがメッセージに複数のパラメーターを指定すると失敗します

false

boolean

uriAuthority (common)

使用する権限 (ユーザー名とパスワード)

 

String

bridgeErrorHandler (consumer)

コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

false

boolean

exceptionHandler (consumer)

コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

 

ExceptionHandler

exchangePattern (consumer)

コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。

 

ExchangePattern

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

19.5. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 15 のオプションをサポートします。

名前説明デフォルトタイプ

camel.component.avro.configuration.host

使用するホスト名

 

String

camel.component.avro.configuration.message-name

送信するメッセージの名前。

 

String

camel.component.avro.configuration.port

使用するポート番号

 

Integer

camel.component.avro.configuration.protocol

使用する Avro プロトコル

 

Protocol

camel.component.avro.configuration.protocol-class-name

FQN クラス名で定義された使用する Avro プロトコル

 

String

camel.component.avro.configuration.protocol-location

Avro プロトコルのロケーション

 

String

camel.component.avro.configuration.reflection-protocol

指定されたプロトコルオブジェクトがリフレクションプロトコルの場合。protocolClassName ではプロトコルタイプが自動検出されるため、protocol パラメーターでのみ使用する必要があります。

false

Boolean

camel.component.avro.configuration.single-parameter

true の場合、consumer パラメーターは配列にラップされません。プロトコルがメッセージに複数のパラメーターを指定すると失敗します

false

Boolean

camel.component.avro.configuration.transport

使用するトランスポート。http または netty のいずれかです

 

AvroTransport

camel.component.avro.configuration.uri-authority

使用する権限 (ユーザー名とパスワード)

 

String

camel.component.avro.enabled

avro コンポーネントを有効にする

true

Boolean

camel.component.avro.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

camel.dataformat.avro.content-type-header

データフォーマットがデータ形式を実行できる場合は、データフォーマットの型で Content-Type ヘッダーを設定するかどうか。たとえば、XML にマーシャリングするデータ形式の場合は application/xml、JSON にマーシャリングするデータ形式の場合は JSon です。

false

Boolean

camel.dataformat.avro.enabled

avro データ形式を有効にする

true

Boolean

camel.dataformat.avro.instance-class-name

マーシャリングとアンマーシャリングに使用するクラス名

 

String

19.6. Avro RPC ヘッダー

名前説明

CamelAvroMessageName

送信するメッセージの名前。コンシューマーでは、URI からのメッセージ名をオーバーライドします (存在する場合)

19.7. 例

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 以降、同じタスクを実行するために 2 つの異なるルートを設定できます。

        <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 はパラメーターを 1 つだけ受け取るため、singleParameter が使用され、getProcessor は 本体で直接 Value クラスを受け取りますが、putProcessor は 配列の内容として文字列キーと値値が入力されたサイズ 2 の配列を受け取ります。

第20章 Avro DataFormat

Camel バージョン 2.14 以降で利用可能

このコンポーネントは、avro のデータ形式を提供するので、Apache Avro のバイナリーデータ形式を使用したメッセージのシリアル化と逆シリアル化が可能になります。さらに、netty または http 経由で avro を使用するためのプロデューサーとコンシューマーのエンドポイントを提供することにより、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 のドキュメント を参照してください。

ただし、スキーマファーストのアプローチは強制されず、既存のクラスのスキーマを作成できます。2.12 以降、 既存のプロトコルインターフェイスを使用して RCP 呼び出しを行うことができます。プロトコル自体にはインターフェイスを使用し、パラメーターと結果の型には POJO Bean またはプリミティブ/文字列クラスを使用する必要があります。上記のスキーマに対応するクラスの例を次に示します。

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>

別の方法として、コンテキスト内でデータ形式を指定し、ルートから参照することもできます。

    <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 データ形式を使用してアンマーシャリングできます。

20.3. Avro データ形式オプション

Avro データ形式は、以下にリストされている 2 つのオプションをサポートしています。

名前デフォルトJava タイプ説明

instanceClassName

 

String

マーシャリングとアンマーシャリングに使用するクラス名

contentTypeHeader

false

Boolean

データフォーマットがデータ形式を実行できる場合は、データフォーマットの型で Content-Type ヘッダーを設定するかどうか。たとえば、XML にマーシャリングするデータ形式の場合は application/xml、JSON にマーシャリングするデータ形式の場合は JSon です。

20.4. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 15 のオプションをサポートします。

名前説明デフォルトタイプ

camel.component.avro.configuration.host

使用するホスト名

 

String

camel.component.avro.configuration.message-name

送信するメッセージの名前。

 

String

camel.component.avro.configuration.port

使用するポート番号

 

Integer

camel.component.avro.configuration.protocol

使用する Avro プロトコル

 

Protocol

camel.component.avro.configuration.protocol-class-name

FQN クラス名で定義された使用する Avro プロトコル

 

String

camel.component.avro.configuration.protocol-location

Avro プロトコルのロケーション

 

String

camel.component.avro.configuration.reflection-protocol

指定されたプロトコルオブジェクトがリフレクションプロトコルの場合。protocolClassName ではプロトコルタイプが自動検出されるため、protocol パラメーターでのみ使用する必要があります。

false

Boolean

camel.component.avro.configuration.single-parameter

true の場合、consumer パラメーターは配列にラップされません。プロトコルがメッセージに複数のパラメーターを指定すると失敗します

false

Boolean

camel.component.avro.configuration.transport

使用するトランスポート。http または netty のいずれかです

 

AvroTransport

camel.component.avro.configuration.uri-authority

使用する権限 (ユーザー名とパスワード)

 

String

camel.component.avro.enabled

avro コンポーネントを有効にする

true

Boolean

camel.component.avro.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

camel.dataformat.avro.content-type-header

データフォーマットがデータ形式を実行できる場合は、データフォーマットの型で Content-Type ヘッダーを設定するかどうか。たとえば、XML にマーシャリングするデータ形式の場合は application/xml、JSON にマーシャリングするデータ形式の場合は JSon です。

false

Boolean

camel.dataformat.avro.enabled

avro データ形式を有効にする

true

Boolean

camel.dataformat.avro.instance-class-name

マーシャリングとアンマーシャリングに使用するクラス名

 

String

ND

第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]

メトリクスが存在しない場合は作成されます。
URI には、?options=value&option2=value&…​ という形式でクエリーオプションを追加できます。

21.2. URI オプション

AWS CloudWatch コンポーネントは、以下に示す 15 のオプションをサポートします。

名前説明デフォルトタイプ

configuration (advanced)

AWS CW のデフォルト設定

 

CwConfiguration

accessKey (producer)

Amazon AWS Access Key

 

String

secretKey (producer)

Amazon AWS Secret Key

 

String

region (producer)

CW クライアントが機能する必要があるリージョン。

 

String

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

AWS CloudWatch エンドポイントは、URI 構文を使用して設定されます。

aws-cw:namespace

パスおよびクエリーパラメーターを使用します。

21.2.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

namespace

必須。メトリクス namespace。

 

String

21.2.2. クエリーパラメーター (11 パラメーター)

名前説明デフォルトタイプ

amazonCwClient (producer)

AmazonCloudWatch をクライアントとして使用します。

 

AmazonCloudWatch

name (producer)

メトリクス名

 

String

proxyHost (producer)

CW クライアントをインスタンス化する際にプロキシーホストを定義します。

 

String

proxyPort (producer)

CW クライアントをインスタンス化する際にプロキシーポートを定義します。

 

Integer

region (producer)

CW クライアントが機能する必要があるリージョン。

 

String

timestamp (producer)

メトリクスのタイムスタンプ。

 

Date

unit (producer)

メトリクスユニット

 

String

value (producer)

メトリクス値

 

double

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

accessKey (security)

Amazon AWS Access Key

 

String

secretKey (security)

Amazon AWS Secret Key

 

String

21.3. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 16 のオプションをサポートします。

名前説明デフォルトタイプ

camel.component.aws-cw.access-key

Amazon AWS Access Key

 

String

camel.component.aws-cw.configuration.access-key

Amazon AWS Access Key

 

String

camel.component.aws-cw.configuration.amazon-cw-client

AmazonCloudWatch をクライアントとして使用します。

 

AmazonCloudWatch

camel.component.aws-cw.configuration.name

メトリクス名

 

String

camel.component.aws-cw.configuration.namespace

メトリック名前空間

 

String

camel.component.aws-cw.configuration.proxy-host

CW クライアントをインスタンス化する際にプロキシーホストを定義します。

 

String

camel.component.aws-cw.configuration.proxy-port

CW クライアントをインスタンス化する際にプロキシーポートを定義します。

 

Integer

camel.component.aws-cw.configuration.region

CW クライアントが機能する必要があるリージョン。

 

String

camel.component.aws-cw.configuration.secret-key

Amazon AWS Secret Key

 

String

camel.component.aws-cw.configuration.timestamp

メトリクスのタイムスタンプ。

 

Date

camel.component.aws-cw.configuration.unit

メトリクスユニット

 

String

camel.component.aws-cw.configuration.value

メトリクス値

 

double

camel.component.aws-cw.enabled

aws-cw コンポーネントを有効にする

true

Boolean

camel.component.aws-cw.region

CW クライアントが機能する必要があるリージョン。

 

String

camel.component.aws-cw.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

camel.component.aws-cw.secret-key

Amazon AWS Secret Key

 

String

必要な CW コンポーネントオプション

Amazon の CloudWatch にアクセスするには、レジストリーに amazonCwClient を指定するか、accessKey と secretKey を指定する必要があります。

21.4. 使用方法

21.4.1. CW プロデューサーによって評価されるメッセージヘッダー

ヘッダータイプ説明

CamelAwsCwMetricName

String

Amazon CW メトリクス名。

CamelAwsCwMetricValue

double

Amazon CW メトリクス値。

CamelAwsCwMetricUnit

String

Amazon CW メトリクスユニット。

CamelAwsCwMetricNamespace

String

Amazon CW メトリクス namespace。

CamelAwsCwMetricTimestamp

日付

Amazon CW メトリクスのタイムスタンプ。

CamelAwsCwMetricDimensionName

String

Camel 2.12: Amazon CW メトリクスディメンション名。

CamelAwsCwMetricDimensionValue

String

Camel 2.12: Amazon CW メトリクスディメンション値。

CamelAwsCwMetricDimensions

Map<String, String>

Camel 2.12: ディメンション名とディメンション値のマップ。

21.4.2. Advanced AmazonCloudWatch configuration

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.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.10 以降) に置き換える必要があります。

21.6. 関連項目

  • Configuring Camel (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]

URI には、?options=value&option2=value&…​ という形式でクエリーオプションを追加できます。

22.2. URI オプション

AWS DynamoDB コンポーネントは 5 のオプションをサポートします。これは以下に記載されています。

名前説明デフォルトタイプ

configuration (advanced)

AWS DDB のデフォルト設定

 

DdbConfiguration

accessKey (producer)

Amazon AWS Access Key

 

String

secretKey (producer)

Amazon AWS Secret Key

 

String

region (producer)

DDB クライアントが機能する必要があるリージョン

 

String

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

AWS DynamoDB エンドポイントは、URI 構文を使用して設定します。

aws-ddb:tableName

パスおよびクエリーパラメーターを使用します。

22.2.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

tableName

必須。現在作業中のテーブルの名前。

 

String

22.2.2. クエリーパラメーター (13 パラメーター)

名前説明デフォルトタイプ

amazonDDBClient (producer)

AmazonDynamoDB をクライアントとして使用します

 

AmazonDynamoDB

consistentRead (producer)

データの読み取り時に強力な整合性を適用するべきかどうかを決定します。

false

boolean

keyAttributeName (producer)

テーブルの作成時の属性名

 

String

keyAttributeType (producer)

テーブル作成時の属性タイプ

 

String

operation (producer)

実行する操作

PutItem

DdbOperations

proxyHost (producer)

DDB クライアントをインスタンス化する際にプロキシーホストを定義します

 

String

proxyPort (producer)

DDB クライアントをインスタンス化する際にプロキシーポートを定義します。

 

Integer

readCapacity (producer)

テーブルからリソースを読み取るために予約するプロビジョニングされたスループット

 

Long

region (producer)

DDB クライアントが機能する必要があるリージョン

 

String

writeCapacity (producer)

テーブルにリソースを書き込むために予約するプロビジョニングされたスループット。

 

Long

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

accessKey (security)

Amazon AWS Access Key

 

String

secretKey (security)

Amazon AWS Secret Key

 

String

22.3. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 18 のオプションをサポートします。

名前説明デフォルトタイプ

camel.component.aws-ddb.access-key

Amazon AWS Access Key

 

String

camel.component.aws-ddb.configuration.access-key

Amazon AWS Access Key

 

String

camel.component.aws-ddb.configuration.amazon-d-d-b-client

AmazonDynamoDB をクライアントとして使用します

 

AmazonDynamoDB

camel.component.aws-ddb.configuration.consistent-read

データの読み取り時に強力な整合性を適用するべきかどうかを決定します。

false

Boolean

camel.component.aws-ddb.configuration.key-attribute-name

テーブルの作成時の属性名

 

String

camel.component.aws-ddb.configuration.key-attribute-type

テーブル作成時の属性タイプ

 

String

camel.component.aws-ddb.configuration.operation

実行する操作

 

DdbOperations

camel.component.aws-ddb.configuration.proxy-host

DDB クライアントをインスタンス化する際にプロキシーホストを定義します

 

String

camel.component.aws-ddb.configuration.proxy-port

DDB クライアントをインスタンス化する際にプロキシーポートを定義します。

 

Integer

camel.component.aws-ddb.configuration.read-capacity

テーブルからリソースを読み取るために予約するプロビジョニングされたスループット

 

Long

camel.component.aws-ddb.configuration.region

DDB クライアントが機能する必要があるリージョン

 

String

camel.component.aws-ddb.configuration.secret-key

Amazon AWS Secret Key

 

String

camel.component.aws-ddb.configuration.table-name

現在作業中のテーブルの名前。

 

String

camel.component.aws-ddb.configuration.write-capacity

テーブルにリソースを書き込むために予約するプロビジョニングされたスループット。

 

Long

camel.component.aws-ddb.enabled

aws-ddb コンポーネントを有効にする

true

Boolean

camel.component.aws-ddb.region

DDB クライアントが機能する必要があるリージョン

 

String

camel.component.aws-ddb.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

camel.component.aws-ddb.secret-key

Amazon AWS Secret Key

 

String

必要な DDB コンポーネントオプション

Amazon の DynamoDB にアクセスするには、レジストリーに amazonDDBClient を指定するか、accessKey と secretKey を指定する必要があります。

22.4. 使用方法

22.4.1. DDB プロデューサーによって評価されるメッセージヘッダー

ヘッダータイプ説明

CamelAwsDdbBatchItems

Map<String, KeysAndAttributes>

プライマリーキーによって取得するテーブル名と対応する項目のマップ。

CamelAwsDdbTableName

String

この操作のテーブル名。

CamelAwsDdbKey

キー

テーブル内の各項目を一意に識別するプライマリーキー。Camel 2.16.0 以降、このヘッダーのタイプは Key ではなく Map<String、AttributeValue> です。

CamelAwsDdbReturnValues

String

変更前または変更後の属性の名前および値のペアを取得する場合は、このパラメーターを使用します (NONE、ALL_OLD、UPDATED_OLD、ALL_NEW、UPDATED_NEW)。

CamelAwsDdbUpdateCondition

Map<String, ExpectedAttributeValue>

条件変更の属性を指定します。

CamelAwsDdbAttributeNames

Collection<String>

属性名が指定されていない場合、すべての属性が返されます。

CamelAwsDdbConsistentRead

Boolean

true に設定すると、一貫性のある読み取りが発行されます。それ以外の場合は、最終的に一貫性が使用されます。

CamelAwsDdbIndexName

String

設定されている場合、クエリー操作のセカンダリーインデックスとして使用されます。

CamelAwsDdbItem

Map<String, AttributeValue>

アイテムの属性のマップ。アイテムを定義するプライマリーキー値を含める必要があります。

CamelAwsDdbExactCount

Boolean

true に設定すると、Amazon DynamoDB は、一致する項目とその属性のリストではなく、クエリーパラメーターに一致する項目の総数を返します。Camel 2.16.0 から、このヘッダーはもう存在しません。

CamelAwsDdbKeyConditions

Map<String, Condition>

From Camel 2.16.0.このヘッダーはクエリーの選択基準を指定し、2 つの古いヘッダー CamelAwsDdbHashKeyValue および CamelAwsDdbScanRangeKeyCondition をマージします。

CamelAwsDdbStartKey

キー

以前のクエリーを続行するアイテムのプライマリーキー。

CamelAwsDdbHashKeyValue

AttributeValue

複合プライマリーキーのハッシュコンポーネントの値。Camel 2.16.0 から、このヘッダーはもう存在しません。

CamelAwsDdbLimit

Integer

返すアイテムの最大数。

CamelAwsDdbScanRangeKeyCondition

状態

クエリーに使用する属性値と比較演算子のコンテナー。Camel 2.16.0 から、このヘッダーはもう存在しません。

CamelAwsDdbScanIndexForward

Boolean

インデックスの順方向または逆方向のトラバーサルを指定します。

CamelAwsDdbScanFilter

Map<String, Condition>

スキャン結果を評価し、目的の値のみを返します。

CamelAwsDdbUpdateValues

Map<String, AttributeValueUpdate>

更新の新しい値とアクションへの属性名のマップ。

22.4.2. BatchGetItems 操作中に設定されたメッセージヘッダー

ヘッダータイプ説明

CamelAwsDdbBatchResponse

Map<String,BatchResponse>

テーブル名およびテーブルの各項目属性。

CamelAwsDdbUnprocessedKeys

Map<String,KeysAndAttributes>

テーブルのマップと、現在の応答で処理されなかった対応するキーが含まれます。

22.4.3. DeleteItem 操作時に設定されたメッセージヘッダー

ヘッダータイプ説明

CamelAwsDdbAttributes

Map<String, AttributeValue>

操作によって返される属性の一覧。

22.4.4. DeleteTable 操作時に設定されたメッセージヘッダー

ヘッダータイプ説明

CamelAwsDdbProvisionedThroughput

  

ProvisionedThroughputDescription

 

このテーブルの ProvisionedThroughput プロパティーの値

CamelAwsDdbCreationDate

日付

このテーブルの DateTime の作成。

CamelAwsDdbTableItemCount

Long

このテーブルのアイテム数。

CamelAwsDdbKeySchema

KeySchema

このテーブルのプライマリーキーを識別する KeySchema。Camel 2.16.0 以降、このヘッダーのタイプは List<KeySchemaElement> であり、KeySchema ではありません。

CamelAwsDdbTableName

String

テーブル名。

CamelAwsDdbTableSize

Long

テーブルサイズ(バイト単位)。

CamelAwsDdbTableStatus

String

テーブルのステータス: CREATING、UPDATING、DELETING、ACTIVE

22.4.5. DescribeTable 操作中に設定されたメッセージヘッダー

ヘッダータイプ説明

CamelAwsDdbProvisionedThroughput

{{ProvisionedThroughputDescription}}

このテーブルの ProvisionedThroughput プロパティーの値

CamelAwsDdbCreationDate

日付

このテーブルの DateTime の作成。

CamelAwsDdbTableItemCount

Long

このテーブルのアイテム数。

CamelAwsDdbKeySchema

{{KeySchema}}

このテーブルのプライマリーキーを識別する KeySchema。Camel 2.16.0 以降、このヘッダーのタイプは List<KeySchemaElement> であり、KeySchema ではありません。

CamelAwsDdbTableName

String

テーブル名。

CamelAwsDdbTableSize

Long

テーブルサイズ(バイト単位)。

CamelAwsDdbTableStatus

String

テーブルのステータス: CREATING、UPDATING、DELETING、ACTIVE

CamelAwsDdbReadCapacity

Long

このテーブルの ReadCapacityUnits プロパティー。

CamelAwsDdbWriteCapacity

Long

このテーブルの WriteCapacityUnits プロパティー。

22.4.6. GetItem 操作時に設定されたメッセージヘッダー

ヘッダータイプ説明

CamelAwsDdbAttributes

Map<String, AttributeValue>

操作によって返される属性の一覧。

22.4.7. PutItem 操作中に設定されたメッセージヘッダー

ヘッダータイプ説明

CamelAwsDdbAttributes

Map<String, AttributeValue>

操作によって返される属性の一覧。

22.4.8. Query 操作時に設定されたメッセージヘッダー

ヘッダータイプ説明

CamelAwsDdbItems

List<java.util.Map<String,AttributeValue>>

操作によって返される属性の一覧。

CamelAwsDdbLastEvaluatedKey

キー

前の結果セットを含む、クエリー操作が停止した項目のプライマリーキー。

CamelAwsDdbConsumedCapacity

double

操作中に消費された、テーブルのプロビジョニングされたスループットのキャパシティーユニットの数。

CamelAwsDdbCount

Integer

応答のアイテム数。

22.4.9. Scan 操作時に設定されたメッセージヘッダー

ヘッダータイプ説明

CamelAwsDdbItems

List<java.util.Map<String,AttributeValue>>

操作によって返される属性の一覧。

CamelAwsDdbLastEvaluatedKey

キー

前の結果セットを含む、クエリー操作が停止した項目のプライマリーキー。

CamelAwsDdbConsumedCapacity

double

操作中に消費された、テーブルのプロビジョニングされたスループットのキャパシティーユニットの数。

CamelAwsDdbCount

Integer

応答のアイテム数。

CamelAwsDdbScannedCount

Integer

フィルターが適用される前の完全なスキャン内のアイテムの数。

22.4.10. UpdateItem 操作時に設定されたメッセージヘッダー

ヘッダータイプ説明

CamelAwsDdbAttributes

Map<String, AttributeValue>

操作によって返される属性の一覧。

22.4.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.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.10 以降) に置き換える必要があります。

22.6. 関連項目

  • Configuring Camel (Camel の設定)
  • コンポーネント
  • エンドポイント
  • スタートガイド
  • AWS コンポーネント

第23章 AWS DynamoDB Streams Component

Camel バージョン 2.17 以降で利用可能

DynamoDB Stream コンポーネントは、Amazon DynamoDB Stream サービスからのメッセージの受信をサポートしています。

前提条件

有効な Amazon Web Services 開発者アカウントを持っていて、Amazon DynamoDB ストリームを使用するためにサインアップしている必要がある。詳細については、AWS DynamoDB を参照してください。

23.1. URI 形式

aws-ddbstream://table-name[?options]

ストリームは、使用する前に作成する必要があります。
URI には、?options=value&option2=value&…​ という形式でクエリーオプションを追加できます。

23.2. URI オプション

AWS DynamoDB Streams コンポーネントは、以下に示す 5 個のオプションをサポートしています。

名前説明デフォルトタイプ

configuration (advanced)

AWS DDB ストリームのデフォルト設定

 

DdbStreamConfiguration

accessKey (consumer)

Amazon AWS Access Key

 

String

secretKey (consumer)

Amazon AWS Secret Key

 

String

region (consumer)

Amazon AWS リージョン

 

String

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

AWS DynamoDB Streams エンドポイントは、URI 構文を使用して設定されます。

aws-ddbstream:tableName

パスおよびクエリーパラメーターを使用します。

23.2.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

tableName

必須 dynamodb テーブルの名前

 

String

23.2.2. クエリーパラメーター(28 パラメーター):

名前説明デフォルトタイプ

amazonDynamoDbStreams Client (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 を指定する必要があります。

LATEST

ShardIteratorType

maxResultsPerRequest (consumer)

各ポーリングでフェッチされる最大レコード数。

 

int

proxyHost (consumer)

DDBStreams クライアントをインスタンス化する際にプロキシーホストを定義します

 

String

proxyPort (consumer)

DDBStreams クライアントをインスタンス化する際にプロキシーポートを定義します

 

Integer

region (consumer)

DDBStreams クライアントが機能する必要があるリージョン

 

String

sendEmptyMessageWhenIdle (consumer)

ポーリングコンシューマーがファイルをポーリングしなかった場合、このオプションを有効にして、代わりに空のメッセージ (ボディーなし) を送信できます。

false

boolean

sequenceNumberProvider (consumer)

2 つの ShardIteratorType.AT,AFTER_SEQUENCE_NUMBER イテレーター型のいずれかを使用する場合のシーケンス番号のプロバイダー。レジストリー参照またはリテラルシーケンス番号を指定できます。

 

SequenceNumberProvider

exceptionHandler (consumer)

コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

 

ExceptionHandler

exchangePattern (consumer)

コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。

 

ExchangePattern

pollStrategy (consumer)

プラグ可能な org.apache.camel.PollingConsumerPollingStrategy を使用すると、エクスチェンジが作成され、Camel でルーティングされる前に、通常はポーリング操作中に発生するエラー処理を制御するカスタム実装が提供できます。

 

PollingConsumerPoll Strategy

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

backoffErrorThreshold (scheduler)

backoffMultipler が開始する前に発生する必要がある後続のエラーポーリング (エラーによって失敗した) の数。

 

int

backoffIdleThreshold (scheduler)

backoffMultipler が開始する前に発生する必要がある後続のアイドルポーリングの数。

 

int

backoffMultiplier (scheduler)

後続のアイドル状態/エラーが連続して発生した場合に、スケジュールされたポーリングコンシューマーのバックオフを許可します。乗数は、実際に次の試行が行われる前にスキップされるポーリングの数です。このオプションが使用されている場合は、backoffIdleThreshold や backoffErrorThreshold も設定する必要があります。

 

int

delay (scheduler)

次のポーリングまでの時間 (ミリ秒単位)。60s (60 秒)、5m30s (5 分 30 秒)、1h (1 時間) などの単位を使用して時間値を指定することもできます。

500

long

greedy (scheduler)

greedy が有効で、以前の実行が 1 つ以上のメッセージをポーリングした場合、ScheduledPollConsumer は即座に再度実行されます。

false

boolean

initialDelay (scheduler)

最初のポーリングが開始されるまでの時間 (ミリ秒単位)。60s (60 秒)、5m30s (5 分 30 秒)、1h (1 時間) などの単位を使用して時間値を指定することもできます。

1000

long

runLoggingLevel (scheduler)

コンシューマーはポーリング時に開始/完了のログ行を記録します。このオプションを使用すると、ログレベルを設定できます。

TRACE

LoggingLevel

scheduledExecutorService (scheduler)

コンシューマーに使用するカスタム/共有スレッドプールを設定できます。デフォルトでは、各コンシューマーに独自の単一スレッドのスレッドプールがあります。

 

ScheduledExecutor Service

scheduler (scheduler)

camel-spring または camel-quartz2 コンポーネントから cron スケジューラーを使用します。

none

ScheduledPollConsumer Scheduler

schedulerProperties (scheduler)

カスタムスケジューラーまたは Quartz2 や Spring ベースのスケジューラーを使用する場合に、追加のプロパティーを設定します。

 

Map

startScheduler (scheduler)

スケジューラーを自動起動するかどうか。

true

boolean

timeUnit (scheduler)

initialDelay および delay オプションの時間単位。

MILLISECONDS

TimeUnit

useFixedDelay (scheduler)

固定遅延または固定レートを使用するかどうかを制御します。詳細は、JDK の ScheduledExecutorService を参照してください。

true

boolean

accessKey (security)

Amazon AWS Access Key

 

String

secretKey (security)

Amazon AWS Secret Key

 

String

23.3. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 15 のオプションをサポートします。

名前説明デフォルトタイプ

camel.component.aws-ddbstream.access-key

Amazon AWS Access Key

 

String

camel.component.aws-ddbstream.configuration.access-key

Amazon AWS Access Key

 

String

camel.component.aws-ddbstream.configuration.amazon-dynamo-db-streams-client

このエンドポイントに対するすべての要求に使用する Amazon DynamoDB クライアント

 

AmazonDynamoDBStreams

camel.component.aws-ddbstream.configuration.iterator-type

DynaboDB ストリーム内でレコードの取得を開始する場所を定義します。TRIM_HORIZON を使用すると、ストリームがリアルタイムに追いつく前に大幅な遅延が発生する可能性があることに注意してください。AT,AFTER_SEQUENCE_NUMBER を使用する場合は、sequenceNumberProvider を指定する必要があります。

 

ShardIteratorType

camel.component.aws-ddbstream.configuration.max-results-per-request

各ポーリングでフェッチされる最大レコード数。

 

Integer

camel.component.aws-ddbstream.configuration.proxy-host

DDBStreams クライアントをインスタンス化する際にプロキシーホストを定義します

 

String

camel.component.aws-ddbstream.configuration.proxy-port

DDBStreams クライアントをインスタンス化する際にプロキシーポートを定義します

 

Integer

camel.component.aws-ddbstream.configuration.region

DDBStreams クライアントが機能する必要があるリージョン

 

String

camel.component.aws-ddbstream.configuration.secret-key

Amazon AWS Secret Key

 

String

camel.component.aws-ddbstream.configuration.sequence-number-provider

2 つの ShardIteratorType.AT,AFTER_SEQUENCE_NUMBER イテレーター型のいずれかを使用する場合のシーケンス番号のプロバイダー。レジストリー参照またはリテラルシーケンス番号を指定できます。

 

SequenceNumberProvider

camel.component.aws-ddbstream.configuration.table-name

dynamodb テーブルの名前

 

String

camel.component.aws-ddbstream.enabled

aws-ddbstream コンポーネントを有効にする

true

Boolean

camel.component.aws-ddbstream.region

Amazon AWS リージョン

 

String

camel.component.aws-ddbstream.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

camel.component.aws-ddbstream.secret-key

Amazon AWS Secret Key

 

String

必須の DynampDBStream コンポーネントオプション

レジストリーに amazonDynamoDbStreamsClient を提供し、プロキシーと関連する認証情報を設定する必要があります。

23.4. シーケンス番号

シーケンス番号としてリテラル文字列を指定するか、レジストリーに Bean を指定できます。Bean を使用する例としては、現在の位置を変更フィードに保存し、Camel の起動時に復元することが挙げられます。

describe-streams の結果で最大のシーケンス番号よりも大きいシーケンス番号を指定すると、AWS 呼び出しが HTTP 400 を返すことになるため、エラーになります。

23.5. バッチコンシューマー

このコンポーネントは、Batch Consumer を実装します。

これにより、たとえば、このバッチに存在するメッセージの数を知ることができ、たとえば、Aggregator にこの数のメッセージを集約させることができます。

23.6. 使用方法

23.6.1. AmazonDynamoDBStreamsClient configuration

AmazonDynamoDBStreamsClient のインスタンスを作成し、それをレジストリーに BIND する必要があります。

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.6.2. AWS 認証情報の指定

新しい ClientConfiguration インスタンスを作成するときのデフォルトである DefaultAWSCredentialsProviderChain を使用して認証情報を取得することをお勧めしますが、createClient (…) を呼び出すときに別の AWSCredentialsProvider を指定できます。

23.7. ダウンタイムへの対処

23.7.1. 24 時間未満の AWS DynamoDB ストリームの停止

コンシューマーは最後に確認されたシーケンス番号 (CAMEL-9515 で実装) から再開されるため、停止に DynamoDB 自体が含まれていない限り、大量のイベントをすばやく連続して受信する必要があります。

23.7.2. AWS DynamoDB Streams が 24 時間以上停止する

AWS が 24 時間分の変更しか保持しないことを考えると、どのような軽減策が実施されていても、変更イベントを見逃すことになります。

23.8. 依存関係

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.9. 関連項目

  • Configuring Camel (Camel の設定)
  • コンポーネント
  • エンドポイント
  • スタートガイド
  • AWS コンポーネント
    +

第24章 AWS EC2 コンポーネント

Camel バージョン 2.16 以降で利用可能

EC2 コンポーネントは、AWS EC2 インスタンスの作成、実行、開始、停止、および終了をサポートしています。

前提条件

有効な Amazon Web Services 開発者アカウントを持っていて、Amazon EC2 を使用するためにサインアップしている必要がある。詳細については、Amazon EC2 を参照してください。

24.1. URI 形式

aws-ec2://label[?options]

URI には、?options=value&option2=value&…​ という形式でクエリーオプションを追加できます。

24.2. URI オプション

AWS EC2 コンポーネントは、以下に示す 5 個のオプションをサポートしています。

名前説明デフォルトタイプ

configuration (advanced)

AWS EC2 のデフォルト設定

 

EC2 設定

region (producer)

EC2 クライアントが動作する必要があるリージョン

 

String

accessKey (producer)

Amazon AWS Access Key

 

String

secretKey (producer)

Amazon AWS Secret Key

 

String

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

AWS EC2 エンドポイントは、URI 構文を使用して設定されます。

aws-ec2:label

パスおよびクエリーパラメーターを使用します。

24.2.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

label

必須 論理名

 

String

24.2.2. クエリーパラメーター (8 つのパラメーター):

名前説明デフォルトタイプ

accessKey (producer)

Amazon AWS Access Key

 

String

amazonEc2Client (producer)

既存の設定済み AmazonEC2Client をクライアントとして使用するには

 

AmazonEC2Client

operation (producer)

必須 実行する操作。createAndRunInstances、startInstances、stopInstances、terminateInstances、describeInstances、describeInstancesStatus、rebootInstances、monitorInstances、unmonitorInstances、createTags、または deleteTags のいずれかです。

 

EC2 オペレーション

proxyHost (producer)

EC2 クライアントをインスタンス化する際にプロキシーホストを定義します。

 

String

proxyPort (producer)

EC2 クライアントをインスタンス化する際にプロキシーポートを定義します。

 

Integer

region (producer)

EC2 クライアントが動作する必要があるリージョン

 

String

secretKey (producer)

Amazon AWS Secret Key

 

String

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

24.3. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 12 のオプションをサポートします。

名前説明デフォルトタイプ

camel.component.aws-ec2.access-key

Amazon AWS Access Key

 

String

camel.component.aws-ec2.configuration.access-key

Amazon AWS Access Key

 

String

camel.component.aws-ec2.configuration.amazon-ec2-client

既存の設定済み AmazonEC2Client をクライアントとして使用するには

 

AmazonEC2Client

camel.component.aws-ec2.configuration.operation

実行する操作。createAndRunInstances、startInstances、stopInstances、terminateInstances、describeInstances、describeInstancesStatus、rebootInstances、monitorInstances、unmonitorInstances、createTags、または deleteTags のいずれかです。

 

EC2 オペレーション

camel.component.aws-ec2.configuration.proxy-host

EC2 クライアントをインスタンス化する際にプロキシーホストを定義します。

 

String

camel.component.aws-ec2.configuration.proxy-port

EC2 クライアントをインスタンス化する際にプロキシーポートを定義します。

 

Integer

camel.component.aws-ec2.configuration.region

EC2 クライアントが動作する必要があるリージョン

 

String

camel.component.aws-ec2.configuration.secret-key

Amazon AWS Secret Key

 

String

camel.component.aws-ec2.enabled

aws-ec2 コンポーネントを有効にする

true

Boolean

camel.component.aws-ec2.region

EC2 クライアントが動作する必要があるリージョン

 

String

camel.component.aws-ec2.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

camel.component.aws-ec2.secret-key

Amazon AWS Secret Key

 

String

必要な EC2 コンポーネントオプション

Amazon EC2 サービスにアクセスするには、レジストリーに amazonEc2Client を指定するか、accessKey と secretKey を指定する必要があります。

24.4. 使用方法

24.4.1. EC2 プロデューサーによって評価されるメッセージヘッダー

ヘッダータイプ説明

CamelAwsEC2ImageId

String

AWS マーケットプレイスのイメージ ID

CamelAwsEC2InstanceType

com.amazonaws.services.ec2.model.InstanceType

作成して実行するインスタンスタイプ

CamelAwsEC2Operation

String

実行する操作

CamelAwsEC2InstanceMinCount

Int

実行したいインスタンスの最小数。

CamelAwsEC2InstanceMaxCount

Int

実行したいインスタンスの最大数。

CamelAwsEC2InstanceMonitoring

Boolean

実行中のインスタンスを監視するかどうかを定義します

CamelAwsEC2InstanceEbsOptimized

Boolean

作成中のインスタンスが 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.5. 関連項目

  • Configuring Camel (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]

URI には、?options=value&option2=value&…​ という形式でクエリーオプションを追加できます。

25.2. URI オプション

AWS IAM コンポーネントは、以下に示す 5 個のオプションをサポートしています。

名前説明デフォルトタイプ

configuration (advanced)

AWS IAM のデフォルト設定

 

IAMConfiguration

accessKey (producer)

Amazon AWS Access Key

 

String

secretKey (producer)

Amazon AWS Secret Key

 

String

region (producer)

IAM クライアントが動作する必要があるリージョン

 

String

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

AWS IAM エンドポイントは、URI 構文を使用して設定されます。

aws-iam:label

パスおよびクエリーパラメーターを使用します。

25.2.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

label

必須 論理名

 

String

25.2.2. クエリーパラメーター (8 つのパラメーター):

名前説明デフォルトタイプ

accessKey (producer)

Amazon AWS Access Key

 

String

iamClient (producer)

既存の設定済み AWS IAM をクライアントとして使用する場合

 

AmazonIdentity ManagementClient

operation (producer)

必須 実行する操作

 

IAM オペレーション

proxyHost (producer)

KMS クライアントをインスタンス化するときにプロキシーホストを定義します。

 

String

proxyPort (producer)

KMS クライアントをインスタンス化するときにプロキシーポートを定義します。

 

Integer

region (producer)

KMS クライアントが動作する必要があるリージョン

 

String

secretKey (producer)

Amazon AWS Secret Key

 

String

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

25.3. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 12 のオプションをサポートします。

名前説明デフォルトタイプ

camel.component.aws-iam.access-key

Amazon AWS Access Key

 

String

camel.component.aws-iam.configuration.access-key

Amazon AWS Access Key

 

String

camel.component.aws-iam.configuration.iam-client

既存の設定済み AWS IAM をクライアントとして使用する場合

 

AmazonIdentity ManagementClient

camel.component.aws-iam.configuration.operation

実行する操作

 

IAM オペレーション

camel.component.aws-iam.configuration.proxy-host

KMS クライアントをインスタンス化するときにプロキシーホストを定義します。

 

String

camel.component.aws-iam.configuration.proxy-port

KMS クライアントをインスタンス化するときにプロキシーポートを定義します。

 

Integer

camel.component.aws-iam.configuration.region

KMS クライアントが動作する必要があるリージョン

 

String

camel.component.aws-iam.configuration.secret-key

Amazon AWS Secret Key

 

String

camel.component.aws-iam.enabled

aws-iam コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

Boolean

camel.component.aws-iam.region

IAM クライアントが動作する必要があるリージョン

 

String

camel.component.aws-iam.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

camel.component.aws-iam.secret-key

Amazon AWS Secret Key

 

String

必須の IAM コンポーネントオプション

Amazon IAM サービスにアクセスするには、レジストリーに amazonKmsClient を指定するか、accessKey と secretKey を指定する必要があります。

25.4. 使用方法

25.4.1. IAM プロデューサーによって評価されるメッセージヘッダー

ヘッダータイプ説明

CamelAwsIAMOperation

String

実行する操作

CamelAwsIAMUsername

String

管理するユーザーのユーザー名

CamelAwsIAMAccessKeyID

String

管理するアクセスキー

CamelAwsIAMAccessKeyStatus

String

設定する AccessKey のステータス。有効な値と無効な値があります

25.4.2. IAM プロデューサーの操作

Camel-AWS IAM コンポーネントは、プロデューサー側で次の操作を提供します。

  • listAccessKeys
  • ユーザーを作成
  • 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. 関連項目

  • Configuring Camel (Camel の設定)
  • コンポーネント
  • エンドポイント
  • スタートガイド
  • AWS コンポーネント

第26章 AWS Kinesis コンポーネント

Camel バージョン 2.17 以降で利用可能

Kinesis コンポーネントは、Amazon Kinesis サービスとのメッセージの送受信をサポートしています。

前提条件

有効な Amazon Web Services 開発者アカウントを持っていて、Amazon Kinesis を使用するためにサインアップしている必要がある。詳細については、AWS Kinesis を参照してください

26.1. URI 形式

aws-kinesis://stream-name[?options]

ストリームは、使用する前に作成する必要があります。
URI には、?options=value&option2=value&…​ という形式でクエリーオプションを追加できます。

26.2. URI オプション

AWS DynamoDB コンポーネントは 5 個のオプションをサポートします。これは以下に記載されています。

名前説明デフォルトタイプ

configuration (advanced)

AWS S3 のデフォルト設定

 

KinesisConfiguration

accessKey (common)

Amazon AWS Access Key

 

String

secretKey (common)

Amazon AWS Secret Key

 

String

region (common)

Amazon AWS リージョン

 

String

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

AWS Kinesis エンドポイントは、URI 構文を使用して設定します。

aws-kinesis:streamName

パスおよびクエリーパラメーターを使用します。

26.2.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

streamName

必須 ストリームの名前。

 

String

26.2.2. クエリーパラメーター (30 パラメーター)

名前説明デフォルトタイプ

amazonKinesisClient (common)

このエンドポイントに対するすべての要求に使用する Amazon Kinesis クライアント。

 

AmazonKinesis

proxyHost (common)

DDBStreams クライアントをインスタンス化する際にプロキシーホストを定義します

 

String

proxyPort (common)

DDBStreams クライアントをインスタンス化する際にプロキシーポートを定義します

 

Integer

region (common)

Kinesis クライアントが動作する必要があるリージョン

 

String

bridgeErrorHandler (consumer)

コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

false

boolean

iteratorType (consumer)

Kinesis ストリーム内でレコードの取得を開始する場所を定義します

TRIM_HORIZON

ShardIteratorType

maxResultsPerRequest (consumer)

各ポーリングでフェッチされる最大レコード数。

1

int

sendEmptyMessageWhenIdle (consumer)

ポーリングコンシューマーがファイルをポーリングしなかった場合、このオプションを有効にして、代わりに空のメッセージ (ボディーなし) を送信できます。

false

boolean

sequenceNumber (consumer)

ポーリングを開始するシーケンス番号。iteratorType が AFTER_SEQUENCE_NUMBER または AT_SEQUENCE_NUMBER に設定されている場合に必要です。

 

String

shardClosed (consumer)

シャード (shard) が閉じられた場合の動作を定義します。設定可能な値は、ignore、silent、fail です。ignore の場合、メッセージはログに記録され、コンシューマーは最初から再起動します。silent の場合は、ログには記録されず、コンシューマーは最初から起動します。fail の場合は、ReachedClosedStateException が発生します。

ignore

KinesisShardClosed StrategyEnum

shardId (consumer)

Kinesis ストリームでどの shardId からレコードを取得するかを定義します。

 

String

exceptionHandler (consumer)

コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

 

ExceptionHandler

exchangePattern (consumer)

コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。

 

ExchangePattern

pollStrategy (consumer)

プラグ可能な org.apache.camel.PollingConsumerPollingStrategy を使用すると、エクスチェンジが作成され、Camel でルーティングされる前に、通常はポーリング操作中に発生するエラー処理を制御するカスタム実装が提供できます。

 

PollingConsumerPoll Strategy

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

backoffErrorThreshold (scheduler)

backoffMultipler が開始する前に発生する必要がある後続のエラーポーリング (エラーによって失敗した) の数。

 

int

backoffIdleThreshold (scheduler)

backoffMultipler が開始する前に発生する必要がある後続のアイドルポーリングの数。

 

int

backoffMultiplier (scheduler)

後続のアイドル状態/エラーが連続して発生した場合に、スケジュールされたポーリングコンシューマーのバックオフを許可します。乗数は、実際に次の試行が行われる前にスキップされるポーリングの数です。このオプションが使用されている場合は、backoffIdleThreshold や backoffErrorThreshold も設定する必要があります。

 

int

delay (scheduler)

次のポーリングまでの時間 (ミリ秒単位)。60s (60 秒)、5m30s (5 分 30 秒)、1h (1 時間) などの単位を使用して時間値を指定することもできます。

500

long

greedy (scheduler)

greedy が有効で、以前の実行が 1 つ以上のメッセージをポーリングした場合、ScheduledPollConsumer は即座に再度実行されます。

false

boolean

initialDelay (scheduler)

最初のポーリングが開始されるまでの時間 (ミリ秒単位)。60s (60 秒)、5m30s (5 分 30 秒)、1h (1 時間) などの単位を使用して時間値を指定することもできます。

1000

long

runLoggingLevel (scheduler)

コンシューマーはポーリング時に開始/完了のログ行を記録します。このオプションを使用すると、ログレベルを設定できます。

TRACE

LoggingLevel

scheduledExecutorService (scheduler)

コンシューマーに使用するカスタム/共有スレッドプールを設定できます。デフォルトでは、各コンシューマーに独自の単一スレッドのスレッドプールがあります。

 

ScheduledExecutor Service

scheduler (scheduler)

camel-spring または camel-quartz2 コンポーネントから cron スケジューラーを使用します。

none

ScheduledPollConsumer Scheduler

schedulerProperties (scheduler)

カスタムスケジューラーまたは Quartz2 や Spring ベースのスケジューラーを使用する場合に、追加のプロパティーを設定します。

 

Map

startScheduler (scheduler)

スケジューラーを自動起動するかどうか。

true

boolean

timeUnit (scheduler)

initialDelay および delay オプションの時間単位。

MILLISECONDS

TimeUnit

useFixedDelay (scheduler)

固定遅延または固定レートを使用するかどうかを制御します。詳細は、JDK の ScheduledExecutorService を参照してください。

true

boolean

accessKey (security)

Amazon AWS Access Key

 

String

secretKey (security)

Amazon AWS Secret Key

 

String

26.3. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 17 のオプションをサポートします。

名前説明デフォルトタイプ

camel.component.aws-kinesis.access-key

Amazon AWS Access Key

 

String

camel.component.aws-kinesis.configuration.access-key

Amazon AWS Access Key

 

String

camel.component.aws-kinesis.configuration.amazon-kinesis-client

このエンドポイントに対するすべての要求に使用する Amazon Kinesis クライアント。

 

AmazonKinesis

camel.component.aws-kinesis.configuration.iterator-type

Kinesis ストリーム内でレコードの取得を開始する場所を定義します

 

ShardIteratorType

camel.component.aws-kinesis.configuration.max-results-per-request

各ポーリングでフェッチされる最大レコード数。

1

Integer

camel.component.aws-kinesis.configuration.proxy-host

DDBStreams クライアントをインスタンス化する際にプロキシーホストを定義します

 

String

camel.component.aws-kinesis.configuration.proxy-port

DDBStreams クライアントをインスタンス化する際にプロキシーポートを定義します

 

Integer

camel.component.aws-kinesis.configuration.region

Kinesis クライアントが動作する必要があるリージョン

 

String

camel.component.aws-kinesis.configuration.secret-key

Amazon AWS Secret Key

 

String

camel.component.aws-kinesis.configuration.sequence-number

ポーリングを開始するシーケンス番号。iteratorType が AFTER_SEQUENCE_NUMBER または AT_SEQUENCE_NUMBER に設定されている場合に必要です。

 

String

camel.component.aws-kinesis.configuration.shard-closed

シャード (shard) が閉じられた場合の動作を定義します。設定可能な値は、ignore、silent、fail です。ignore の場合、メッセージはログに記録され、コンシューマーは最初から再起動します。silent の場合は、ログには記録されず、コンシューマーは最初から起動します。fail の場合は、ReachedClosedStateException が発生します。

 

KinesisShardClosed StrategyEnum

camel.component.aws-kinesis.configuration.shard-id

Kinesis ストリームでどの shardId からレコードを取得するかを定義します。

 

String

camel.component.aws-kinesis.configuration.stream-name

ストリームの名前

 

String

camel.component.aws-kinesis.enabled

aws-kinesis コンポーネントを有効にする

true

Boolean

camel.component.aws-kinesis.region

Amazon AWS リージョン

 

String

camel.component.aws-kinesis.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

camel.component.aws-kinesis.secret-key

Amazon AWS Secret Key

 

String

必要な Kinesis コンポーネントオプション

プロキシーと関連するクレデンシャル情報が設定された状態で、レジストリーに amazonKinesisClient を提供する必要があります。

26.4. バッチコンシューマー

このコンポーネントは、Batch Consumer を実装します。

これにより、たとえば、このバッチに存在するメッセージの数を知ることができ、たとえば、Aggregator にこの数のメッセージを集約させることができます。

26.5. 使用方法

26.5.1. Kinesis コンシューマーによって設定されるメッセージヘッダー

ヘッダータイプ説明

CamelAwsKinesisSequenceNumber

String

このレコードのシーケンス番号。これは、サイズが API によって定義されていないため、文字列として表されます。数値型として使用する場合は、次を使用します

CamelAwsKinesisApproximateArrivalTimestamp

String

AWS がレコードの到着時間として割り当てた時間。

CamelAwsKinesisPartitionKey

String

データレコードが割り当てられているストリーム内のシャードを識別します。

26.5.2. AmazonKinesis の設定

AmazonKinesisClient のインスタンスを作成し、それをレジストリーに BIND する必要があります。

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 URI オプションで AmazonKinesisClient を参照する必要があります。

from("aws-kinesis://mykinesisstream?amazonKinesisClient=#kinesisClient")
  .to("log:out?showAll=true");

26.5.3. AWS 認証情報の指定

新しい ClientConfiguration インスタンスを作成するときのデフォルトである DefaultAWSCredentialsProviderChain を使用して認証情報を取得することをお勧めしますが、createClient (…) を呼び出すときに別の AWSCredentialsProvider を指定できます。

26.5.4. Kinesis プロデューサーが Kinesis に書き込むために使用するメッセージヘッダー。プロデューサーは、メッセージ本文が byte[] であることを期待しています。

ヘッダータイプ説明

CamelAwsKinesisPartitionKey

String

このレコードを保存するために Kinesis に渡す PartitionKey。

CamelAwsKinesisSequenceNumber

String

このレコードのシーケンス番号を示すオプションのパラメーター。

26.5.5. レコードの保存が成功したときに Kinesis プロデューサーによって設定されるメッセージヘッダー

ヘッダータイプ説明

CamelAwsKinesisSequenceNumber

String

Response Syntax で定義されているレコードのシーケンス番号

CamelAwsKinesisShardId

String

レコードが保存された場所のシャード ID

26.6. 依存関係

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.7. 関連項目

  • Configuring Camel (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]

ストリームは、使用する前に作成する必要があります。
URI には、?options=value&option2=value&…​ という形式でクエリーオプションを追加できます。

27.2. URI オプション

AWS Kinesis Firehose コンポーネントは、以下に示す 5 個のオプションをサポートしています。

名前説明デフォルトタイプ

configuration (advanced)

AWS Kinesis Firehose のデフォルト設定

 

KinesisFirehose Configuration

accessKey (producer)

Amazon AWS Access Key

 

String

secretKey (producer)

Amazon AWS Secret Key

 

String

region (producer)

Amazon AWS リージョン

 

String

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

AWS Kinesis Firehose エンドポイントは、URI 構文を使用して設定されます。

aws-kinesis-firehose:streamName

パスおよびクエリーパラメーターを使用します。

27.2.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

streamName

必須 ストリームの名前。

 

String

27.2.2. クエリーパラメーター (7 個のパラメーター):

名前説明デフォルトタイプ

amazonKinesisFirehoseClient (producer)

このエンドポイントのすべてのリクエストに使用する Amazon Kinesis Firehose クライアント

 

AmazonKinesisFirehose

proxyHost (producer)

DDBStreams クライアントをインスタンス化する際にプロキシーホストを定義します

 

String

proxyPort (producer)

DDBStreams クライアントをインスタンス化する際にプロキシーポートを定義します

 

Integer

region (producer)

Kinesis クライアントが動作する必要があるリージョン

 

String

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

accessKey (security)

Amazon AWS Access Key

 

String

secretKey (security)

Amazon AWS Secret Key

 

String

27.3. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 12 のオプションをサポートします。

名前説明デフォルトタイプ

camel.component.aws-kinesis-firehose.access-key

Amazon AWS Access Key

 

String

camel.component.aws-kinesis-firehose.configuration.access-key

Amazon AWS Access Key

 

String

camel.component.aws-kinesis-firehose.configuration.amazon-kinesis-firehose-client

このエンドポイントのすべてのリクエストに使用する Amazon Kinesis Firehose クライアント

 

AmazonKinesisFirehose

camel.component.aws-kinesis-firehose.configuration.proxy-host

DDBStreams クライアントをインスタンス化する際にプロキシーホストを定義します

 

String

camel.component.aws-kinesis-firehose.configuration.proxy-port

DDBStreams クライアントをインスタンス化する際にプロキシーポートを定義します

 

Integer

camel.component.aws-kinesis-firehose.configuration.region

Kinesis クライアントが動作する必要があるリージョン

 

String

camel.component.aws-kinesis-firehose.configuration.secret-key

Amazon AWS Secret Key

 

String

camel.component.aws-kinesis-firehose.configuration.stream-name

ストリームの名前

 

String

camel.component.aws-kinesis-firehose.enabled

aws-kinesis-firehose コンポーネントを有効にする

true

Boolean

camel.component.aws-kinesis-firehose.region

Amazon AWS リージョン

 

String

camel.component.aws-kinesis-firehose.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

camel.component.aws-kinesis-firehose.secret-key

Amazon AWS Secret Key

 

String

必要な Kinesis Firehose コンポーネントのオプション

プロキシーと関連するクレデンシャル情報が設定された状態で、レジストリーに amazonKinesisClient を提供する必要があります。

27.4. 使用方法

27.4.1. Amazon Kinesis Firehose の設定

AmazonKinesisClient のインスタンスを作成し、それをレジストリーに BIND する必要があります。

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 URI オプションで AmazonKinesisFirehoseClient を参照する必要があります。

from("aws-kinesis-firehose://mykinesisdeliverystream?amazonKinesisFirehoseClient=#kinesisClient")
  .to("log:out?showAll=true");

27.4.2. AWS 認証情報の指定

新しい ClientConfiguration インスタンスを作成するときのデフォルトである DefaultAWSCredentialsProviderChain を使用して認証情報を取得することをお勧めしますが、createClient (…) を呼び出すときに別の AWSCredentialsProvider を指定できます。

27.4.3. レコードの保存が成功したときに Kinesis プロデューサーによって設定されるメッセージヘッダー

ヘッダータイプ説明

CamelAwsKinesisFirehoseRecordId

String

応答構文 で定義されているレコード ID

27.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.19 以降) に置き換える必要があります。

27.6. 関連項目

  • Configuring Camel (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]

URI には、?options=value&option2=value&…​ という形式でクエリーオプションを追加できます。

28.2. URI オプション

AWS KMS コンポーネントは、以下に示す 5 個のオプションをサポートしています。

名前説明デフォルトタイプ

configuration (advanced)

AWS KMS のデフォルト設定

 

KMSConfiguration

accessKey (producer)

Amazon AWS Access Key

 

String

secretKey (producer)

Amazon AWS Secret Key

 

String

region (producer)

KMS クライアントが動作する必要があるリージョン

 

String

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

AWS KMS エンドポイントは、URI 構文を使用して設定されます。

aws-kms:label

パスおよびクエリーパラメーターを使用します。

28.2.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

label

必須 論理名

 

String

28.2.2. クエリーパラメーター (8 つのパラメーター):

名前説明デフォルトタイプ

accessKey (producer)

Amazon AWS Access Key

 

String

kmsClient (producer)

既存の設定済み AWS KMS をクライアントとして使用する場合

 

AWSKMS

operation (producer)

必須 実行する操作

 

KMSOperations

proxyHost (producer)

KMS クライアントをインスタンス化するときにプロキシーホストを定義します。

 

String

proxyPort (producer)

KMS クライアントをインスタンス化するときにプロキシーポートを定義します。

 

Integer

region (producer)

KMS クライアントが動作する必要があるリージョン

 

String

secretKey (producer)

Amazon AWS Secret Key

 

String

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

28.3. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 12 のオプションをサポートします。

名前説明デフォルトタイプ

camel.component.aws-kms.access-key

Amazon AWS Access Key

 

String

camel.component.aws-kms.configuration.access-key

Amazon AWS Access Key

 

String

camel.component.aws-kms.configuration.kms-client

既存の設定済み AWS KMS をクライアントとして使用する場合

 

AWSKMS

camel.component.aws-kms.configuration.operation

実行する操作

 

KMSOperations

camel.component.aws-kms.configuration.proxy-host

KMS クライアントをインスタンス化するときにプロキシーホストを定義します。

 

String

camel.component.aws-kms.configuration.proxy-port

KMS クライアントをインスタンス化するときにプロキシーポートを定義します。

 

Integer

camel.component.aws-kms.configuration.region

KMS クライアントが動作する必要があるリージョン

 

String

camel.component.aws-kms.configuration.secret-key

Amazon AWS Secret Key

 

String

camel.component.aws-kms.enabled

aws-kms コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

Boolean

camel.component.aws-kms.region

KMS クライアントが動作する必要があるリージョン

 

String

camel.component.aws-kms.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

camel.component.aws-kms.secret-key

Amazon AWS Secret Key

 

String

必須の KMS コンポーネントオプション

Amazon KMS サービスにアクセスするには、レジストリーに amazonKmsClient を指定するか、accessKey と secretKey を指定する必要があります。

28.4. 使用方法

28.4.1. MQ プロデューサーによって評価されるメッセージヘッダー

ヘッダータイプ説明

CamelAwsKMSLimit

Integer

listKeys 操作の実行中に返されるキーの制限数

CamelAwsKMSOperation

String

実行する操作

CamelAwsKMSDescription

String

createKey 操作の実行中に使用するキーの説明

CamelAwsKMSKeyId

String

キー ID

28.4.2. KMS プロデューサーの操作

Camel-AWS KMS コンポーネントは、プロデューサー側で次の操作を提供します。

  • listKeys
  • createKey
  • disableKey
  • scheduleKeyDeletion
  • describeKey
  • enableKey

依存関係

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.5. 関連項目

  • Configuring Camel (Camel の設定)
  • コンポーネント
  • エンドポイント
  • スタートガイド
  • AWS コンポーネント

第29章 AWS Lambda コンポーネント

Camel バージョン 2.20 以降で利用可能

Lambda コンポーネントは、AWS Lambda 関数の作成、取得、一覧表示、削除、および呼び出しをサポートしています。

前提条件

有効な Amazon Web Services 開発者アカウントを持っていて、Amazon Lambda を使用するためにサインアップしている必要がある。詳細については、Amazon Lambda を参照してください。

Lambda 関数を作成するときは、少なくとも AWSLambdaBasicExecuteRole ポリシーがアタッチされた IAM ロールを指定する必要があります。

Warning

Lambda は地域サービスです。S3 バケットとは異なり、特定のリージョンで作成された Lambda 関数は他のリージョンでは使用できません。

29.1. URI 形式

aws-lambda://functionName[?options]

URI には、?options=value&option2=value&…​ という形式でクエリーオプションを追加できます。

29.2. URI オプション

AWS Lambda コンポーネントは、以下に示す 5 個のオプションをサポートしています。

名前説明デフォルトタイプ

configuration (advanced)

AWS Lambda のデフォルト設定

 

LambdaConfiguration

accessKey (producer)

Amazon AWS Access Key

 

String

secretKey (producer)

Amazon AWS Secret Key

 

String

region (producer)

Amazon AWS リージョン

 

String

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

AWS Lambda エンドポイントは、URI 構文を使用して設定されます。

aws-lambda:function

パスおよびクエリーパラメーターを使用します。

29.2.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

function

必須 Lambda 関数の名前。

 

String

29.2.2. クエリーパラメーター (8 つのパラメーター):

名前説明デフォルトタイプ

operation (producer)

必須 実行する操作。listFunctions、getFunction、createFunction、deleteFunction、または invokeFunction のいずれかです

 

LambdaOperations

region (producer)

Amazon AWS リージョン

 

String

awsLambdaClient (advanced)

既存の設定済みの AwsLambdaClient をクライアントとして使用する場合

 

AWSLambda

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

proxyHost (proxy)

Lambda クライアントをインスタンス化するときにプロキシーホストを定義します

 

String

proxyPort (proxy)

Lambda クライアントをインスタンス化するときにプロキシーポートを定義します

 

Integer

accessKey (security)

Amazon AWS Access Key

 

String

secretKey (security)

Amazon AWS Secret Key

 

String

29.3. Spring Boot Auto-Configuration

このコンポーネントは、以下に示す 13 のオプションをサポートします。

名前説明デフォルトタイプ

camel.component.aws-lambda.access-key

Amazon AWS Access Key

 

String

camel.component.aws-lambda.configuration.access-key

Amazon AWS Access Key

 

String

camel.component.aws-lambda.configuration.aws-lambda-client

既存の設定済みの AwsLambdaClient をクライアントとして使用する場合

 

AWSLambda

camel.component.aws-lambda.configuration.function

Lambda 関数の名前。

 

String

camel.component.aws-lambda.configuration.operation

実行する操作。listFunctions、getFunction、createFunction、deleteFunction、または invokeFunction のいずれかです

 

LambdaOperations

camel.component.aws-lambda.configuration.proxy-host

Lambda クライアントをインスタンス化するときにプロキシーホストを定義します

 

String

camel.component.aws-lambda.configuration.proxy-port

Lambda クライアントをインスタンス化するときにプロキシーポートを定義します

 

Integer

camel.component.aws-lambda.configuration.region

Amazon AWS リージョン

 

String

camel.component.aws-lambda.configuration.secret-key

Amazon AWS Secret Key

 

String

camel.component.aws-lambda.enabled

aws-lambda コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

Boolean

camel.component.aws-lambda.region

Amazon AWS リージョン

 

String

camel.component.aws-lambda.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

camel.component.aws-lambda.secret-key

Amazon AWS Secret Key

 

String

必要な Lambda コンポーネントオプション

Amazon Lambda サービスにアクセスするには、レジストリーに awsLambdaClient を指定するか、accessKey と secretKey を指定する必要があります

29.4. 使用方法

29.4.1. Lambda プロデューサーによって評価されるメッセージヘッダー

操作ヘッダータイプ説明必須

すべて

CamelAwsLambdaOperation

String

実行する操作。クエリーパラメーターとして渡されたオーバーライド操作

はい

createFunction

CamelAwsLambdaS3Bucket

String

デプロイパッケージを含む .zip ファイルが保存される Amazon S3 バケット名。このバケットは、Lambda 関数を作成しているのと同じ AWS リージョンに存在する必要があります。

いいえ

createFunction

CamelAwsLambdaS3Key

String

アップロードする Amazon S3 オブジェクト (デプロイパッケージ) のキー名。

いいえ

createFunction

CamelAwsLambdaS3ObjectVersion

String

アップロードする Amazon S3 オブジェクト (デプロイパッケージ) のバージョン。

いいえ

createFunction

CamelAwsLambdaZipFile

String

zip ファイル (デプロイメントパッケージ) のローカルパス。zip ファイルの内容をメッセージ本文に入れることもできます。

いいえ

createFunction

CamelAwsLambdaRole

String

Lambda が関数を実行して他のアマゾンウェブサービス (AWS) リソースにアクセスするときに引き受ける IAM ロールの Amazon リソースネーム (ARN)。

はい

createFunction

CamelAwsLambdaRuntime

String

アップロードする Lambda 関数のランタイム環境。(nodejs、nodejs4.3、nodejs6.10、java8、python2.7、python3.6、dotnetcore1.0、odejs4.3-edge)

はい

createFunction

CamelAwsLambdaHandler

String

実行を開始するために Lambda が呼び出すコード内の関数。Node.js の場合は、関数の module-name.export 値です。Java の場合は、package.class-name::handler または package.class-name にすることができます。

はい

createFunction

CamelAwsLambdaDescription

String

ユーザー提供の説明。

いいえ

createFunction

CamelAwsLambdaTargetArn

String

Amazon SQS キューまたは Amazon SNS トピックのターゲット ARN (Amazon リソースネーム) を含む親オブジェクト。

いいえ

createFunction

CamelAwsLambdaMemorySize

Integer

関数用に設定したメモリーサイズ (MB 単位)。64 MB の倍数である必要があります。

いいえ

createFunction

CamelAwsLambdaKMSKeyArn

String

関数の環境変数を暗号化するために使用される KMS キーの Amazon リソースネーム (ARN)。指定しない場合、AWS Lambda はデフォルトのサービスキーを使用します。

いいえ

createFunction

CamelAwsLambdaPublish

Boolean

このブール値パラメーターを使用して、AWS Lambda に Lambda 関数を作成し、バージョンをアトミック操作として発行するようにリクエストできます。

いいえ

createFunction

CamelAwsLambdaTimeout

Integer

Lambda が関数を終了する関数実行時間。デフォルトは 3 秒です。

いいえ

createFunction

CamelAwsLambdaTracingConfig

String

関数のトレース設定 (Active または PassThrough)。

いいえ

createFunction

CamelAwsLambdaEnvironmentVariables

Map<String, String>

環境の設定設定を表すキーと値のペア。

いいえ

createFunction

CamelAwsLambdaEnvironmentTags

Map<String, String>

新しい関数に割り当てられたタグ (キーと値のペア) のリスト。

いいえ

createFunction

CamelAwsLambdaSecurityGroupIds

List<String>

Lambda 関数が VPC 内のリソースにアクセスする場合、VPC 内の 1 つ以上のセキュリティーグループ ID のリスト。

いいえ

createFunction

CamelAwsLambdaSubnetIds

List<String>

Lambda 関数が VPC 内のリソースにアクセスする場合、VPC 内の 1 つ以上のサブネット ID のリスト。

いいえ

29.5. 利用可能な操作のリスト

  • listFunctions
  • getFunction,
  • createFunction
  • deleteFunction
  • invokeFunction
  • updateFunction
  • createEventSourceMapping
  • deleteEventSourceMapping
  • listEventSourceMapping

29.6. 例

コンポーネントがどのように機能するかを完全に理解するには、この 統合テスト を参照してください。

29.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.16 以降) に置き換える必要があります。

29.8. 関連項目

  • Configuring Camel (Camel の設定)
  • コンポーネント
  • エンドポイント
  • スタートガイド
  • AWS コンポーネント

第30章 AWS MQ コンポーネント

Camel バージョン 2.21 以降で利用可能

EC2 コンポーネントは、AWS MQ インスタンスの作成、実行、開始、停止、および終了をサポートしています。

前提条件

有効な Amazon Web Services 開発者アカウントを持っていて、Amazon MQ を使用するためにサインアップしている必要がある。詳細については、Amazon MQ を参照してください。

30.1. URI 形式

aws-mq://label[?options]

URI には、?options=value&option2=value&…​ という形式でクエリーオプションを追加できます。

30.2. URI オプション

AWS MQ コンポーネントは、以下に示す 5 個のオプションをサポートしています。

名前説明デフォルトタイプ

configuration (advanced)

AWS MQ のデフォルト設定

 

MQConfiguration

accessKey (producer)

Amazon AWS Access Key

 

String

secretKey (producer)

Amazon AWS Secret Key

 

String

region (producer)

MQ クライアントが動作する必要がある地域

 

String

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

AWS MQ エンドポイントは、URI 構文を使用して設定されます。

aws-mq:label

パスおよびクエリーパラメーターを使用します。

30.2.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

label

必須 論理名

 

String

30.2.2. クエリーパラメーター (8 つのパラメーター):

名前説明デフォルトタイプ

accessKey (producer)

Amazon AWS Access Key

 

String

amazonMqClient (producer)

既存の設定済み AmazonMQClient をクライアントとして使用するには

 

AmazonMQ

operation (producer)

必須 実行する操作。It can be listBrokers,createBroker,deleteBroker

 

MQ 操作

proxyHost (producer)

MQ クライアントをインスタンス化する際にプロキシーホストを定義します。

 

String

proxyPort (producer)

MQ クライアントをインスタンス化する際にプロキシーポートを定義します。

 

Integer

region (producer)

MQ クライアントが動作する必要がある地域

 

String

secretKey (producer)

Amazon AWS Secret Key

 

String

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

30.3. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 12 のオプションをサポートします。

名前説明デフォルトタイプ

camel.component.aws-mq.access-key

Amazon AWS Access Key

 

String

camel.component.aws-mq.configuration.access-key

Amazon AWS Access Key

 

String

camel.component.aws-mq.configuration.amazon-mq-client

既存の設定済み AmazonMQClient をクライアントとして使用するには

 

AmazonMQ

camel.component.aws-mq.configuration.operation

実行する操作。It can be listBrokers,createBroker,deleteBroker

 

MQ 操作

camel.component.aws-mq.configuration.proxy-host

MQ クライアントをインスタンス化する際にプロキシーホストを定義します。

 

String

camel.component.aws-mq.configuration.proxy-port

MQ クライアントをインスタンス化する際にプロキシーポートを定義します。

 

Integer

camel.component.aws-mq.configuration.region

MQ クライアントが動作する必要がある地域

 

String

camel.component.aws-mq.configuration.secret-key

Amazon AWS Secret Key

 

String

camel.component.aws-mq.enabled

aws-mq コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

Boolean

camel.component.aws-mq.region

MQ クライアントが動作する必要がある地域

 

String

camel.component.aws-mq.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

camel.component.aws-mq.secret-key

Amazon AWS Secret Key

 

String

必要な EC2 コンポーネントオプション

Amazon EC2 サービスにアクセスするには、レジストリーに amazonEc2Client を指定するか、accessKey と secretKey を指定する必要があります。

30.4. 使用方法

30.4.1. MQ プロデューサーによって評価されるメッセージヘッダー

ヘッダータイプ説明

CamelAwsMQMaxResults

String

listBrokers オペレーションから取得する必要がある結果の数

CamelAwsMQBrokerName

String

ブローカー名

CamelAwsMQOperation

String

実行する操作

CamelAwsMQBrokerId

String

ブローカー ID

CamelAwsMQBrokerDeploymentMode

String

createBroker 操作でのブローカーのデプロイメントモード

CamelAwsMQBrokerInstanceType

String

createBroker オペレーションでの EC2 マシンのインスタンスタイプ

CamelAwsMQBrokerEngine

String

MQ のブローカーエンジン。デフォルトは ACTIVEMQ です

CamelAwsMQBrokerEngineVersion

String

MQ のブローカーエンジンのバージョン。現在、ACTIVEMQ の 5.15.6 と 5.15.0 の間で選択できます。

CamelAwsMQBrokerUsers

List<User>

MQ のユーザーのリスト

CamelAwsMQBrokerPubliclyAccessible

Boolean

MQ インスタンスを公開する必要があるかどうか。デフォルトは false です。

依存関係

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.5. 関連項目

  • Configuring Camel (Camel の設定)
  • コンポーネント
  • エンドポイント
  • スタートガイド
  • AWS コンポーネント

第31章 AWS S3 ストレージサービスコンポーネント

Camel バージョン 2.8 以降で利用可能

S3 コンポーネントは、Amazon の S3 サービスとの間でのオブジェクトの保存と取得をサポートしています。

前提条件

有効な Amazon Web Services 開発者アカウントを持っていて、Amazon S3 を使用するためにサインアップしている必要がある。詳細については、Amazon S3 を参照してください。

31.1. URI 形式

aws-s3://bucketNameOrArn[?options]

バケットがまだ存在しない場合は作成されます。
URI には、?options=value&option2=value&…​ という形式でクエリーオプションを追加できます。

たとえば、バケット 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 個のオプションをサポートしています。

名前説明デフォルトタイプ

configuration (advanced)

AWS S3 のデフォルト設定

 

S3 設定

accessKey (common)

Amazon AWS Access Key

 

String

secretKey (common)

Amazon AWS Secret Key

 

String

region (common)

バケットが配置されているリージョン。このオプションは、com.amazonaws.services.s3.model.CreateBucketRequest で使用されます。

 

String

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

AWS S3 Storage Service エンドポイントは、URI 構文を使用して設定されます。

aws-s3:bucketNameOrArn

パスおよびクエリーパラメーターを使用します。

31.2.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

bucketNameOrArn

必須 バケット名または ARN

 

String

31.2.2. クエリーパラメーター(50 パラメーター):

名前説明デフォルトタイプ

amazonS3Client (common)

リンクの com.amazonaws.services.sqs.AmazonS3 への参照:https://camel.apache.org/registry.htmlRegistry。

 

AmazonS3

pathStyleAccess (common)

S3 クライアントがパススタイルアクセスを使用するかどうか

false

boolean

policy (common)

com.amazonaws.services.s3.AmazonS3#setBucketPolicy() メソッドに設定されるこのキューのポリシー。

 

String

proxyHost (common)

SQS クライアントをインスタンス化するときにプロキシーホストを定義します。

 

String

proxyPort (common)

クライアント定義内で使用されるプロキシーポートを指定します。

 

Integer

region (common)

S3 クライアントが機能する必要があるリージョン

 

String

useIAMCredentials (common)

S3 クライアントが EC2 インスタンスに認証情報をロードすることを期待するか、静的認証情報が渡されることを期待するかを設定します。

false

boolean

encryptionMaterials (common)

対称/非対称クライアントを使用する場合に使用する暗号化マテリアル

 

EncryptionMaterials

useEncryption (common)

暗号化を使用する必要があるかどうかを定義する

false

boolean

bridgeErrorHandler (consumer)

コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

false

boolean

deleteAfterRead (consumer)

取得後に S3 からオブジェクトを削除します。削除は、エクスチェンジがコミットされた場合にのみ実行されます。ロールバックが発生すると、オブジェクトは削除されません。このオプションが false の場合、同じオブジェクトがポーリングで繰り返し取得されます。そのため、ルートで Idempotent Consumer EIP を使用して重複を除外する必要があります。S3Constants#BUCKET_NAME および S3Constants#KEY ヘッダー、または S3Constants#KEY ヘッダーのみを使用してフィルタリングできます。

true

boolean

fileName (consumer)

指定のファイル名を持つバケットからオブジェクトを取得します。

 

String

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

prefix (consumer)

対象のオブジェクトのみを消費するために com.amazonaws.services.s3.model.ListObjectsRequest で使用される接頭辞。

 

String

sendEmptyMessageWhenIdle (consumer)

ポーリングコンシューマーがファイルをポーリングしなかった場合、このオプションを有効にして、代わりに空のメッセージ (ボディーなし) を送信できます。

false

boolean

autocloseBody (consumer)

このオプションが true で、includeBody が true の場合、エクスチェンジの完了時に S3Object.close() メソッドが呼び出されます。このオプションは includeBody オプションと密接に関係しています。includeBody を true に設定し、autocloseBody を false に設定した場合、S3Object ストリームを閉じるのは呼び出し側が判断します。autocloseBody を true に設定すると、S3Object ストリームが自動的に閉じられます。

true

boolean

exceptionHandler (consumer)

コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

 

ExceptionHandler

exchangePattern (consumer)

コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。

 

ExchangePattern

pollStrategy (consumer)

プラグ可能な org.apache.camel.PollingConsumerPollingStrategy を使用すると、エクスチェンジが作成され、Camel でルーティングされる前に、通常はポーリング操作中に発生するエラー処理を制御するカスタム実装が提供できます。

 

PollingConsumerPoll Strategy

deleteAfterWrite (producer)

S3 ファイルのアップロード後にファイルオブジェクトを削除します。

false

boolean

multiPartUpload (producer)

true の場合、Camel はマルチパート形式のファイルをアップロードし、パートサイズは partSize のオプションによって決定されます。

false

boolean

operation (producer)

ユーザーがアップロードだけをしたくない場合に行う操作

 

S3 オペレーション

partSize (producer)

マルチパートのアップロードで使用される partSize を設定します。デフォルトのサイズは 25M です。

26214400

long

serverSideEncryption (producer)

AWS が管理するキーを使用してオブジェクトを暗号化するときに、サーバー側の暗号化アルゴリズムを設定します。たとえば、AES256 を使用します。

 

String

storageClass (producer)

com.amazonaws.services.s3.model.PutObjectRequest リクエストに設定するストレージクラス。

 

String

awsKMSKeyId (producer)

KMS が有効になっている場合に使用する KMS キーの ID を定義します。

 

String

useAwsKMS (producer)

KMS を使用する必要があるかどうかを定義します。

false

boolean

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

accelerateModeEnabled (advanced)

アクセラレートモードの有効化が true か false かを定義する

false

boolean

chunkedEncodingDisabled ( advanced)

無効化されたチャンクエンコーディングが true か false かを定義します

false

boolean

dualstackEnabled (advanced)

Dualstack の有効化が true か false かを定義する

false

boolean

forceGlobalBucketAccess Enabled (advanced)

Force Global Bucket Access の有効化が true か false かを定義します

false

boolean

payloadSigningEnabled (advanced)

有効なペイロード署名が true か false かを定義する

false

boolean

backoffErrorThreshold (scheduler)

backoffMultipler が開始する前に発生する必要がある後続のエラーポーリング (エラーによって失敗した) の数。

 

int

backoffIdleThreshold (scheduler)

backoffMultipler が開始する前に発生する必要がある後続のアイドルポーリングの数。

 

int

backoffMultiplier (scheduler)

後続のアイドル状態/エラーが連続して発生した場合に、スケジュールされたポーリングコンシューマーのバックオフを許可します。乗数は、実際に次の試行が行われる前にスキップされるポーリングの数です。このオプションが使用されている場合は、backoffIdleThreshold や backoffErrorThreshold も設定する必要があります。

 

int

delay (scheduler)

次のポーリングまでの時間 (ミリ秒単位)。60s (60 秒)、5m30s (5 分 30 秒)、1h (1 時間) などの単位を使用して時間値を指定することもできます。

500

long

greedy (scheduler)

greedy が有効で、以前の実行が 1 つ以上のメッセージをポーリングした場合、ScheduledPollConsumer は即座に再度実行されます。

false

boolean

initialDelay (scheduler)

最初のポーリングが開始されるまでの時間 (ミリ秒単位)。60s (60 秒)、5m30s (5 分 30 秒)、1h (1 時間) などの単位を使用して時間値を指定することもできます。

1000

long

runLoggingLevel (scheduler)

コンシューマーはポーリング時に開始/完了のログ行を記録します。このオプションを使用すると、ログレベルを設定できます。

TRACE

LoggingLevel

scheduledExecutorService (scheduler)

コンシューマーに使用するカスタム/共有スレッドプールを設定できます。デフォルトでは、各コンシューマーに独自の単一スレッドのスレッドプールがあります。

 

ScheduledExecutor Service

scheduler (scheduler)

camel-spring または camel-quartz2 コンポーネントから cron スケジューラーを使用します。

none

ScheduledPollConsumer Scheduler

schedulerProperties (scheduler)

カスタムスケジューラーまたは Quartz2 や Spring ベースのスケジューラーを使用する場合に、追加のプロパティーを設定します。

 

Map

startScheduler (scheduler)

スケジューラーを自動起動するかどうか。

true

boolean

timeUnit (scheduler)

initialDelay および delay オプションの時間単位。

MILLISECONDS

TimeUnit

useFixedDelay (scheduler)

固定遅延または固定レートを使用するかどうかを制御します。詳細は、JDK の ScheduledExecutorService を参照してください。

true

boolean

accessKey (security)

Amazon AWS Access Key

 

String

secretKey (security)

Amazon AWS Secret Key

 

String

31.3. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 34 個のオプションをサポートします。

名前説明デフォルトタイプ

camel.component.aws-s3.access-key

Amazon AWS Access Key

 

String

camel.component.aws-s3.configuration.accelerate-mode-enabled

アクセラレートモードの有効化が true か false かを定義する

false

Boolean

camel.component.aws-s3.configuration.access-key

Amazon AWS Access Key

 

String

camel.component.aws-s3.configuration.amazon-s3-client

リンクの com.amazonaws.services.sqs.AmazonS3 への参照:https://camel.apache.org/registry.htmlRegistry。

 

AmazonS3

camel.component.aws-s3.configuration.autoclose-body

このオプションが true で、includeBody が true の場合、エクスチェンジの完了時に S3Object.close() メソッドが呼び出されます。このオプションは includeBody オプションと密接に関係しています。includeBody を true に設定し、autocloseBody を false に設定した場合、S3Object ストリームを閉じるのは呼び出し側が判断します。autocloseBody を true に設定すると、S3Object ストリームが自動的に閉じられます。

true

Boolean

camel.component.aws-s3.configuration.aws-k-m-s-key-id

KMS が有効になっている場合に使用する KMS キーの ID を定義します。

 

String

camel.component.aws-s3.configuration.bucket-name

バケットの名前。バケットがまだ存在しない場合は作成されます。

 

String

camel.component.aws-s3.configuration.chunked-encoding-disabled

無効化されたチャンクエンコーディングが true か false かを定義します

false

Boolean

camel.component.aws-s3.configuration.delete-after-read

取得後に S3 からオブジェクトを削除します。削除は、エクスチェンジがコミットされた場合にのみ実行されます。ロールバックが発生すると、オブジェクトは削除されません。このオプションが false の場合、同じオブジェクトがポーリングで繰り返し取得されます。そのため、ルートで Idempotent Consumer EIP を使用して重複を除外する必要があります。S3Constants#BUCKET_NAME および S3Constants#KEY ヘッダー、または S3Constants#KEY ヘッダーのみを使用してフィルタリングできます。

true

Boolean

camel.component.aws-s3.configuration.delete-after-write

S3 ファイルのアップロード後にファイルオブジェクトを削除します。

false

Boolean

camel.component.aws-s3.configuration.dualstack-enabled

Dualstack の有効化が true か false かを定義する

false

Boolean

camel.component.aws-s3.configuration.encryption-materials

対称/非対称クライアントを使用する場合に使用する暗号化マテリアル

 

EncryptionMaterials

camel.component.aws-s3.configuration.file-name

指定のファイル名を持つバケットからオブジェクトを取得します。

 

String

camel.component.aws-s3.configuration.force-global-bucket-access-enabled

Force Global Bucket Access の有効化が true か false かを定義します

false

Boolean

camel.component.aws-s3.configuration.include-body

true の場合、エクスチェンジ本文はファイルの内容へのストリームに設定されます。false の場合、ヘッダーには S3 オブジェクトのメタデータが設定されますが、ボディーは null になります。このオプションは、autocloseBody オプションと密接に関係します。includeBody を true に設定し、autocloseBody を false に設定した場合、S3Object ストリームを閉じるのは呼び出し側が判断します。autocloseBody を true に設定すると、S3Object ストリームが自動的に閉じられます。

true

Boolean

camel.component.aws-s3.configuration.multi-part-upload

true の場合、Camel はマルチパート形式のファイルをアップロードし、パートサイズは partSize のオプションによって決定されます。

false

Boolean

camel.component.aws-s3.configuration.operation

ユーザーがアップロードだけをしたくない場合に行う操作

 

S3 オペレーション

camel.component.aws-s3.configuration.part-size

マルチパートのアップロードで使用される partSize を設定します。デフォルトのサイズは 25M です。

26214400

Long

camel.component.aws-s3.configuration.path-style-access

S3 クライアントがパススタイルアクセスを使用するかどうか

false

Boolean

camel.component.aws-s3.configuration.payload-signing-enabled

有効なペイロード署名が true か false かを定義する

false

Boolean

camel.component.aws-s3.configuration.policy

com.amazonaws.services.s3.AmazonS3#setBucketPolicy() メソッドに設定されるこのキューのポリシー。

 

String

camel.component.aws-s3.configuration.prefix

対象のオブジェクトのみを消費するために com.amazonaws.services.s3.model.ListObjectsRequest で使用される接頭辞。

 

String

camel.component.aws-s3.configuration.proxy-host

SQS クライアントをインスタンス化するときにプロキシーホストを定義します。

 

String

camel.component.aws-s3.configuration.proxy-port

クライアント定義内で使用されるプロキシーポートを指定します。

 

Integer

camel.component.aws-s3.configuration.region

S3 クライアントが機能する必要があるリージョン

 

String

camel.component.aws-s3.configuration.secret-key

Amazon AWS Secret Key

 

String

camel.component.aws-s3.configuration.server-side-encryption

AWS が管理するキーを使用してオブジェクトを暗号化するときに、サーバー側の暗号化アルゴリズムを設定します。たとえば、AES256 を使用します。

 

String

camel.component.aws-s3.configuration.storage-class

com.amazonaws.services.s3.model.PutObjectRequest リクエストに設定するストレージクラス。

 

String

camel.component.aws-s3.configuration.use-aws-k-m-s

KMS を使用する必要があるかどうかを定義します。

false

Boolean

camel.component.aws-s3.configuration.use-encryption

暗号化を使用する必要があるかどうかを定義する

false

Boolean

camel.component.aws-s3.enabled

aws-s3 コンポーネントを有効にする

true

Boolean

camel.component.aws-s3.region

バケットが配置されているリージョン。このオプションは、com.amazonaws.services.s3.model.CreateBucketRequest で使用されます。

 

String

camel.component.aws-s3.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

camel.component.aws-s3.secret-key

Amazon AWS Secret Key

 

String

必須の S3 コンポーネントオプション

Amazon の S3 にアクセスするには、レジストリーに amazonDDBClient を指定するか、accessKey と secretKey を指定する必要があります。

31.4. バッチコンシューマー

このコンポーネントは、Batch Consumer を実装します。

これにより、たとえば、このバッチに存在するメッセージの数を知ることができ、たとえば、Aggregator にこの数のメッセージを集約させることができます。

31.5. 使用方法

31.5.1. S3 プロデューサーによって評価されるメッセージヘッダー

ヘッダータイプ説明

CamelAwsS3BucketName

String

このオブジェクトが保存されるバケット名、または現在の操作に使用されるバケット名

CamelAwsS3BucketDestinationName

String

Camel 2.18: 現在の操作に使用されるバケット宛先名。

CamelAwsS3ContentLength

Long

このオブジェクトのコンテンツの長さ。

CamelAwsS3ContentType

String

このオブジェクトのコンテンツタイプ。

CamelAwsS3ContentControl

String

Camel 2.8.2: このオブジェクトのコンテンツコントロール。

CamelAwsS3ContentDisposition

String

Camel 2.8.2: このオブジェクトのコンテンツ処理。

CamelAwsS3ContentEncoding

String

Camel 2.8.2: このオブジェクトのコンテンツエンコーディング。

CamelAwsS3ContentMD5

String

Camel 2.8.2: このオブジェクトの md5 チェックサム。

CamelAwsS3DestinationKey

String

Camel 2.18: 現在の操作に使用される宛先キー。

CamelAwsS3Key

String

このオブジェクトが格納されるキー、または現在の操作に使用されるキー

CamelAwsS3LastModified

java.util.Date

Camel 2.8.2: このオブジェクトの最終変更タイムスタンプ。

CamelAwsS3Operation

String

Camel 2.18 : 実行する操作。許可されている値は、copyObject、deleteObject、listBuckets、deleteBucket、downloadLink、listObjects です。

CamelAwsS3StorageClass

String

Camel 2.8.4: このオブジェクトのストレージクラス。

CamelAwsS3CannedAcl

String

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.model.AccessControlList を参照してください。

CamelAwsS3Headers

Map<String,String>

Camel 2.15.0 : カスタム objectMetadata ヘッダーの取得または設定をサポート。

CamelAwsS3ServerSideEncryption

String

Camel 2.16: AWS が管理するキーを使用してオブジェクトを暗号化するときに、サーバー側の暗号化アルゴリズムを設定します。たとえば、AES256 を使用します。

CamelAwsS3VersionId

String

現在の操作から格納または返されるオブジェクトのバージョン ID

31.5.2. S3 プロデューサーによって設定されたメッセージヘッダー

ヘッダータイプ説明

CamelAwsS3ETag

String

新しくアップロードされたオブジェクトの ETag 値。

CamelAwsS3VersionId

String

新しくアップロードされたオブジェクトの オプション のバージョン ID。

CamelAwsS3DownloadLinkExpiration

String

URL ダウンロードリンクの有効期限 (ミリ秒)。リンクは CamelAwsS3DownloadLink レスポンスヘッダーに保存されます。

31.5.3. S3 コンシューマーによって設定されたメッセージヘッダー

ヘッダータイプ説明

CamelAwsS3Key

String

このオブジェクトが格納されるキー。

CamelAwsS3BucketName

String

このオブジェクトが含まれるバケットの名前。

CamelAwsS3ETag

String

RFC 1864 に従って、関連付けられたオブジェクトの 16 進数でエンコードされた 128 ビット MD5 ダイジェスト。このデータは、呼び出し元によって受信されたデータが Amazon S3 によって送信されたデータと同じであることを確認するための整合性チェックとして使用されます。

CamelAwsS3LastModified

日付

Last-Modified ヘッダーの値。Amazon S3 が関連付けられたオブジェクトへの変更を最後に記録した日時を示します。

CamelAwsS3VersionId

String

関連する Amazon S3 オブジェクトのバージョン ID (利用可能な場合)。バージョン ID は、オブジェクトのバージョニングが有効になっている Amazon S3 バケットにオブジェクトがアップロードされた場合にのみ、オブジェクトに割り当てられます。

CamelAwsS3ContentType

String

関連付けられたオブジェクトに格納されているコンテンツのタイプを示す Content-Type HTTP ヘッダー。このヘッダーの値は、標準の MIME タイプです。

CamelAwsS3ContentMD5

String

RFC 1864 に従って、関連付けられたオブジェクト (ヘッダーを含まないコンテンツ) の base64 でエンコードされた 128 ビット MD5 ダイジェスト。このデータは、Amazon S3 が受信したデータが発信者が送信したデータと同じであることを確認するためのメッセージ整合性チェックとして使用されます。

CamelAwsS3ContentLength

Long

関連付けられたオブジェクトのサイズをバイト単位で示す Content-Length HTTP ヘッダー。

CamelAwsS3ContentEncoding

String

オブジェクトに適用されたコンテンツエンコーディングと、Content-Type フィールドによって参照されるメディアタイプを取得するために適用する必要があるデコードメカニズムを指定する、オプション の Content-Encoding HTTP ヘッダー。

CamelAwsS3ContentDisposition

String

オプション の Content-Disposition HTTP ヘッダー。保存するオブジェクトの推奨ファイル名などの表示情報を指定します。

CamelAwsS3ContentControl

String

ユーザーが HTTP 要求/応答チェーンに沿ってキャッシュ動作を指定できるようにする、オプション の Cache-Control HTTP ヘッダー。

CamelAwsS3ServerSideEncryption

String

Camel 2.16: AWS が管理するキーを使用してオブジェクトを暗号化するときに、サーバー側の暗号化アルゴリズムを設定します。

31.5.4. S3 プロデューサーの操作

Camel-AWS s3 コンポーネントは、プロデューサー側で次の操作を提供します。

  • copyObject
  • deleteObject
  • listBuckets
  • deleteBucket
  • downloadLink
  • listObjects

31.5.5. 高度な 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.5.6. S3 コンポーネントで KMS を使用する

AWS インフラストラクチャーを使用して AWS KMS を使用してデータを暗号化/復号化するには、次の例のように 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");

このようにして、KMS キー 3f0637ad-296a-3dfe-a796-e60654fb128c を使用してファイル test.txt を暗号化するよう S3 に依頼します。このファイルのダウンロードを要求すると、ダウンロードの直前に復号化が行われます。

31.5.7. s3 コンポーネントで useIAMCredentials を使用する

AWS IAM クレデンシャルを使用するには、Camel アプリケーションを起動する EC2 に、効果的に実行するためにアタッチされた適切なポリシーを含む IAM ロールが関連付けられていることを最初に確認する必要があります。この機能は、リモートインスタンスでのみ true に設定する必要があることに注意してください。さらに明確にするために、IAM は AWS 固有のコンポーネントであるため、静的認証情報をローカルで使用する必要がありますが、AWS 環境は管理が容易になるはずです。これを実装して理解したら、AWS 環境のクエリーパラメーター useIAMCredentials を true に設定できます。これをローカル環境とリモート環境に基づいて効果的にオンとオフを切り替えるには、システム環境変数でこのクエリーパラメーターを有効にすることを検討できます。たとえば、"isRemote" というシステム環境変数が true に設定されている場合、コードで "useIAMCredentials" クエリーパラメーターを "true" に設定できます (これを行うには他にも多くの方法があり、これは単純な例として機能するはずです)。静的認証情報の必要性が完全になくなるわけではありませんが、AWS 環境で IAM 認証情報を使用すると、リモート環境で更新する必要がなくなり、セキュリティーが大幅に向上します (IAM 認証情報は 6 時間ごとに自動的に更新され、ポリシーが更新されると更新されます)。更新しました)。これは AWS が認証情報を管理するために推奨する方法であるため、できるだけ頻繁に使用する必要があります。

31.6. 依存関係

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.7. 関連項目

  • Configuring Camel (Camel の設定)
  • コンポーネント
  • エンドポイント
  • スタートガイド
  • AWS コンポーネント

第32章 AWS SimpleDB コンポーネント

Camel バージョン 2.9 以降で利用可能

sdb コンポーネントは、Amazon の SDB サービスとの間でのデータの保存と取得をサポートしています。

前提条件

有効な Amazon Web Services 開発者アカウントを持っていて、Amazon S3 を使用するためにサインアップしている必要がある。詳細については、Amazon SDB を参照してください。

32.1. URI 形式

aws-sdb://domainName[?options]

URI には、?options=value&option2=value&…​ という形式でクエリーオプションを追加できます。

32.2. URI オプション

AWS SimpleDB コンポーネントにはオプションがありません。

AWS SimpleDB エンドポイントは、URI 構文を使用して設定されます。

aws-sdb:domainName

パスおよびクエリーパラメーターを使用します。

32.2.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

domainName

必須 現在使用しているドメインの名前。

 

String

32.2.2. クエリーパラメーター (10 パラメーター)

名前説明デフォルトタイプ

accessKey (producer)

Amazon AWS Access Key

 

String

amazonSDBClient (producer)

AmazonSimpleDB をクライアントとして使用するには

 

AmazonSimpleDB

consistentRead (producer)

データの読み取り時に強力な整合性を適用するべきかどうかを決定します。

false

boolean

maxNumberOfDomains (producer)

返されるドメイン名の最大数。範囲は 1 から 100 です。

 

Integer

operation (producer)

実行する操作

PutAttributes

SdbOperations

proxyHost (producer)

DDB クライアントをインスタンス化する際にプロキシーホストを定義します。

 

String

proxyPort (producer)

SQS クライアントをインスタンス化するときにプロキシーポートを定義します。

 

Integer

region (producer)

DDB クライアントが機能する必要があるリージョン。

 

String

secretKey (producer)

Amazon AWS Secret Key

 

String

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

32.3. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 2 つのオプションをサポートします。

名前説明デフォルトタイプ

camel.component.aws-sdb.enabled

aws-sdb コンポーネントを有効にする

true

Boolean

camel.component.aws-sdb.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

必須の SDB コンポーネントオプション

Amazon の SDB にアクセスするには、レジストリーに amazonSDBClient を指定するか、accessKey と secretKey を指定する必要があります。

32.4. 使用方法

32.4.1. SDB プロデューサーによって評価されるメッセージヘッダー

ヘッダータイプ説明

CamelAwsSdbAttributes

Collection<Attribute>

作用する属性のリスト。

CamelAwsSdbAttributeNames

Collection<String>

取得する属性の名前。

CamelAwsSdbConsistentRead

Boolean

データの読み取り時に強力な整合性を適用するべきかどうかを決定します。

CamelAwsSdbDeletableItems

Collection<DeletableItem>

バッチで削除操作を実行するアイテムのリスト。

CamelAwsSdbDomainName

String

現在使用しているドメインの名前。

CamelAwsSdbItemName

String

このアイテムの一意のキー

CamelAwsSdbMaxNumberOfDomains

Integer

返されるドメイン名の最大数。範囲は 1 * から 100 です。

CamelAwsSdbNextToken

String

ドメイン/項目名の次のリストの開始位置を指定する文字列。

CamelAwsSdbOperation

String

URI オプションからの操作をオーバーライドします。

CamelAwsSdbReplaceableAttributes

Collection<ReplaceableAttribute>

アイテムに入れる属性のリスト。

CamelAwsSdbReplaceableItems

Collection<ReplaceableItem>

ドメインに入れるアイテムのリスト。

CamelAwsSdbSelectExpression

String

ドメインのクエリーに使用される式。

CamelAwsSdbUpdateCondition

UpdateCondition

指定された場合、指定された属性が更新/削除されるかどうかを決定する更新条件。

32.4.2. DomainMetadata 操作中に設定されるメッセージヘッダー

ヘッダータイプ説明

CamelAwsSdbTimestamp

Integer

メタデータが計算された日時 (エポック (UNIX) 秒単位)。

CamelAwsSdbItemCount

Integer

ドメイン内のすべてのアイテムの数。

CamelAwsSdbAttributeNameCount

Integer

ドメイン内の一意の属性名の数。

CamelAwsSdbAttributeValueCount

Integer

ドメイン内のすべての属性の名前と値のペアの数。

CamelAwsSdbAttributeNameSize

Long

ドメイン内のすべての一意の属性名の合計サイズ (バイト単位)。

CamelAwsSdbAttributeValueSize

Long

ドメイン内のすべての属性値の合計サイズ (バイト単位)。

CamelAwsSdbItemNameSize

Long

ドメイン内のすべての項目名の合計サイズ (バイト単位)。

32.4.3. GetAttributes 操作中に設定されるメッセージヘッダー

ヘッダータイプ説明

CamelAwsSdbAttributes

List<Attribute>

操作によって返される属性の一覧。

32.4.4. ListDomains 操作中に設定されるメッセージヘッダー

ヘッダータイプ説明

CamelAwsSdbDomainNames

List<String>

式に一致するドメイン名のリスト。

CamelAwsSdbNextToken

String

指定された MaxNumberOfDomains よりも多くのドメインがまだ利用可能であることを示す不透明なトークン。

32.4.5. Select 操作中に設定されるメッセージヘッダー

ヘッダータイプ説明

CamelAwsSdbItems

List<Item>

select 式に一致するアイテムのリスト。

CamelAwsSdbNextToken

String

MaxNumberOfItems を超えるアイテムが一致したか、応答サイズが 1 メガバイトを超えたか、または実行時間が 5 秒を超えたかを示す不透明なトークン。

32.4.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.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.4 以降) に置き換える必要があります。

32.6. 関連項目

  • Configuring Camel (Camel の設定)
  • コンポーネント
  • エンドポイント
  • スタートガイド
  • AWS コンポーネント

第33章 AWS シンプル電子メールサービスコンポーネント

Camel バージョン 2.9 以降で利用可能

ses コンポーネントは、Amazon の SES サービスを使用したメールの送信をサポートしています。

前提条件

有効な Amazon Web Services 開発者アカウントを持っていて、Amazon SES を使用するためにサインアップしている必要がある。詳細については、Amazon SES を参照してください。

33.1. URI 形式

aws-ses://from[?options]

URI には、?options=value&option2=value&…​ という形式でクエリーオプションを追加できます。

33.2. URI オプション

AWS Simple Email Service コンポーネントは、以下に示す 5個のオプションをサポートしています。

名前説明デフォルトタイプ

configuration (advanced)

AWS SES のデフォルト設定

 

SesConfiguration

accessKey (producer)

Amazon AWS Access Key

 

String

secretKey (producer)

Amazon AWS Secret Key

 

String

region (producer)

SES クライアントが機能する必要があるリージョン。

 

String

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

AWS Simple Email Service エンドポイントは、URI 構文を使用して設定されます。

aws-ses:from

パスおよびクエリーパラメーターを使用します。

33.2.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

from

必須 送信者の電子メールアドレス。

 

String

33.2.2. クエリーパラメーター (11 パラメーター)

名前説明デフォルトタイプ

amazonSESClient (producer)

AmazonSimpleEmailService をクライアントとして使用するには

 

AmazonSimpleEmail Service

proxyHost (producer)

SNS クライアントをインスタンス化するときにプロキシーホストを定義します。

 

String

proxyPort (producer)

SES クライアントをインスタンス化するときにプロキシーポートを定義します。

 

Integer

region (producer)

SES クライアントが機能する必要があるリージョン。

 

String

replyToAddresses (producer)

メッセージの返信先電子メールアドレスのリスト。CamelAwsSesReplyToAddresses ヘッダーを使用してオーバーライドします。

 

List

returnPath (producer)

バウンス通知の転送先の電子メールアドレス。CamelAwsSesReturnPath ヘッダーを使用してオーバーライドします。

 

String

subject (producer)

メッセージヘッダー 'CamelAwsSesSubject' が存在しない場合に使用されるサブジェクト。

 

String

to (producer)

宛先メールアドレスのリスト。CamelAwsSesTo ヘッダーでオーバーライドできます。

 

List

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

accessKey (security)

Amazon AWS Access Key

 

String

secretKey (security)

Amazon AWS Secret Key

 

String

33.3. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 16 のオプションをサポートします。

名前説明デフォルトタイプ

camel.component.aws-ses.access-key

Amazon AWS Access Key

 

String

camel.component.aws-ses.configuration.access-key

Amazon AWS Access Key

 

String

camel.component.aws-ses.configuration.amazon-s-e-s-client

AmazonSimpleEmailService をクライアントとして使用するには

 

AmazonSimpleEmail Service

camel.component.aws-ses.configuration.from

送信者の電子メールアドレス。

 

String

camel.component.aws-ses.configuration.proxy-host

SNS クライアントをインスタンス化するときにプロキシーホストを定義します。

 

String

camel.component.aws-ses.configuration.proxy-port

SES クライアントをインスタンス化するときにプロキシーポートを定義します。

 

Integer

camel.component.aws-ses.configuration.region

SES クライアントが機能する必要があるリージョン。

 

String

camel.component.aws-ses.configuration.reply-to-addresses

メッセージの返信先電子メールアドレスのリスト。CamelAwsSesReplyToAddresses ヘッダーを使用してオーバーライドします。

 

List

camel.component.aws-ses.configuration.return-path

バウンス通知の転送先の電子メールアドレス。CamelAwsSesReturnPath ヘッダーを使用してオーバーライドします。

 

String

camel.component.aws-ses.configuration.secret-key

Amazon AWS Secret Key

 

String

camel.component.aws-ses.configuration.subject

メッセージヘッダー 'CamelAwsSesSubject' が存在しない場合に使用されるサブジェクト。

 

String

camel.component.aws-ses.configuration.to

宛先メールアドレスのリスト。CamelAwsSesTo ヘッダーでオーバーライドできます。

 

List

camel.component.aws-ses.enabled

aws-ses コンポーネントを有効にする

true

Boolean

camel.component.aws-ses.region

SES クライアントが機能する必要があるリージョン。

 

String

camel.component.aws-ses.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

camel.component.aws-ses.secret-key

Amazon AWS Secret Key

 

String

必須の SES コンポーネントオプション

Amazon の SES にアクセスするには、レジストリーに amazonSESClient を指定するか、accessKey と secretKey を指定する必要があります。

33.4. 使用方法

33.4.1. SES プロデューサーによって評価されるメッセージヘッダー

ヘッダータイプ説明

CamelAwsSesFrom

String

送信者の電子メールアドレス。

CamelAwsSesTo

List<String>

このメールの宛先。

CamelAwsSesSubject

String

メッセージの件名。

CamelAwsSesReplyToAddresses

List<String>

メッセージの返信先電子メールアドレス。

CamelAwsSesReturnPath

String

バウンス通知の転送先の電子メールアドレス。

CamelAwsSesHtmlEmail

Boolean

Camel 2.12.3 以降 メールの内容が HTML の場合に表示するフラグ。

33.4.2. SES プロデューサによって設定されるメッセージヘッダー

ヘッダータイプ説明

CamelAwsSesMessageId

String

Amazon SES メッセージ ID。

33.4.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.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.4 以降) に置き換える必要があります。

33.6. 関連項目

  • Configuring Camel (Camel の設定)
  • コンポーネント
  • エンドポイント
  • スタートガイド
  • AWS コンポーネント

第34章 AWS シンプル通知システムコンポーネント

Camel バージョン 2.8 以降で利用可能

SNS コンポーネントを使用すると、メッセージを Amazon Simple Notification Topic に送信できます。Amazon API の実装は AWS SDK によって提供されます。

前提条件

有効な Amazon Web Services 開発者アカウントを持っていて、Amazon Kinesis を使用するためにサインアップしている必要がある。詳細については、Amazon SNS を参照してください。

34.1. URI 形式

aws-sns://topicNameOrArn[?options]

トピックがまだ存在しない場合は作成されます。
URI には、?options=value&option2=value&…​ という形式でクエリーオプションを追加できます。

34.2. URI オプション

AWS Simple Notification System コンポーネントは、以下に示す 5 個のオプションをサポートしています。

名前説明デフォルトタイプ

configuration (advanced)

AWS SNS のデフォルト設定

 

SnsConfiguration

accessKey (producer)

Amazon AWS Access Key

 

String

secretKey (producer)

Amazon AWS Secret Key

 

String

region (producer)

SNS クライアントが機能する必要があるリージョン

 

String

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

AWS Simple Notification System エンドポイントは、URI 構文を使用して設定されます。

aws-sns:topicNameOrArn

パスおよびクエリーパラメーターを使用します。

34.2.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

topicNameOrArn

必須 トピック名または ARN

 

String

34.2.2. クエリーパラメーター (11 パラメーター)

名前説明デフォルトタイプ

amazonSNSClient (producer)

AmazonSNS をクライアントとして使用します。

 

AmazonSNS

headerFilterStrategy (producer)

カスタムの HeaderFilterStrategy を使用して、ヘッダーから Camel または Camel からヘッダーにマッピングします。

 

HeaderFilterStrategy

messageStructure (producer)

json などの使用するメッセージ構造。

 

String

policy (producer)

このキューのポリシー

 

String

proxyHost (producer)

SNS クライアントをインスタンス化するときにプロキシーホストを定義します。

 

String

proxyPort (producer)

SNS クライアントをインスタンス化するときにプロキシーポートを定義します。

 

Integer

region (producer)

SNS クライアントが機能する必要があるリージョン

 

String

subject (producer)

メッセージヘッダー 'CamelAwsSnsSubject' が存在しない場合に使用されるサブジェクト。

 

String

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

accessKey (security)

Amazon AWS Access Key

 

String

secretKey (security)

Amazon AWS Secret Key

 

String

34.3. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 16 のオプションをサポートします。

名前説明デフォルトタイプ

camel.component.aws-sns.access-key

Amazon AWS Access Key

 

String

camel.component.aws-sns.configuration.access-key

Amazon AWS Access Key

 

String

camel.component.aws-sns.configuration.amazon-s-n-s-client

AmazonSNS をクライアントとして使用します。

 

AmazonSNS

camel.component.aws-sns.configuration.message-structure

json などの使用するメッセージ構造。

 

String

camel.component.aws-sns.configuration.policy

このキューのポリシー

 

String

camel.component.aws-sns.configuration.proxy-host

SNS クライアントをインスタンス化するときにプロキシーホストを定義します。

 

String

camel.component.aws-sns.configuration.proxy-port

SNS クライアントをインスタンス化するときにプロキシーポートを定義します。

 

Integer

camel.component.aws-sns.configuration.region

SNS クライアントが機能する必要があるリージョン

 

String

camel.component.aws-sns.configuration.secret-key

Amazon AWS Secret Key

 

String

camel.component.aws-sns.configuration.subject

メッセージヘッダー 'CamelAwsSnsSubject' が存在しない場合に使用されるサブジェクト。

 

String

camel.component.aws-sns.configuration.topic-arn

作成されたトピックに割り当てられた Amazon リソースネーム (ARN)。

 

String

camel.component.aws-sns.configuration.topic-name

トピックの名前。

 

String

camel.component.aws-sns.enabled

aws-sns コンポーネントを有効にする

true

Boolean

camel.component.aws-sns.region

SNS クライアントが機能する必要があるリージョン

 

String

camel.component.aws-sns.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

camel.component.aws-sns.secret-key

Amazon AWS Secret Key

 

String

必要な SNS コンポーネントオプション

Amazon の SNS にアクセスするには、レジストリーに amazonDDBClient を指定するか、accessKey と secretKey を指定する必要があります。

34.4. 使用方法

34.4.1. SNS プロデューサーによって評価されるメッセージヘッダー

ヘッダータイプ説明

CamelAwsSnsSubject

String

Amazon SNS メッセージの件名。設定されていない場合は、SnsConfiguration の件名が使用されます。

34.4.2. SNS プロデューサーによって設定されるメッセージヘッダー

ヘッダータイプ説明

CamelAwsSnsMessageId

String

Amazon SNS メッセージ ID。

34.4.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.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 以降) に置き換える必要があります。

34.6. 関連項目

  • Configuring Camel (Camel の設定)
  • コンポーネント
  • エンドポイント
  • スタートガイド
  • AWS コンポーネント

第35章 AWS シンプルキューサービスコンポーネント

Camel バージョン 2.6 以降で利用可能

sqs コンポーネントは、Amazon の SQS サービス へのメッセージの送受信をサポートしています。

前提条件

有効な Amazon Web Services 開発者アカウントを持っていて、Amazon SQS を使用するためにサインアップしている必要がある。詳細については、Amazon SQS を参照してください。

35.1. URI 形式

aws-sqs://queueNameOrArn[?options]

キューがまだ存在しない場合は作成されます。
URI には、?options=value&option2=value&…​ という形式でクエリーオプションを追加できます。

35.2. URI オプション

AWS Simple Queue Service コンポーネントは、以下に示す 5 個のオプションをサポートしています。

名前説明デフォルトタイプ

configuration (advanced)

AWS SQS のデフォルト設定。

 

SqsConfiguration

accessKey (common)

Amazon AWS Access Key

 

String

secretKey (common)

Amazon AWS Secret Key

 

String

region (common)

サービス URL を作成するために queueOwnerAWSAccountId で使用できるキューリージョンを指定します。

 

String

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

AWS Simple Queue Service エンドポイントは、URI 構文を使用して設定されます。

aws-sqs:queueNameOrArn

パスおよびクエリーパラメーターを使用します。

35.2.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

queueNameOrArn

必須 キュー名または ARN

 

String

35.2.2. クエリーパラメーター(49 個のパラメーター):

名前説明デフォルトタイプ

amazonAWSHost (common)

Amazon AWS クラウドのホスト名。

amazonaws.com

String

amazonSQSClient (common)

AmazonSQS をクライアントとして使用します。

 

AmazonSQS

headerFilterStrategy (common)

カスタムの HeaderFilterStrategy を使用して、ヘッダーから Camel または Camel からヘッダーにマッピングします。

 

HeaderFilterStrategy

queueOwnerAWSAccountId (common)

異なるアカウント所有者でキューを接続する必要がある場合は、キュー所有者の aws アカウント ID を指定します。

 

String

region (common)

サービス URL を作成するために queueOwnerAWSAccountId で使用できるキューリージョンを指定します。

 

String

useIAMCredentials (common)

SQS クライアントが EC2 インスタンスでクレデンシャルのロードすること、または静的クレデンシャルが渡されることを SNS クライアントが想定すべきかどうかを設定します。

false

boolean

attributeNames (consumer)

消費時に受け取る属性名のリスト。複数の値はコンマで区切ることができます。

 

String

bridgeErrorHandler (consumer)

コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

false

boolean

concurrentConsumers (consumer)

複数のスレッドを使用して sqs キューをポーリングし、スループットを向上させることができます。

1

int

defaultVisibilityTimeout (consumer)

デフォルトの表示タイムアウト (秒単位)。

 

Integer

deleteAfterRead (consumer)

メッセージが読まれた後、SQS からメッセージを削除します。

true

boolean

deleteIfFiltered (consumer)

エクスチェンジがフィルターを通過できなかった場合に、DeleteMessage を SQS キューに送信するかどうか。false でエクスチェンジがルートのアップストリームの Camel フィルターを通過しない場合は、DeleteMessage を送信しないでください。

true

boolean

extendMessageVisibility (consumer)

有効にすると、スケジュールされたバックグラウンドタスクにより、SQS でのメッセージの可視性が拡張され続けます。これは、メッセージの処理に時間がかかる場合に必要です。true に設定した場合は、defaultVisibilityTimeout を設定する必要があります。詳細については、Amazon ドキュメントを参照してください。

false

boolean

maxMessagesPerPoll (consumer)

各ポーリングのポーリング制限としてメッセージの最大数を取得します。デフォルトは無制限ですが、0 または負の数を使用して無制限として無効にします。

 

int

messageAttributeNames (consumer)

消費時に受け取るメッセージ属性名のリスト。複数の値はコンマで区切ることができます。

 

String

sendEmptyMessageWhenIdle (consumer)

ポーリングコンシューマーがファイルをポーリングしなかった場合、このオプションを有効にして、代わりに空のメッセージ (ボディーなし) を送信できます。

false

boolean

visibilityTimeout (consumer)

受信したメッセージが、com.amazonaws.services.sqs.model.SetQueueAttributesRequest で設定する ReceiveMessage リクエストによって取得された後、後続の取得リクエストから非表示になる期間 (秒単位)。これは、defaultVisibilityTimeout とは異なる場合にのみ意味があります。キューの可視性タイムアウト属性を永続的に変更します。

 

Integer

waitTimeSeconds (consumer)

メッセージがキューに入れられて応答に含まれるまで、ReceiveMessage アクション呼び出しが待機する時間 (0 から 20) です。

 

Integer

exceptionHandler (consumer)

コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

 

ExceptionHandler

exchangePattern (consumer)

コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。

 

ExchangePattern

pollStrategy (consumer)

プラグ可能な org.apache.camel.PollingConsumerPollingStrategy を使用すると、エクスチェンジが作成され、Camel でルーティングされる前に、通常はポーリング操作中に発生するエラー処理を制御するカスタム実装が提供できます。

 

PollingConsumerPoll Strategy

delaySeconds (producer)

数秒間メッセージの送信を遅延します。

 

Integer

messageDeduplicationId Strategy (producer)

FIFO キューの場合のみ。メッセージに messageDeduplicationId を設定するストラテジー。useExchangeId または useContentBasedDeduplication のいずれかをオプションとして使用できます。useContentBasedDeduplication オプションでは、メッセージに messageDeduplicationId が設定されません。

useExchangeId

MessageDeduplicationId Strategy

messageGroupIdStrategy (producer)

FIFO キューの場合のみ。メッセージに messageGroupId を設定するストラテジー。useConstant、useExchangeId、usePropertyValue のいずれかをオプションとして使用できます。usePropertyValue オプションでは、CamelAwsMessageGroupId プロパティーの値が使用されます。

 

MessageGroupIdStrategy

delayQueue (advanced)

delaySeconds オプションをキューまたは単一のメッセージに適用するかどうかを定義します。

false

boolean

queueUrl (advanced)

queueUrl を明示的に定義します。queueUrl に影響を与えるその他のパラメーターはすべて無視されます。このパラメーターは、テストのために SQS の仮実装 (モック) に接続すること目的としています。

 

String

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

backoffErrorThreshold (scheduler)

backoffMultipler が開始する前に発生する必要がある後続のエラーポーリング (エラーによって失敗した) の数。

 

int

backoffIdleThreshold (scheduler)

backoffMultipler が開始する前に発生する必要がある後続のアイドルポーリングの数。

 

int

backoffMultiplier (scheduler)

後続のアイドル状態/エラーが連続して発生した場合に、スケジュールされたポーリングコンシューマーのバックオフを許可します。乗数は、実際に次の試行が行われる前にスキップされるポーリングの数です。このオプションが使用されている場合は、backoffIdleThreshold や backoffErrorThreshold も設定する必要があります。

 

int

delay (scheduler)

次のポーリングまでの時間 (ミリ秒単位)。60s (60 秒)、5m30s (5 分 30 秒)、1h (1 時間) などの単位を使用して時間値を指定することもできます。

500

long

greedy (scheduler)

greedy が有効で、以前の実行が 1 つ以上のメッセージをポーリングした場合、ScheduledPollConsumer は即座に再度実行されます。

false

boolean

initialDelay (scheduler)

最初のポーリングが開始されるまでの時間 (ミリ秒単位)。60s (60 秒)、5m30s (5 分 30 秒)、1h (1 時間) などの単位を使用して時間値を指定することもできます。

1000

long

runLoggingLevel (scheduler)

コンシューマーはポーリング時に開始/完了のログ行を記録します。このオプションを使用すると、ログレベルを設定できます。

TRACE

LoggingLevel

scheduledExecutorService (scheduler)

コンシューマーに使用するカスタム/共有スレッドプールを設定できます。デフォルトでは、各コンシューマーに独自の単一スレッドのスレッドプールがあります。

 

ScheduledExecutor Service

scheduler (scheduler)

camel-spring または camel-quartz2 コンポーネントから cron スケジューラーを使用します。

none

ScheduledPollConsumer Scheduler

schedulerProperties (scheduler)

カスタムスケジューラーまたは Quartz2 や Spring ベースのスケジューラーを使用する場合に、追加のプロパティーを設定します。

 

Map

startScheduler (scheduler)

スケジューラーを自動起動するかどうか。

true

boolean

timeUnit (scheduler)

initialDelay および delay オプションの時間単位。

MILLISECONDS

TimeUnit

useFixedDelay (scheduler)

固定遅延または固定レートを使用するかどうかを制御します。詳細は、JDK の ScheduledExecutorService を参照してください。

true

boolean

proxyHost (proxy)

SQS クライアントをインスタンス化するときにプロキシーホストを定義します。

 

String

proxyPort (proxy)

SQS クライアントをインスタンス化するときにプロキシーポートを定義します。

 

Integer

maximumMessageSize (キュー)

このキューの SQS メッセージに含めることができる maximumMessageSize (バイト単位)。

 

Integer

messageRetentionPeriod (queue)

このキューの SQS によってメッセージが保持される messageRetentionPeriod (秒単位)。

 

Integer

ポリシー (キュー)

このキューのポリシー

 

String

receiveMessageWaitTime Seconds (キュー)

要求で WaitTimeSeconds を指定しない場合は、キュー属性 ReceiveMessageWaitTimeSeconds を使用して待機時間を決定します。

 

Integer

redrivePolicy (キュー)

DeadLetter キューにメッセージを送信するポリシーを指定します。Amazon ドキュメントで詳細を参照してください。

 

String

accessKey (security)

Amazon AWS Access Key

 

String

secretKey (security)

Amazon AWS Secret Key

 

String

35.3. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 31 のオプションをサポートします。

名前説明デフォルトタイプ

camel.component.aws-sqs.access-key

Amazon AWS Access Key

 

String

camel.component.aws-sqs.configuration.access-key

Amazon AWS Access Key

 

String

camel.component.aws-sqs.configuration.amazon-a-w-s-host

Amazon AWS クラウドのホスト名。

amazonaws.com

String

camel.component.aws-sqs.configuration.amazon-s-q-s-client

AmazonSQS をクライアントとして使用します。

 

AmazonSQS

camel.component.aws-sqs.configuration.attribute-names

消費時に受け取る属性名のリスト。複数の値はコンマで区切ることができます。

 

String

camel.component.aws-sqs.configuration.concurrent-consumers

複数のスレッドを使用して sqs キューをポーリングし、スループットを向上させることができます。

1

Integer

camel.component.aws-sqs.configuration.default-visibility-timeout

デフォルトの表示タイムアウト (秒単位)。

 

Integer

camel.component.aws-sqs.configuration.delay-queue

delaySeconds オプションをキューまたは単一のメッセージに適用するかどうかを定義します。

false

Boolean

camel.component.aws-sqs.configuration.delay-seconds

数秒間メッセージの送信を遅延します。

 

Integer

camel.component.aws-sqs.configuration.delete-after-read

メッセージが読まれた後、SQS からメッセージを削除します。

true

Boolean

camel.component.aws-sqs.configuration.delete-if-filtered

エクスチェンジがフィルターを通過できなかった場合に、DeleteMessage を SQS キューに送信するかどうか。false でエクスチェンジがルートのアップストリームの Camel フィルターを通過しない場合は、DeleteMessage を送信しないでください。

true

Boolean

camel.component.aws-sqs.configuration.extend-message-visibility

有効にすると、スケジュールされたバックグラウンドタスクにより、SQS でのメッセージの可視性が拡張され続けます。これは、メッセージの処理に時間がかかる場合に必要です。true に設定した場合は、defaultVisibilityTimeout を設定する必要があります。詳細については、Amazon ドキュメントを参照してください。

false

Boolean

camel.component.aws-sqs.configuration.maximum-message-size

このキューの SQS メッセージに含めることができる maximumMessageSize (バイト単位)。

 

Integer

camel.component.aws-sqs.configuration.message-attribute-names

消費時に受け取るメッセージ属性名のリスト。複数の値はコンマで区切ることができます。

 

String

camel.component.aws-sqs.configuration.message-retention-period

このキューの SQS によってメッセージが保持される messageRetentionPeriod (秒単位)。

 

Integer

camel.component.aws-sqs.configuration.policy

このキューのポリシー

 

String

camel.component.aws-sqs.configuration.proxy-host

SQS クライアントをインスタンス化するときにプロキシーホストを定義します。

 

String

camel.component.aws-sqs.configuration.proxy-port

SQS クライアントをインスタンス化するときにプロキシーポートを定義します。

 

Integer

camel.component.aws-sqs.configuration.queue-name

キューの名前。キューがまだ存在しない場合は作成されます。

 

String

camel.component.aws-sqs.configuration.queue-owner-a-w-s-account-id

異なるアカウント所有者でキューを接続する必要がある場合は、キュー所有者の aws アカウント ID を指定します。

 

String

camel.component.aws-sqs.configuration.queue-url

queueUrl を明示的に定義します。queueUrl に影響を与えるその他のパラメーターはすべて無視されます。このパラメーターは、テストのために SQS の仮実装 (モック) に接続すること目的としています。

 

String

camel.component.aws-sqs.configuration.receive-message-wait-time-seconds

要求で WaitTimeSeconds を指定しない場合は、キュー属性 ReceiveMessageWaitTimeSeconds を使用して待機時間を決定します。

 

Integer

camel.component.aws-sqs.configuration.redrive-policy

DeadLetter キューにメッセージを送信するポリシーを指定します。Amazon ドキュメントで詳細を参照してください。

 

String

camel.component.aws-sqs.configuration.region

サービス URL を作成するために queueOwnerAWSAccountId で使用できるキューリージョンを指定します。

 

String

camel.component.aws-sqs.configuration.secret-key

Amazon AWS Secret Key

 

String

camel.component.aws-sqs.configuration.visibility-timeout

受信したメッセージが、com.amazonaws.services.sqs.model.SetQueueAttributesRequest で設定する ReceiveMessage リクエストによって取得された後、後続の取得リクエストから非表示になる期間 (秒単位)。これは、defaultVisibilityTimeout とは異なる場合にのみ意味があります。キューの可視性タイムアウト属性を永続的に変更します。

 

Integer

camel.component.aws-sqs.configuration.wait-time-seconds

メッセージがキューに入れられて応答に含まれるまで、ReceiveMessage アクション呼び出しが待機する時間 (0 から 20) です。

 

Integer

camel.component.aws-sqs.enabled

aws-sqs コンポーネントを有効にする

true

Boolean

camel.component.aws-sqs.region

サービス URL を作成するために queueOwnerAWSAccountId で使用できるキューリージョンを指定します。

 

String

camel.component.aws-sqs.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

camel.component.aws-sqs.secret-key

Amazon AWS Secret Key

 

String

必須の SQS コンポーネントオプション

Amazon の SQS にアクセスするには、レジストリーに amazonDDBClient を指定するか、accessKey と secretKey を指定する必要があります。

35.4. バッチコンシューマー

このコンポーネントは、Batch Consumer を実装します。

これにより、たとえば、このバッチに存在するメッセージの数を知ることができ、たとえば、Aggregator にこの数のメッセージを集約させることができます。

35.5. 使用方法

35.5.1. SQS プロデューサーによって設定されるメッセージヘッダー

ヘッダータイプ説明

CamelAwsSqsMD5OfBody

String

Amazon SQS メッセージの MD5 チェックサム。

CamelAwsSqsMessageId

String

Amazon SQS メッセージ ID。

CamelAwsSqsDelaySeconds

Integer

Camel 2.11 以降、Amazon SQS メッセージが他のユーザーに表示される遅延秒数。

35.5.2. SQS コンシューマーによって設定されるメッセージヘッダー

ヘッダータイプ説明

CamelAwsSqsMD5OfBody

String

Amazon SQS メッセージの MD5 チェックサム。

CamelAwsSqsMessageId

String

Amazon SQS メッセージ ID。

CamelAwsSqsReceiptHandle

String

Amazon SQS メッセージ受信ハンドル。

CamelAwsSqsMessageAttributes

Map<String, String>

Amazon SQS メッセージ属性。

35.5.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.4. SQS キューの作成または更新

SQS コンポーネントでは、エンドポイントが開始されると、チェックが実行され、キューの存在に関する情報が取得されます。SQSConfiguration オプションを使用して QueueAttributeName マッピングを介して作成をカスタマイズできます。

from("aws-sqs://MyQueue?amazonSQSClient=#client&delay=5000&maxMessagesPerPoll=5")
.to("mock:result");

この例では、AWS で MyQueue キューがまだ作成されていない場合、SQS 設定のデフォルトパラメーターで作成されます。すでに AWS で稼働している場合は、SQS 設定オプションを使用して既存の AWS 設定をオーバーライドします。

35.5.5. 単一メッセージの DelayQueue VS 遅延

2.23.0 から、コンポーネントに新しいオプション delayQueue が追加されました。オプション delayQueue が true に設定されている場合、SQS キューは DelaySeconds オプションが遅延として指定された DelayQueue になります。DelayQueue の詳細については、AWS SQS のドキュメント を参照してください。考慮すべき重要な情報の 1 つは、次のとおりです。

  • 標準キューの場合、キューごとの遅延設定は遡及的ではありません。設定を変更しても、すでにキューにあるメッセージの遅延には影響しません。
  • FIFO キューの場合、キューごとの遅延設定は遡及的です。設定を変更すると、すでにキューにあるメッセージの遅延に影響します。

公式ドキュメントに記載されているとおりです。単一のメッセージに遅延を指定する場合は、delayQueue オプションを無視できますが、エンキューされたすべてのメッセージに固定遅延を追加する必要がある場合は、このオプションを true に設定できます。

35.5.6. SQS コンポーネントで AWS IAM 認証情報を使用する

AWS IAM クレデンシャルを使用するには、Camel アプリケーションを起動する EC2 インスタンスに関連付けられた IAM ロールがあり、適切なポリシーがアタッチされていることを最初に確認する必要があります。

この機能は、リモートインスタンスでのみ true に設定する必要があります。さらに、IAM は AWS 固有のコンポーネントであるため、静的認証情報もローカルで使用する必要があります。

この機能を実装するには、useIAMCredentialstrue に設定します。

注記

ローカル環境とリモート環境に基づいてこの機能のオンとオフを切り替えるには、システム環境変数でこのクエリーパラメーターを有効にすることを検討できます。たとえば、isRemote という名前のシステム環境変数が true に設定されている場合、コードで useIAMCredentials クエリーパラメーターを true に設定できます。

この機能により、静的な認証情報が完全に不要になるわけではありませんが、AWS 環境で IAM 認証情報を使用すると、リモート環境でリフレッシュする必要がなくなり、IAM 認証情報は 6 時間ごとに自動的にリフレッシュされ、EC2のセキュリティポリシーが更新されたときにも更新されるのでより安全です。

これは AWS が認証情報を管理するために推奨する方法であるため、できるだけ頻繁に使用する必要があります。

35.6. 依存関係

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.7. JMS スタイルのセレクター

SQS ではセレクターを使用できませんが、キャメルフィルター 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.8. 単一のメッセージを削除

単一のメッセージを削除するには、deleteMessage 操作を使用します。削除するメッセージの受信ハンドルヘッダーを設定する必要があります。

from("direct:start")
  .setHeader(SqsConstants.SQS_OPERATION, constant("deleteMessage"))
  .setHeader(SqsConstants.RECEIPT_HANDLE, constant("123456"))
  .to("aws-sqs://camel-1?accessKey=RAW(xxx)&secretKey=RAW(xxx)&region=EU_WEST_1");

その結果、メッセージが削除されたかどうかを確認するために使用できる DeleteMessageResult インスタンスを含む交換が得られます。

35.9. 関連項目

  • Configuring Camel (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]

URI には、?options=value&option2=value&…​ という形式でクエリーオプションを追加できます。

36.2. URI オプション

AWS Simple Workflow コンポーネントは、以下に示す 5 個のオプションをサポートしています。

名前説明デフォルトタイプ

configuration (advanced)

AWS SWF のデフォルト設定

 

SWFConfiguration

accessKey (common)

Amazon AWS Access Key。

 

String

secretKey (common)

Amazon AWS Secret Key。

 

String

region (common)

Amazon AWS リージョン。

 

String

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

AWS Simple Workflow エンドポイントは、URI 構文を使用して設定されます。

aws-swf:type

パスおよびクエリーパラメーターを使用します。

36.2.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

type

必要な アクティビティーまたはワークフロー

 

String

36.2.2. クエリーパラメーター (30 パラメーター)

名前説明デフォルトタイプ

amazonSWClient (common)

指定された AmazonSimpleWorkflowClient をクライアントとして使用する場合

 

AmazonSimpleWorkflow Client

dataConverter (common)

データのシリアル化/逆シリアル化に使用する com.amazonaws.services.simpleworkflow.flow.DataConverter のインスタンス。

 

DataConverter

domainName (common)

使用するワークフロードメイン。

 

String

eventName (common)

使用するワークフローまたはアクティビティーイベント名。

 

String

region (common)

Amazon AWS リージョン。

 

String

version (common)

使用するワークフローまたはアクティビティーイベントのバージョン。

 

String

bridgeErrorHandler (consumer)

コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

false

boolean

exceptionHandler (consumer)

コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

 

ExceptionHandler

exchangePattern (consumer)

コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。

 

ExchangePattern

clientConfiguration Parameters (advanced)

マップのキー/値を使用して ClientConfiguration を設定する場合。

 

Map

startWorkflowOptions Parameters (advanced)

マップのキー/値を使用して StartWorkflowOptions を設定する場合。

 

Map

sWClientParameters (advanced)

マップのキー/値を使用して AmazonSimpleWorkflowClient を設定する場合。

 

Map

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

activityList (activity)

アクティビティーを使用するリスト名。

 

String

activitySchedulingOptions (activity)

アクティビティーのスケジュールオプション

 

アクティビティーのスケジュールオプション

activityThreadPoolSize (activity)

アクティビティーの作業プール内のスレッドの最大数。

100

int

activityTypeExecution Options (activity)

アクティビティー実行オプション

 

ActivityTypeExecution Options

activityTypeRegistration Options (activity)

アクティビティー登録オプション

 

ActivityType RegistrationOptions

childPolicy (workflow)

ワークフローを終了するときに子ワークフローで使用するポリシー。

 

String

executionStartToClose Timeout (workflow)

実行開始から終了までのタイムアウトを設定します。

3600

String

operation (workflow)

ワークフロー操作

開始

String

signalName (workflow)

ワークフローに送信するシグナルの名前。

 

String

stateResultType (workflow)

ワークフロー状態が照会されたときの結果のタイプ。

 

String

taskStartToCloseTimeout (workflow)

タスクの開始から終了までのタイムアウトを設定します。

600

String

terminationDetails (workflow)

ワークフローを終了するための詳細。

 

String

terminationReason (workflow)

ワークフローを終了する理由。

 

String

workflowList (workflow)

ワークフローを使用するリスト名。

 

String

workflowTypeRegistration Options (workflow)

ワークフロー登録オプション

 

WorkflowType RegistrationOptions

accessKey (security)

Amazon AWS Access Key。

 

String

secretKey (security)

Amazon AWS Secret Key。

 

String

36.3. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 32 のオプションをサポートします。

名前説明デフォルトタイプ

camel.component.aws-swf.access-key

Amazon AWS Access Key。

 

String

camel.component.aws-swf.configuration.access-key

Amazon AWS Access Key。

 

String

camel.component.aws-swf.configuration.activity-list

アクティビティーを使用するリスト名。

 

String

camel.component.aws-swf.configuration.activity-scheduling-options

アクティビティーのスケジュールオプション

 

アクティビティーのスケジュールオプション

camel.component.aws-swf.configuration.activity-thread-pool-size

アクティビティーの作業プール内のスレッドの最大数。

100

Integer

camel.component.aws-swf.configuration.activity-type-execution-options

アクティビティー実行オプション

 

ActivityTypeExecution Options

camel.component.aws-swf.configuration.activity-type-registration-options

アクティビティー登録オプション

 

ActivityType RegistrationOptions

camel.component.aws-swf.configuration.amazon-s-w-client

指定された AmazonSimpleWorkflowClient をクライアントとして使用する場合

 

AmazonSimpleWorkflow Client

camel.component.aws-swf.configuration.child-policy

ワークフローを終了するときに子ワークフローで使用するポリシー。

 

String

camel.component.aws-swf.configuration.client-configuration-parameters

マップのキー/値を使用して ClientConfiguration を設定する場合。

 

Map

camel.component.aws-swf.configuration.data-converter

データのシリアル化/逆シリアル化に使用する com.amazonaws.services.simpleworkflow.flow.DataConverter のインスタンス。

 

DataConverter

camel.component.aws-swf.configuration.domain-name

使用するワークフロードメイン。

 

String

camel.component.aws-swf.configuration.event-name

使用するワークフローまたはアクティビティーイベント名。

 

String

camel.component.aws-swf.configuration.execution-start-to-close-timeout

実行開始から終了までのタイムアウトを設定します。

3600

String

camel.component.aws-swf.configuration.operation

ワークフロー操作

開始

String

camel.component.aws-swf.configuration.region

Amazon AWS リージョン。

 

String

camel.component.aws-swf.configuration.s-w-client-parameters

マップのキー/値を使用して AmazonSimpleWorkflowClient を設定する場合。

 

Map

camel.component.aws-swf.configuration.secret-key

Amazon AWS Secret Key。

 

String

camel.component.aws-swf.configuration.signal-name

ワークフローに送信するシグナルの名前。

 

String

camel.component.aws-swf.configuration.start-workflow-options-parameters

マップのキー/値を使用して StartWorkflowOptions を設定する場合。

 

Map

camel.component.aws-swf.configuration.state-result-type

ワークフロー状態が照会されたときの結果のタイプ。

 

String

camel.component.aws-swf.configuration.task-start-to-close-timeout

タスクの開始から終了までのタイムアウトを設定します。

600

String

camel.component.aws-swf.configuration.termination-details

ワークフローを終了するための詳細。

 

String

camel.component.aws-swf.configuration.termination-reason

ワークフローを終了する理由。

 

String

camel.component.aws-swf.configuration.type

アクティビティーまたはワークフロー

 

String

camel.component.aws-swf.configuration.version

使用するワークフローまたはアクティビティーイベントのバージョン。

 

String

camel.component.aws-swf.configuration.workflow-list

ワークフローを使用するリスト名。

 

String

camel.component.aws-swf.configuration.workflow-type-registration-options

ワークフロー登録オプション

 

WorkflowType RegistrationOptions

camel.component.aws-swf.enabled

aws-swf コンポーネントを有効にする

true

Boolean

camel.component.aws-swf.region

Amazon AWS リージョン。

 

String

camel.component.aws-swf.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

camel.component.aws-swf.secret-key

Amazon AWS Secret Key。

 

String

必要な SWF コンポーネントオプション

Amazon の Simple Workflow Service にアクセスするには、レジストリーに amazonSWClient を指定するか、accessKey と secretKey を指定する必要があります。

36.4. 使用方法

36.4.1. SWF ワークフロープロデューサーによって評価されるメッセージヘッダー

ワークフロープロデューサーを使用すると、ワークフローと対話できます。新しいワークフローの実行を開始したり、その状態をクエリーしたり、実行中のワークフローにシグナルを送信したり、ワークフローを終了してキャンセルしたりできます。

ヘッダータイプ説明

CamelSWFOperation

String

ワークフローで実行する操作。サポートされている操作は次のとおりです。
SIGNAL、CANCEL、TERMINATE、GET_STATE、START、DESCRIBE、GET_HISTORY。

CamelSWFWorkflowId

String

使用するワークフロー ID。

CamelAwsDdbKeyCamelSWFRunId

String

使用するワークフロー実行 ID。

CamelSWFStateResultType

String

ワークフロー状態が照会されたときの結果のタイプ。

CamelSWFEventName

String

使用するワークフローまたはアクティビティーイベント名。

CamelSWFVersion

String

使用するワークフローまたはアクティビティーイベントのバージョン。

CamelSWFReason

String

ワークフローを終了する理由。

CamelSWFDetails

String

ワークフローを終了するための詳細。

CamelSWFChildPolicy

String

ワークフローを終了するときに子ワークフローで使用するポリシー。

36.4.2. SWF ワークフロープロデューサーによって設定されるメッセージヘッダー

ヘッダータイプ説明

CamelSWFWorkflowId

String

使用された、または新しく生成されたワークフロー ID。

CamelAwsDdbKeyCamelSWFRunId

String

使用または生成されたワークフロー実行 ID。

36.4.3. SWF ワークフローコンシューマーによって設定されるメッセージヘッダー

ワークフローコンシューマーは、ワークフローロジックを表します。開始されると、ワークフロー決定タスクのポーリングが開始され、それらが処理されます。決定タスクの処理に加えて、ワークフローコンシューマールートはシグナル (ワークフロープロデューサーから送信) または状態クエリーも受信します。ワークフローコンシューマーの主な目的は、アクティビティープロデューサーを使用して実行するアクティビティータスクをスケジュールすることです。実際、アクティビティータスクは、ワークフローコンシューマーによって開始されたスレッドからのみスケジュールできます。

ヘッダータイプ説明

CamelSWFAction

String

現在のイベントのタイプを示します: CamelSWFActionExecute、CamelSWFSignalReceivedAction、または CamelSWFGetStateAction。

CamelSWFWorkflowReplaying

boolean

現在の決定タスクがリプレイかどうかを示します。

CamelSWFWorkflowStartTime

long

この決定タスクの開始イベントの時刻。

36.4.4. SWF アクティビティープロデューサーによって設定されるメッセージヘッダー

アクティビティープロデューサーを使用すると、アクティビティータスクをスケジュールできます。アクティビティープロデューサーは、ワークフローコンシューマーによって開始されたスレッドからのみ使用できます。つまり、ワークフローコンシューマーによって開始された同期エクスチェンジを処理できます。

ヘッダータイプ説明

CamelSWFEventName

String

スケジュールするアクティビティー名。

CamelSWFVersion

String

スケジュールするアクティビティーバージョン。

36.4.5. SWF アクティビティーコンシューマーによって設定されるメッセージヘッダー

ヘッダータイプ説明

CamelSWFTaskToken

String

手動で完了したタスクの完了を報告するために必要なタスクトークン。

36.4.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.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.13 以降) に置き換える必要があります。

36.6. 関連項目

  • Configuring Camel (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 トレーサーの設定プロパティーは次のとおりです。

オプションデフォルト説明

addExcludePatterns

 

パターンに一致する Camel メッセージのトレースを無効にする除外パターンを設定します。コンテンツは Set<String> で、キーは routeId に一致するパターンです。このパターンは Intercept のルールを使用します。

setTracingStrategy

NoopTracingStrategy

BeanDefinitionProcessDefinition などの呼び出されたプロセッサー定義を追跡するために、カスタム Camel InterceptStrategy を提供できるようにします。TraceAnnotatedTracingStrategy は、 クラスレベルで @XRayTrace アノテーションを含む .bean (…) または .process (…) を介して呼び出されたすべてのクラスを追跡します。

現在、Camel アプリケーションの分散トレースを提供するように AWS XRay トレーサーを設定できる方法は 1 つだけです。

37.2.1. Explicit

AWS XRay Tracer に関連付けられた特定の依存関係とともに、camel-aws-xray コンポーネントを POM に含めます。

AWS XRay サポートを明示的に設定するには、XRayTracer をインスタンス化し、camel コンテキストを初期化します。オプションで Tracer を指定することも、代わりに Registry または 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 トレーサー Bean を定義するだけです。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 の場合、エクスチェンジの作成と削除のみが追跡されますが、特定の Bean または EIP パターンの呼び出しは追跡されません。

37.2.2. 包括的なルート実行の追跡

複数のルート間でのエクスチェンジの実行を追跡するために、エクスチェンジの作成時に一意のトレース ID が生成され、対応する値がまだ使用できない場合はヘッダーに格納されます。このトレース ID は、処理された交換の一貫したビューを維持するために、新しいエクスチェンジにコピーされます。

AWS XRay トレースはスレッドローカルベースで機能するため、現在のサブ/セグメントを新しいスレッドにコピーし、AWS XRay のドキュメント で説明されているように設定する必要があります。したがって、Camel AWS XRay コンポーネントは、渡された AWS XRay Entity を新しいスレッドに設定するためにコンポーネントが使用する追加のヘッダーフィールドを提供し、実行されたどのルートとも無関係に見える新しいセグメントを公開するのではなく、ルートへの追跡データを保持します。

コンポーネントは、エクスチェンジのヘッダーにある次の定数を使用します。

ヘッダー説明

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 サービスの Camel コンポーネント

Windows Azure サービス の Camel コンポーネントは、Camel から Azure サービスへの接続を提供します。

 

Azure ServiceCamel コンポーネントCamel バージョンコンポーネントの説明

ストレージ 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 の保存と取得をサポートしています。

前提条件

有効な Windows Azure ストレージアカウントが必要です。詳細については、Azure ドキュメントポータル を参照してください。

39.1. URI 形式

azure-blob://accountName/containerName[/blobName][?options]

ほとんどの場合、blobName が必要であり、Blob がまだ存在しない場合は作成されます。
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 Service エンドポイントは、URI 構文を使用して設定されます。

azure-blob:containerOrBlobUri

パスおよびクエリーパラメーターを使用します。

39.2.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

containerOrBlobUri

必須 コンテナーまたは BLOB コンパクト Uri

 

String

39.2.2. クエリーパラメーター (19 パラメーター)

名前説明デフォルトタイプ

azureBlobClient (common)

blob サービスクライアント

 

CloudBlob

blobOffset (common)

アップロードまたはダウンロード操作の BLOB オフセットを設定します。デフォルトは 0 です。

0

Long

blobType (common)

blob タイプを設定します。デフォルトは blockblob です

blockblob

BlobType

closeStreamAfterRead (common)

読み取り後にストリームを閉じるか、開いたままにします。デフォルトは true です。

true

boolean

credentials (common)

ストレージ認証情報を設定します。ほとんどの場合に必要です

 

StorageCredentials

dataLength (common)

ダウンロード操作またはページ blob アップロード操作のデータ長を設定する

 

Long

fileDir (common)

ダウンロードした blob が保存されるファイルディレクトリーを設定します

 

String

publicForRead (common)

ストレージリソースは、コンテンツを読み取るためにパブリックにすることができます。このプロパティーが有効になっている場合、認証情報を設定する必要はありません

false

boolean

streamReadSize (common)

blob コンテンツを読み取るときの最小読み取りサイズをバイト単位で設定します

 

int

bridgeErrorHandler (consumer)

コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

false

boolean

exceptionHandler (consumer)

コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

 

ExceptionHandler

exchangePattern (consumer)

コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。

 

ExchangePattern

blobMetadata (producer)

blob メタデータを設定する

 

Map

blobPrefix (producer)

BLOB の一覧表示に使用できる接頭辞を設定します

 

String

closeStreamAfterWrite (producer)

書き込み後にストリームを閉じるか、開いたままにします。デフォルトは true です。

true

boolean

operation (producer)

プロデューサーへの Blob サービス操作のヒント

listBlobs

BlobServiceOperations

streamWriteSize (producer)

ブロックおよびページブロックを書き込むためのバッファーのサイズを設定します

 

int

useFlatListing (producer)

フラットまたは階層的な blob リストを使用するかどうかを指定します

true

boolean

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

39.3. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 2 つのオプションをサポートします。

名前説明デフォルトタイプ

camel.component.azure-blob.enabled

azure-blob コンポーネントを有効にする

true

Boolean

camel.component.azure-blob.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

必須の Azure Storage Blob Service コンポーネントオプション

プライベート blob にアクセスする必要がある場合は、containerOrBlob 名と認証情報を提供する必要があります。

39.4. 使用方法

39.4.1. Azure Storage Blob Service プロデューサーによって評価されるメッセージヘッダー

ヘッダータイプ説明
   

39.4.2. Azure Storage Blob Service プロデューサーによって設定されるメッセージヘッダー

ヘッダータイプ説明

CamelFileName

String

ダウンロードした blob コンテンツのファイル名。

39.4.3. Azure Storage Blob Service プロデューサーコンシューマーによって設定されたメッセージヘッダー

ヘッダータイプ説明

CamelFileName

String

ダウンロードした blob コンテンツのファイル名。

39.4.4. Azure Blob Service の操作

すべてのブロックタイプに共通の操作

操作説明

getBlob

ブロブの内容を取得します。この操作の出力をブロブ範囲に制限できます。

deleteBlob

blob を削除します。

listBlobs

blob を一覧表示します。

ブロック blob 操作

操作説明

updateBlockBlob

新しいブロック blob を作成するか、既存のブロック blob コンテンツを上書きするブロック blob コンテンツを置きます。

uploadBlobBlocks

最初に blob ブロックのシーケンスを生成し、次にそれらを blob にコミットすることにより、ブロック blob コンテンツをアップロードします。メッセージの CommitBlockListLater プロパティーを有効にすると、後で commitBlobBlockList 操作を使用してコミットを実行できます。後で個々のブロック blob を更新できます。

commitBlobBlockList

以前に blob サービスにアップロードしたブロックリストに一連の blob ブロックをコミットします (メッセージ CommitBlockListLater プロパティーを有効にして updateBlockBlob 操作を使用)。

getBlobBlockList

ブロック blob リストを取得します。

blob 操作を追加する

操作説明

createAppendBlob

追加ブロックを作成します。デフォルトでは、ブロックがすでに存在する場合はリセットされません。メッセージの AppendBlobCreated プロパティーを有効にし、updateAppendBlob 操作を使用することで、代わりに追加 blob を作成できることに注意してください。

updateAppendBlob

新しいコンテンツを blob に追加します。この操作では、blob がまだ存在しない場合、およびメッセージの AppendBlobCreated プロパティーを有効にした場合にも blob が作成されます。

ページブロック操作

操作説明

createPageBlob

ページブロックを作成します。デフォルトでは、ブロックがすでに存在する場合はリセットされません。メッセージの PageBlobCreated プロパティーを有効にし、updatePageBlob 操作を使用して、ページ blob を作成 (およびその内容を設定) することもできます。

updatePageBlob

ページブロックを作成し (メッセージの PageBlobCreated プロパティーを有効にし、同じ名前のブロックがすでに存在する場合を除く)、この blob のコンテンツを設定します。

resizePageBlob

ページ blob のサイズを変更します。

clearPageBlob

ページ blob をクリアします。

getPageBlobRanges

ページ blob のページ範囲を取得します。

39.4.5. Azure Blob クライアントの設定

Camel アプリケーションがファイアウォールの背後で実行されている場合、または Azure Blob Client 設定をより詳細に制御する必要がある場合は、独自のインスタンスを作成できます。

StorageCredentials credentials = new StorageCredentialsAccountAndKey("camelazure", "thekey");

CloudBlob client = new CloudBlob("camelazure", credentials);

registry.bind("azureBlobClient", client);

Camel azure-blob コンポーネント設定でそれを参照します。

from("azure-blob:/camelazure/container1/blockBlob?azureBlobClient=#client")
.to("mock:result");

39.5. 依存関係

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.6. 関連項目

  • Configuring Camel (Camel の設定)
  • コンポーネント
  • エンドポイント
  • スタートガイド
  • Azure コンポーネント

第40章 Azure Storage Queue Service コンポーネント

Camel バージョン 2.19 以降で利用可能

Azure Queue コンポーネントは、Azure Storage Queue サービスとの間でのメッセージの保存と取得をサポートしています。

前提条件

有効な Microsoft Azure アカウントが必要です。詳細については、Azure ポータル を参照してください。

40.1. URI 形式

azure-queue://accountName/queueName[?options]

キューがまだ存在しない場合は作成されます。
URI には、?options=value&option2=value&…​ という形式でクエリーオプションを追加できます。

たとえば、camelazure ストレージアカウントのキュー messageQueue からメッセージコンテンツを取得するには、次のスニペットを使用します。

from("azure-queue:/camelazure/messageQueue").
to("file://queuedirectory");

40.2. URI オプション

Azure Storage Queue Service コンポーネントにはオプションがありません。

Azure ストレージキューサービスエンドポイントは、URI 構文を使用して設定されます。

azure-queue:containerAndQueueUri

パスおよびクエリーパラメーターを使用します。

40.2.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

containerAndQueueUri

必須 コンテナーキューのコンパクトな Uri

 

String

40.2.2. クエリーパラメーター (10 パラメーター)

名前説明デフォルトタイプ

azureQueueClient (common)

キューサービスクライアント

 

CloudQueue

credentials (common)

ストレージ認証情報を設定します。ほとんどの場合に必要です

 

StorageCredentials

bridgeErrorHandler (consumer)

コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

false

boolean

exceptionHandler (consumer)

コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

 

ExceptionHandler

exchangePattern (consumer)

コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。

 

ExchangePattern

messageTimeToLive (producer)

メッセージの生存時間 (秒)

 

int

messageVisibilityDelay (producer)

メッセージの可視性の遅延 (秒)

 

int

operation (producer)

ユーザーがメッセージだけを送信したくない場合に行う操作。3 つの列挙オプションがあり、値は次のいずれかになります: sendBatchMessage、deleteMessage、listQueues

listQueues

QueueServiceOperations

queuePrefix (producer)

キューの一覧表示に使用できる接頭辞を設定します

 

String

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

40.3. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 2 つのオプションをサポートします。

名前説明デフォルトタイプ

camel.component.azure-queue.enabled

azure-queue コンポーネントを有効にする

true

Boolean

camel.component.azure-queue.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

必須の Azure Storage Queue Service コンポーネントオプション

containerAndQueue URI と認証情報を提供する必要があります。

40.4. 使用方法

40.4.1. Azure Storage Queue Service プロデューサーによって評価されるメッセージヘッダー

ヘッダータイプ説明
   

40.4.2. Azure Storage Queue Service プロデューサーによって設定されたメッセージヘッダー

ヘッダータイプ説明
   

40.4.3. Azure Storage Queue Service プロデューサーコンシューマーによって設定されたメッセージヘッダー

ヘッダータイプ説明
   

40.4.4. Azure キューサービスの操作

操作説明

listQueues

キューを一覧表示します。

createQueue

キューを作成します。

deleteQueue

キューの削除。

addMessage

メッセージをキューに追加します。

retrieveMessage

キューからメッセージを取得します。

peekMessage

たとえば、キュー内のメッセージを表示して、メッセージが正しいキューに到着したかどうかを判断します。

updateMessage

キュー内のメッセージを更新します。

deleteMessage

キュー内のメッセージを削除します。

40.4.5. Azure キュークライアントの設定

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.5. 依存関係

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.6. 関連項目

  • Configuring Camel (Camel の設定)
  • コンポーネント
  • エンドポイント
  • スタートガイド
  • Azure コンポーネント

第41章 Barcode DataFormat

Camel バージョン 2.14 以降で利用可能

バーコードのデータ形式は zxing ライブラリー に基づいています。このコンポーネントの目的は、文字列 (マーシャル) からバーコードイメージを作成し、バーコードイメージから文字列 (アンマーシャル) を作成することです。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. バーコードオプション

バーコードデータ形式は、以下に示す 5 個のオプションをサポートしています。

名前デフォルトJava タイプ説明

width

 

Integer

バーコードの幅

height

 

Integer

バーコードの高さ

imageType

 

String

png などのバーコードのイメージタイプ

barcodeFormat

 

String

QR コードなどのバーコード形式

contentTypeHeader

false

Boolean

データフォーマットがデータ形式を実行できる場合は、データフォーマットの型で Content-Type ヘッダーを設定するかどうか。たとえば、XML にマーシャリングするデータ形式の場合は application/xml、JSON にマーシャリングするデータ形式の場合は JSon です。

41.3. Spring Boot Auto-Configuration

コンポーネントは、以下に示す 6 つのオプションをサポートします。

名前説明デフォルトタイプ

camel.dataformat.barcode.barcode-format

QR コードなどのバーコード形式

 

String

camel.dataformat.barcode.content-type-header

データフォーマットがデータ形式を実行できる場合は、データフォーマットの型で Content-Type ヘッダーを設定するかどうか。たとえば、XML にマーシャリングするデータ形式の場合は application/xml、JSON にマーシャリングするデータ形式の場合は JSon です。

false

Boolean

camel.dataformat.barcode.enabled

バーコードデータ形式を有効にする

true

Boolean

camel.dataformat.barcode.height

バーコードの高さ

 

Integer

camel.dataformat.barcode.image-type

png などのバーコードのイメージタイプ

 

String

camel.dataformat.barcode.width

バーコードの幅

 

Integer

ND

41.4. Java DSL を使用

まず、バーコードデータフォーマットクラスを初期化する必要があります。デフォルトのコンストラクター、またはパラメーター化されたコンストラクターのいずれかを使用できます (JavaDoc を参照)。デフォルト値は次のとおりです。

パラメーターデフォルト値

image type (BarcodeImageType)

PNG

width

100 px

height

100 px

encoding

UTF-8

バーコード形式 (BarcodeFormat)

QR-Code

// QR-Code default
DataFormat code = new BarcodeDataFormat();

zxing ヒントを使用する場合は、BarcodeDataFormat インスタンスの addToHintMap メソッドを使用できます。

code.addToHintMap(DecodeHintType.TRY_HARDER, Boolean.true);

考えられるヒントについては、xzing のドキュメントを参照してください。

41.4.1. マーシャリング

from("direct://code")
  .marshal(code)
  .to("file://barcode_out");

以下を使用して、テストクラスからルートを呼び出すことができます。

template.sendBody("direct://code", "This is a testmessage!");

barcode_out フォルダー内に次のイメージがあります。

image

41.4.2. アンマーシャリング

アンマーシャラーは汎用です。アンマーシャリングには、任意の BarcodeDataFormat インスタンスを使用できます。QR コード (生成) 用と PDF417 用の 2 つのインスタンスがある場合、どちらを使用するかは問題ではありません。

from("file://barcode_in?noop=true")
  .unmarshal(code) // for unmarshalling, the instance doesn't matter
  .to("mock:out");

上記の QR コードイメージを barcode_in フォルダーに貼り付けると、モック内に This is a testmessage! が表示されるはずです。バーコードデータ形式は、ヘッダー変数として見つけることができます。

名前タイプ説明

BarcodeFormat

String

com.google.zxing.BarcodeFormat の値。

 

 

第42章 Base64 DataFormat

Camel バージョン 2.11 以降で利用可能

Base64 データ形式は、base64 エンコードおよびデコードに使用されます。

42.1. オプション

Base64 データ形式は、以下に示す 4 個のオプションをサポートしています。

名前デフォルトJava タイプ説明

lineLength

76

Integer

エンコードされたデータの最大行長を指定します。デフォルトでは、76 が使用されます。

lineSeparator

 

String

使用する行区切り。デフォルトでは改行文字 (CRLF) を使用します。

urlSafe

false

Boolean

'' と / を発行する代わりに、- と _ をそれぞれ発行します。urlSafe は、エンコード操作にのみ適用されます。デコードは両方のモードをシームレスに処理します。デフォルトでは false です。

contentTypeHeader

false

Boolean

データフォーマットがデータ形式を実行できる場合は、データフォーマットの型で Content-Type ヘッダーを設定するかどうか。たとえば、XML にマーシャリングするデータ形式の場合は application/xml、JSON にマーシャリングするデータ形式の場合は JSon です。

42.2. Spring Boot Auto-Configuration

コンポーネントは、以下に示す 5 個のオプションをサポートします。

名前説明デフォルトタイプ

camel.dataformat.base64.content-type-header

データフォーマットがデータ形式を実行できる場合は、データフォーマットの型で Content-Type ヘッダーを設定するかどうか。たとえば、XML にマーシャリングするデータ形式の場合は application/xml、JSON にマーシャリングするデータ形式の場合は JSon です。

false

Boolean

camel.dataformat.base64.enabled

base64 データ形式を有効にする

true

Boolean

camel.dataformat.base64.line-length

エンコードされたデータの最大行長を指定します。デフォルトでは、76 が使用されます。

76

Integer

camel.dataformat.base64.line-separator

使用する行区切り。デフォルトでは改行文字 (CRLF) を使用します。

 

String

camel.dataformat.base64.url-safe

'' と / を発行する代わりに、- と _ をそれぞれ発行します。urlSafe は、エンコード操作にのみ適用されます。デコードは両方のモードをシームレスに処理します。デフォルトでは false です。

false

Boolean

ND

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>

デフォルトのオプションを使用する場合、ほとんどの場合、データ形式を宣言する必要はありません。その場合、以下に示すようにデータ形式をインラインで宣言できます。

42.3. 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.4. Unmarshal

この例では、newOrder プロセッサーによって処理される前に、ペイロードを JMS キューから byte オブジェクトにアンマーシャリングします。

from("jms://queue/order")
    .unmarshal().base64()
    .process("newOrder");

Spring の DSL では:

 <from uri="jms://queue/order">
 <unmarshal>
     <base64/>
 </unmarshal>
 <to uri="bean:newOrder"/>

42.5. 依存関係

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章 Bean コンポーネント

Camel バージョン 1.0 以降で利用可能

bean: コンポーネントは Bean を Camel メッセージエクスチェンジにバインドします。

43.1. URI 形式

bean:beanName[?options]

beanID には、レジストリーで Bean を検索するために使用される任意の文字列を指定できます。

43.2. オプション

Bean コンポーネントは、以下に示す 2 つのオプションをサポートします。

名前説明デフォルトタイプ

cache (advanced)

有効にすると、Camel は最初のレジストリールックアップの結果をキャッシュします。レジストリー内の Bean がシングルトンスコープとして定義されている場合、キャッシュを有効にできます。

 

Boolean

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

Bean エンドポイントは、URI 構文を使用して設定されます。

bean:beanName

パスおよびクエリーパラメーターを使用します。

43.2.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

beanName

必須: 呼び出す Bean の名前を設定します。

 

String

43.2.2. クエリーパラメーター (5 つのパラメーター):

名前説明デフォルトタイプ

method (producer)

Bean で呼び出すメソッドの名前を設定します。

 

String

cache (advanced)

有効にすると、Camel は最初のレジストリールックアップの結果をキャッシュします。レジストリー内の Bean がシングルトンスコープとして定義されている場合、キャッシュを有効にできます。

 

Boolean

multiParameterArray (advanced)

非推奨 メッセージ本文から渡されるパラメーターの処理方法。true の場合、メッセージボディーはパラメーターの配列である必要があります。注記: このオプションは Camel によって内部的に使用され、エンドユーザーが使用することを意図したものではありません。非推奨の注記: このオプションは Camel によって内部的に使用され、エンドユーザーが使用することを意図したものではありません。

false

boolean

parameters (advanced)

Bean の追加プロパティーの設定に使用します

 

Map

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

URI には、?option=value&option=value&…​ の形式でクエリーオプションを追加できます。

43.3. 使用

メッセージの消費に使用されるオブジェクトインスタンスは、レジストリーに明示的に登録する必要があります。たとえば、Spring を使用している場合は、Spring 設定 spring.xml で Bean を定義する必要があります。または、Spring を使用しない場合は、Bean を JNDI に登録します。

エラーフォーマットマクロ: スニペット: java.lang.IndexOutOfBoundsException: インデックス: 20、サイズ: 20

エンドポイントが登録されたら、エクスチェンジの処理に使用する Camel ルートを構築できます。

bean: エンドポイントは、ルートへの入力として定義できません。つまり、消費できません。一部のインバウンドメッセージエンドポイントから Bean エンドポイントに、出力としてのみルーティングできます。direct: または queue: エンドポイントを入力として使用することを検討してください。

ProxyHelpercreateProxy() メソッドを使用して、BeanExchange を生成して任意のエンドポイントに送信するプロキシーを作成できます。

Spring DSL を使用した同じルートの場合:

<route>
   <from uri="direct:hello">
   <to uri="bean:bye"/>
</route>

43.4. エンドポイントとしての Bean

Camel は、エンドポイントとしての Bean の呼び出しもサポートしています。ルートは以下のとおりです。

エクスチェンジが myBean にルーティングされると、Camel は Bean バインディングを使用して Bean を呼び出します。
Bean のソースは plain POJO です。

Camel は Bean バインディングを使用して sayHello メソッドを呼び出し、エクスチェンジの In ボディを String タイプに変換し、メソッドの出力をエクスチェンジの Out ボディに保存します。

43.5. Java DSL Bean 構文

Java DSL には、Bean コンポーネントのシンタックスシュガーが付属しています。Bean を明示的にエンドポイント (つまり to ("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");

Bean への参照の名前を渡す代わりに (Camel がレジストリーでそれを検索できるようにするため)、Bean 自体を指定できます。

// 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. Bean バインディング

呼び出される Bean メソッドの選択方法 (method パラメーターで明示的に指定されていない場合) と、メッセージからパラメーター値が構築される方法は、Camel 内のさまざまな Bean 統合メカニズム全体で使用される Bean バインディングメカニズムによりすべて定義されます。

43.7. 関連項目

  • Configuring Camel (Camel の設定)
  • コンポーネント
  • エンドポイント
  • スタートガイド
  • Class コンポーネント
  • Bean バインディング
  • Bean インテグレーション

第44章 BeanIO DataFormat

Camel バージョン 2.10 以降で利用可能

BeanIO データ形式は、BeanIO を使用してフラットペイロード (XML、CSV、区切り、または固定長形式など) を処理します。

BeanIO は、フラット形式からオブジェクト (POJO) へのマッピングを定義する マッピング XML ファイルを使用して設定されます。このマッピングファイルは必須です。

44.1. オプション

BeanIO データ形式は、以下に示す 9 個のオプションをサポートしています。

名前デフォルトJava タイプ説明

mapping

 

String

BeanIO マッピングファイル。デフォルトでは、クラスパスからロードされます。file:、http:、または classpath: の接頭辞を付けて、マッピングファイルのロード元を示すことができます。

streamName

 

String

使用するストリームの名前。

ignoreUnidentifiedRecords

false

Boolean

未確認のレコードを無視するかどうか。

ignoreUnexpectedRecords

false

Boolean

予期しないレコードを無視するかどうか。

ignoreInvalidRecords

false

Boolean

無効なレコードを無視するかどうか。

encoding

 

String

使用する文字セット。デフォルトでは、JVM プラットフォームのデフォルトの文字セットです。

beanReaderErrorHandlerType

 

String

解析中にカスタム org.apache.camel.dataformat.beanio.BeanIOErrorHandler をエラーハンドラーとして使用する場合。エラーハンドラーの完全修飾クラス名を設定します。カスタムエラーハンドラーを使用する場合、ignoreUnidentifiedRecords、ignoreUnexpectedRecords、ignoreInvalidRecords の各オプションが使用されない場合があることに注意してください。

unmarshalSingleObject

false

Boolean

このオプションは、オブジェクトのリストとしてアンマーシャリングするか、単一のオブジェクトのみとしてアンマーシャリングするかを制御します。前者はデフォルトのモードであり、後者は beanio が Camel メッセージを単一の POJO Bean にマップする特別なユースケースのみを対象としています。

contentTypeHeader

false

Boolean

データフォーマットがデータ形式を実行できる場合は、データフォーマットの型で Content-Type ヘッダーを設定するかどうか。たとえば、XML にマーシャリングするデータ形式の場合は application/xml、JSON にマーシャリングするデータ形式の場合は JSon です。

44.2. Spring Boot Auto-Configuration

コンポーネントは、以下に示す 10 個のオプションをサポートします。

名前説明デフォルトタイプ

camel.dataformat.beanio.bean-reader-error-handler-type

解析中にカスタム org.apache.camel.dataformat.beanio.BeanIOErrorHandler をエラーハンドラーとして使用する場合。エラーハンドラーの完全修飾クラス名を設定します。カスタムエラーハンドラーを使用する場合、ignoreUnidentifiedRecords、ignoreUnexpectedRecords、ignoreInvalidRecords の各オプションが使用されない場合があることに注意してください。

 

String

camel.dataformat.beanio.content-type-header

データフォーマットがデータ形式を実行できる場合は、データフォーマットの型で Content-Type ヘッダーを設定するかどうか。たとえば、XML にマーシャリングするデータ形式の場合は application/xml、JSON にマーシャリングするデータ形式の場合は JSon です。

false

Boolean

camel.dataformat.beanio.enabled

beanio データフォーマットを有効にする

true

Boolean

camel.dataformat.beanio.encoding

使用する文字セット。デフォルトでは、JVM プラットフォームのデフォルトの文字セットです。

 

String

camel.dataformat.beanio.ignore-invalid-records

無効なレコードを無視するかどうか。

false

Boolean

camel.dataformat.beanio.ignore-unexpected-records

予期しないレコードを無視するかどうか。

false

Boolean

camel.dataformat.beanio.ignore-unidentified-records

未確認のレコードを無視するかどうか。

false

Boolean

camel.dataformat.beanio.mapping

BeanIO マッピングファイル。デフォルトでは、クラスパスからロードされます。file:、http:、または classpath: の接頭辞を付けて、マッピングファイルのロード元を示すことができます。

 

String

camel.dataformat.beanio.stream-name

使用するストリームの名前。

 

String

camel.dataformat.beanio.unmarshal-single-object

このオプションは、オブジェクトのリストとしてアンマーシャリングするか、単一のオブジェクトのみとしてアンマーシャリングするかを制御します。前者はデフォルトのモードであり、後者は beanio が Camel メッセージを単一の POJO Bean にマップする特別なユースケースのみを対象としています。

false

Boolean

ND

44.3. 使用方法

マッピングファイルの例はここにあります

44.3.1. Java DSL の使用

BeanIODataFormat を使用するには、マッピングファイルとストリームの名前を使用してデータ形式を設定する必要があります。
Java DSL では、これは以下に示すように実行できます。streamName は employeeFile です。

次に、2 つのルートがあります。最初のルートは、CSV データを List<Employee> Java オブジェクトに変換するためのものです。次に、これを分割して、モックエンドポイント
行ごとにメッセージを受け取ります。

2 番目のルートは逆の操作で、List<Employee> を CSV データのストリームに変換します。

CSV データは、たとえば次のようになります。

44.3.2. XML DSL の使用

XML で BeanIO データ形式を使用するには、以下に示すように <beanio> XML タグを使用して設定する必要があります。ルートは上記の例と同様です。

44.4. 依存関係

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]

Beanstalk のデフォルト (localhost と 11300) が使用されるように、port のいずれか、または hostport : の両方を省略できます。tube を省略すると、Beanstalk コンポーネントは default という名前のチューブを使用します。

リッスンしているときに、いくつかのチューブからのジョブを監視したい場合があります。プラス記号で区切るだけです。

beanstalk://localhost:11300/tube1+tube2

チューブ名は URL デコードされるため、チューブ名に + や ? などの特殊文字が含まれている場合は、それらを適切に URL エンコードするか、RAW 構文を使用する必要があります。詳細については、こちら を参照してください。

ちなみに、ジョブを Beanstalk に書き込む場合、複数のチューブを指定することはできません。

45.3. Beanstalk オプション

Beanstalk コンポーネントは、以下にリストされている 2 個のオプションをサポートしています。

名前説明デフォルトタイプ

connectionSettings Factory (common)

Custom ConnectionSettingsFactory.Beanstalkd への接続に使用する ConnectionSettingsFactory を指定します。特に、beanstalkd デーモンを使用しない単体テストに役立ちます (ConnectionSettings をモックできます)。

 

ConnectionSettings Factory

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

Beanstalk エンドポイントは、URI 構文を使用して設定されます。

beanstalk:connectionSettings

パスおよびクエリーパラメーターを使用します。

45.3.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

connectionSettings

接続設定 ホスト: ポート/チューブ

 

String

45.3.2. クエリーパラメーター(26 個のパラメーター):

名前説明デフォルトタイプ

command (common)

put は、ジョブを Beanstalk に入れることを意味します。ジョブボディは Camel メッセージボディで指定します。ジョブ ID は、beanstalk.jobId メッセージヘッダーで返されます。メッセージヘッダー Beanstalk.jobId のジョブ ID を期待して、削除、解放、タッチ、または埋めます。オペレーションの結果は、beanstalk.result メッセージヘッダーで返されます。

 

BeanstalkCommand

jobDelay (common)

秒単位のジョブ遅延。

0

int

jobPriority (common)

仕事の優先順位。(0 が最高です。Beanstalk プロトコルを参照してください)

1000

long

jobTimeToRun (common)

ジョブの実行時間 (秒単位)。(0 の場合、beanstalkd デーモンはそれを自動的に 1 に上げます。Beanstalk プロトコルを参照してください)

60

int

awaitJob (consumer)

Beanstalk からジョブを確認する前に、ジョブの完了を待機するかどうか

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

exceptionHandler (consumer)

コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

 

ExceptionHandler

exchangePattern (consumer)

コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。

 

ExchangePattern

pollStrategy (consumer)

プラグ可能な org.apache.camel.PollingConsumerPollingStrategy を使用すると、エクスチェンジが作成され、Camel でルーティングされる前に、通常はポーリング操作中に発生するエラー処理を制御するカスタム実装が提供できます。

 

PollingConsumerPoll Strategy

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

backoffErrorThreshold (scheduler)

backoffMultipler が開始する前に発生する必要がある後続のエラーポーリング (エラーによって失敗した) の数。

 

int

backoffIdleThreshold (scheduler)

backoffMultipler が開始する前に発生する必要がある後続のアイドルポーリングの数。

 

int

backoffMultiplier (scheduler)

後続のアイドル状態/エラーが連続して発生した場合に、スケジュールされたポーリングコンシューマーのバックオフを許可します。乗数は、実際に次の試行が行われる前にスキップされるポーリングの数です。このオプションが使用されている場合は、backoffIdleThreshold や backoffErrorThreshold も設定する必要があります。

 

int

delay (scheduler)

次のポーリングまでの時間 (ミリ秒単位)。60s (60 秒)、5m30s (5 分 30 秒)、1h (1 時間) などの単位を使用して時間値を指定することもできます。

500

long

greedy (scheduler)

greedy が有効で、以前の実行が 1 つ以上のメッセージをポーリングした場合、ScheduledPollConsumer は即座に再度実行されます。

false

boolean

initialDelay (scheduler)

最初のポーリングが開始されるまでの時間 (ミリ秒単位)。60s (60 秒)、5m30s (5 分 30 秒)、1h (1 時間) などの単位を使用して時間値を指定することもできます。

1000

long

runLoggingLevel (scheduler)

コンシューマーはポーリング時に開始/完了のログ行を記録します。このオプションを使用すると、ログレベルを設定できます。

TRACE

LoggingLevel

scheduledExecutorService (scheduler)

コンシューマーに使用するカスタム/共有スレッドプールを設定できます。デフォルトでは、各コンシューマーに独自の単一スレッドのスレッドプールがあります。

 

ScheduledExecutor Service

scheduler (scheduler)

camel-spring または camel-quartz2 コンポーネントから cron スケジューラーを使用します。

none

ScheduledPollConsumer Scheduler

schedulerProperties (scheduler)

カスタムスケジューラーまたは Quartz2 や Spring ベースのスケジューラーを使用する場合に、追加のプロパティーを設定します。

 

Map

startScheduler (scheduler)

スケジューラーを自動起動するかどうか。

true

boolean

timeUnit (scheduler)

initialDelay および delay オプションの時間単位。

MILLISECONDS

TimeUnit

useFixedDelay (scheduler)

固定遅延または固定レートを使用するかどうかを制御します。詳細は、JDK の ScheduledExecutorService を参照してください。

true

boolean

45.4. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 3 つのオプションをサポートします。

名前説明デフォルトタイプ

camel.component.beanstalk.connection-settings-factory

Custom ConnectionSettingsFactory.Beanstalkd への接続に使用する ConnectionSettingsFactory を指定します。特に、beanstalkd デーモンを使用しない単体テストに役立ちます (ConnectionSettings をモックできます)。オプションは org.apache.camel.component.beanstalk.ConnectionSettingsFactory タイプです。

 

String

camel.component.beanstalk.enabled

beanstalk コンポーネントを有効にする

true

Boolean

camel.component.beanstalk.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

プロデューサーの動作は、ジョブの処理方法を指示する command パラメーターの影響を受けます。

コンシューマーは、ジョブを予約した直後にジョブを削除するか、Camel ルートが処理するまで待つことができます。最初のシナリオはメッセージキューに似ていますが、2 番目のシナリオはジョブキューに似ています。この動作は、consumer.awaitJob パラメーターによって制御されます。これは、デフォルトで true に等しくなります (Beanstalkd の性質に従います)。

同期の場合、コンシューマーはジョブが正常に完了すると delete を呼び出し、失敗すると bury を呼び出します。URI で consumer.onFailure パラメーターを指定することにより、失敗した場合に実行するコマンドを選択できます。burydelete、または release の値を取ることができます。

JavaBeanstalkClient ライブラリーの同じパラメーターに対応するブール値パラメーター consumer.useBlockIO があります。デフォルトでは true です。

release を指定するときは注意してください。失敗したジョブはすぐに同じチューブで利用可能になり、コンシューマーはそれを再度取得しようとします。ただし、jobDelayrelease して指定することはできます。

Beanstalk コンシューマーは、スケジュールされた ポーリングコンシューマー です。つまり、コンシューマーがポーリングする頻度など、設定できるオプションがさらにあります。詳細については、コンシューマーのポーリングを参照してください。

45.5. コンシューマーヘッダー

コンシューマーは、Exchange メッセージにいくつかのジョブヘッダーを格納します。

プロパティータイプ説明

beanstalk.jobId

long

ジョブ ID:

beanstalk.tube

string

このジョブを含むチューブの名前

beanstalk.state

string

ready または delayed または reserved または burried (reserved でなければならない)

beanstalk.priority

long

プライオリティ値セット

beanstalk.age

int

このジョブを作成した put コマンドからの時間 (秒)

beanstalk.time-left

int

サーバーがこのジョブを準備完了キューに入れるまでの残り秒数

beanstalk.timeouts

int

予約中にこのジョブがタイムアウトになった回数

beanstalk.releases

int

クライアントがこのジョブを予約から解放した回数

beanstalk.buries

int

このジョブが葬られた回数

beanstalk.kicks

int

このジョブがキックされた回数

45.6. 例

この 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");

最初のルートでは、チューブ testTube で新しいジョブをリッスンしています。それらが到着すると、メッセージ本文から整数値を解析しようとしています。成功した場合はログに記録し、交換が正常に完了すると、Camel コンポーネントはこのジョブを Beanstalk から自動的に 削除 します。反対に、ジョブデータを解析できない場合、エクスチェンジは失敗し、Camel コンポーネントはデフォルトでそれを 葬ります。そのため、後で処理できるか、失敗したジョブを手動で検査することになります。

したがって、2 番目のルートは Beanstalk に定期的に 10 個のジョブを葬った状態や遅延状態から通常のキューに 追い出すよう に要求します。

 

45.7. 関連項目

  • Configuring Camel (Camel の設定)
  • コンポーネント
  • エンドポイント
  • スタートガイド

第46章 Bean バリデーターコンポーネント

Camel バージョン 2.3 以降で利用可能

バリデーターコンポーネントは、Java Bean Validation API (JSR 303) を使用してメッセージボディーの Bean 検証を実行します。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]

label は、エンドポイントを記述する任意のテキスト値です。
URI には、?option=value&option=value&…​ の形式でクエリーオプションを追加できます。

46.2. URI オプション

Bean Validator コンポーネントにはオプションがありません。

Bean バリデーターエンドポイントは URI 構文を使用して設定されます。

bean-validator:label

パスおよびクエリーパラメーターを使用します。

46.2.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

label

必須: ラベルは、エンドポイントを記述する任意のテキスト値です。

 

String

46.2.2. クエリーパラメーター (6 個のパラメーター):

名前説明デフォルトタイプ

constraintValidatorFactory (producer)

カスタムの ConstraintValidatorFactory を使用します

 

ConstraintValidator Factory

group (producer)

カスタム検証グループを使用します

javax.validation.groups.Default

String

messageInterpolator (producer)

カスタムの MessageInterpolator を使用します

 

MessageInterpolator

traversableResolver (producer)

カスタムの TraversableResolver を使用します

 

TraversableResolver

validationProviderResolver (producer)

カスタムの ValidationProviderResolver を使用します

 

ValidationProvider Resolver

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

46.3. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 2 つのオプションをサポートします。

名前説明デフォルトタイプ

camel.component.bean-validator.enabled

bean-validator コンポーネントを有効にする

true

Boolean

camel.component.bean-validator.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

46.4. OSGi デプロイメント

OSGi 環境で Hibernate Validator を使用するには、org.apache.camel.component.bean.validator.HibernateValidationProviderResolver と同様に専用の 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.5. 例

以下を持つ java Bean があると仮定します。アノテーション:

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 属性の @NotNull 制約のみが検証されます (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.6. 関連項目

  • Configuring Camel (Camel の設定)
  • コンポーネント
  • エンドポイント
  • スタートガイド

第47章 Binding コンポーネント (非推奨)

Camel バージョン 2.11 以降で利用可能

Camel の用語では、バインディング はコントラクトでエンドポイントをラップする方法です。データ形式、コンテンツエンリッチャー、検証ステップなど。バインディングは完全にオプションであり、任意の camel エンドポイントで使用することを選択できます。

バインディングは、Camel などのさまざまなテクノロジーにサービスコントラクトを追加する SwitchYard プロジェクト の作業によって引き起こされます。ただし、Camel を SCA でラップする SwitchYard アプローチではなく、Camel Bindings は、Camel フレームワーク自体内のコントラクトで Camel エンドポイントをラップする方法を提供します。そのため、どの Camel ルート内でも簡単に使用できます。

47.1. オプション

Binding コンポーネントにはオプションがありません。

Binding エンドポイントは、URI 構文を使用して設定されます。

binding:bindingName:delegateUri

パスおよびクエリーパラメーターを使用します。

47.1.1. パスパラメーター (2 個のパラメーター):

名前説明デフォルトタイプ

bindingName

必須 Camel レジストリーでルックアップするバインディングの名前。

 

String

delegateUri

デリゲートエンドポイントの 必須 Uri。

 

String

47.1.2. クエリーパラメーター (4 パラメーター)

名前説明デフォルトタイプ

bridgeErrorHandler (consumer)

コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN/ERROR レベルでログに記録され、無視されます。

false

boolean

exceptionHandler (consumer)

コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN/ERROR レベルでログに記録され、無視されます。

 

ExceptionHandler

exchangePattern (consumer)

エクスチェンジの作成時にデフォルトのエクスチェンジパターンを設定します。

 

ExchangePattern

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

47.2. バインディングの使用

Binding は現在、コントラクトを定義する Bean です (ただし、バインディングを Camel DSL に追加できることが要望されます)。

バインドされたエンドポイント (バインディングでバインドされたエンドポイント) を定義するには、いくつかの方法があります。

47.3. バインディング URI の使用

任意のエンドポイント URI の前に binding:nameOfBinding: を付けることができます。nameOfBinding は、レジストリー内のバインディング Bean の名前です。

from("binding:jaxb:activemq:myQueue").to("binding:jaxb:activemq:anotherQueue")

ここでは、jaxb バインディングを使用しています。これは、たとえば、JAXB データ形式を使用してメッセージをマーシャリングおよびアンマーシャリングすることができます。

47.4. BindingComponent の使用

BindingComponent と呼ばれるコンポーネントがあり、依存性注入によってレジストリーで設定できます。これにより、すでに何らかのバインディングにバインドされているエンドポイントを作成できます。

たとえば、次のようなコードを使用してレジストリーに jsonmq という新しいコンポーネントを登録した場合

JacksonDataFormat format = new JacksonDataFormat(MyBean.class);
context.bind("jsonmq", new BindingComponent(new DataFormatBinding(format), "activemq:foo."));

その後、エンドポイントを他のエンドポイントであるかのように使用できます。

from("jsonmq:myQueue").to("jsonmq:anotherQueue")

これは、キュー foo.myQueue および foo.anotherQueue を使用し、指定された Jackson Data Format を使用してキューのオンとオフをマーシャリングします。

47.5. バインディングを使うタイミング

1 つのルートで 1 回だけエンドポイントを使用する場合。バインディングは、実際には raw エンドポイントを直接使用し、camel ルートで通常どおり明示的なマーシャリングと検証を使用するよりも複雑で、より多くの作業が必要になる場合があります。

ただし、バインドは、多くのルートを一緒に設定する場合に役立ちます。または、入力エンドポイントと出力エンドポイントが設定されたテンプレートとして単一のルートを使用します。バインディングは、コントラクトとエンドポイントをまとめるための優れた方法を提供します。

バインディングのもう 1 つの適切な使用例は、同じバインディングを使用する多くのエンドポイントを使用している場合です。常に特定のデータ形式や検証規則について言及する必要はなく、BindingComponent を使用して、選択したバインディングでエンドポイントをラップすることができます。

したがって、バインディングは実際には設定ツールです。意味のある場合にのみ使用してください。このような複雑さは、ルートやエンドポイントの数が多くない限り、その価値はないかもしれません。

第48章 Bindy DataFormat

Camel バージョン 2.0 以降で利用可能

このコンポーネントの目的は、アノテーションでバインディングマッピングが定義された Java Bean との間で、非構造化データ (より正確には非 XML データ)
の解析/バインディングを可能にすることです。Bindy を使用すると、次のようなソースからデータをバインドできます。

  • CSV レコード、
  • 固定長レコード、
  • FIX メッセージ、
  • またはほとんどすべての非構造化データ

1 つまたは複数の Plain Old Java Object (POJO)。Bindy は、Java プロパティーの型に従ってデータを変換します。POJO は、場合によっては利用可能な 1 対多の関係と合わせてリンクできます。さらに、Date、Double、Float、Integer、Short、Long、BigDecimal などのデータ型の場合に、プロパティーのフォーマット中に適用するパターンを指定できます。

BigDecimal 数値の場合、精度と小数点またはグループ区切り記号も定義できます。

タイプフォーマットの種類パターン例リンク

Date

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 メッセージ) のみがサポートされています。

camel-bindy を使用するには、最初にモデルをパッケージ (例: com.acme.model) で定義し、モデルクラス (例: Order、Client、Instrument など) ごとに必要なアノテーション (後述) をクラスまたはフィールドに追加する必要があります。

*Multiple models*

複数のモデルを使用する場合は、予測できない結果を防ぐために、各モデルを独自のパッケージに配置する必要があります。

Camel 2.16 以降では、パッケージ名の代わりにクラス名を使用して bindy を設定するため、同じパッケージに複数のモデルを安全に含めることができるため、これは当てはまりません。

48.1. オプション

Bindy データ形式は、以下に示す 5 つのオプションをサポートしています。

名前デフォルトJava タイプ説明

type

 

BindyType

csv、固定、またはキーと値のペアのモードを使用するかどうか。デフォルト値は、選択したデータ形式に応じて Csv または KeyValue のいずれかです。

classType

 

String

使用するモデルクラスの名前。

locale

 

String

米国の us など、使用する既定のロケールを設定します。JVM プラットフォームのデフォルトロケールを使用するには、default という名前を使用します。

unwrapSingleInstance

true

Boolean

アンマーシャリング時に、java.util.List にラップする代わりに、単一のインスタンスをアンラップして返す必要があります。

contentTypeHeader

false

Boolean

データフォーマットがデータ形式を実行できる場合は、データフォーマットの型で Content-Type ヘッダーを設定するかどうか。たとえば、XML にマーシャリングするデータ形式の場合は application/xml、JSON にマーシャリングするデータ形式の場合は JSon です。

48.2. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 18 のオプションをサポートします。

名前説明デフォルトタイプ

camel.dataformat.bindy-csv.class-type

使用するモデルクラスの名前。

 

String

camel.dataformat.bindy-csv.content-type-header

データフォーマットがデータ形式を実行できる場合は、データフォーマットの型で Content-Type ヘッダーを設定するかどうか。たとえば、XML にマーシャリングするデータ形式の場合は application/xml、JSON にマーシャリングするデータ形式の場合は JSon です。

false

Boolean

camel.dataformat.bindy-csv.enabled

bindy-csv データ形式を有効にする

true

Boolean

camel.dataformat.bindy-csv.locale

米国の us など、使用する既定のロケールを設定します。JVM プラットフォームのデフォルトロケールを使用するには、default という名前を使用します。

 

String

camel.dataformat.bindy-csv.type

csv、固定、またはキーと値のペアのモードを使用するかどうか。

 

BindyType

camel.dataformat.bindy-csv.unwrap-single-instance

アンマーシャリング時に、java.util.List にラップする代わりに、単一のインスタンスをアンラップして返す必要があります。

true

Boolean

camel.dataformat.bindy-fixed.class-type

使用するモデルクラスの名前。

 

String

camel.dataformat.bindy-fixed.content-type-header

データフォーマットがデータ形式を実行できる場合は、データフォーマットの型で Content-Type ヘッダーを設定するかどうか。たとえば、XML にマーシャリングするデータ形式の場合は application/xml、JSON にマーシャリングするデータ形式の場合は JSon です。

false

Boolean

camel.dataformat.bindy-fixed.enabled

バインド固定データ形式を有効にする

true

Boolean

camel.dataformat.bindy-fixed.locale

米国の us など、使用する既定のロケールを設定します。JVM プラットフォームのデフォルトロケールを使用するには、default という名前を使用します。

 

String

camel.dataformat.bindy-fixed.type

csv、固定、またはキーと値のペアのモードを使用するかどうか。

 

BindyType

camel.dataformat.bindy-fixed.unwrap-single-instance

アンマーシャリング時に、java.util.List にラップする代わりに、単一のインスタンスをアンラップして返す必要があります。

true

Boolean

camel.dataformat.bindy-kvp.class-type

使用するモデルクラスの名前。

 

String

camel.dataformat.bindy-kvp.content-type-header

データフォーマットがデータ形式を実行できる場合は、データフォーマットの型で Content-Type ヘッダーを設定するかどうか。たとえば、XML にマーシャリングするデータ形式の場合は application/xml、JSON にマーシャリングするデータ形式の場合は JSon です。

false

Boolean

camel.dataformat.bindy-kvp.enabled

bindy-kvp データ形式を有効にする

true

Boolean

camel.dataformat.bindy-kvp.locale

米国の us など、使用する既定のロケールを設定します。JVM プラットフォームのデフォルトロケールを使用するには、default という名前を使用します。

 

String

camel.dataformat.bindy-kvp.type

csv、固定、またはキーと値のペアのモードを使用するかどうか。

 

BindyType

camel.dataformat.bindy-kvp.unwrap-single-instance

アンマーシャリング時に、java.util.List にラップする代わりに、単一のインスタンスをアンラップして返す必要があります。

true

Boolean

ND

48.3. アノテーション

作成されたアノテーションにより、モデルのさまざまな概念を次のように POJO にマップできます。

  • レコードのタイプ (csv、キーと値のペア (FIX メッセージなど)、固定長など)、
  • リンク (別のオブジェクトにあるオブジェクトをリンクする)、
  • DataField とそのプロパティー (int、type、…)、
  • KeyValuePairField (FIX 財務メッセージにあるようなキー = 値形式の場合)、
  • セクション (ヘッダー、本文、およびフッターセクションを識別する)、
  • OneToMany,
  • BindyConverter (since 2.18.0),
  • FormatFactory (2.18.0 以降)

このセクションでは、上記について説明します。

48.4. 1.CsvRecord

CsvRecord アノテーションは、モデルのルートクラスを識別するために使用されます。レコード = CSV ファイルの 1 行を表し、複数の子モデルクラスにリンクできます。

アノテーション名レコードの種類レベル

CsvRecord

csv

Class

パラメーター名typeInfo

separator

string

必須 - ',' または ';' または 'anything' を設定できます。サポートされている唯一の空白文字はタブ (\t) です。その他の空白文字 (スペース) はサポートされていません。この値は正規表現として解釈されます。正規表現で特別な意味を持つ記号を使用する場合は、'|' の記号であれば、'|' のようにマスクする必要があります

skipFirstLine

boolean

オプション - デフォルト値 = false - CSV ファイルの最初の行をスキップできます

crlf

string

オプション - 可能な値 = WINDOWS、UNIX、MAC、またはカスタム。デフォルト値。WINDOWS - 使用するキャリッジリターン文字を定義できます。上記の 3 つ以外の値を指定すると、入力した値 (カスタム) が CRLF 文字として使用されます

generateHeaderColumns

boolean

オプション - デフォルト値 = false - CSV 生成のヘッダー列を生成するために使用します

autospanLine

boolean

Camel 2.13/2.12.2: オプション - デフォルト値 = false - 有効にすると、最後の列が自動的に行末に改行されます。たとえば、コメントなどの場合、これにより、行にすべての文字と区切り文字を含めることができます。

isOrdered

boolean

オプション - デフォルト値 = false - CSV の生成時にフィールドの順序を変更できます

quote

String

Camel 2.8.3/2.9: オプション - CSV の生成時にフィールドの引用符を指定できるようになりました。このアノテーションは、モデルのルートクラスに関連付けられており、一度宣言する必要があります。

引用

boolean

*Camel 2.11:*optional - デフォルト値 = false - CSV 生成時のマーシャリング時に値 (およびヘッダー) を引用符で囲む必要があるかどうかを示します。

endWithLineBreak

boolean

Camel 2.21: オプション - デフォルト値 = true - CSV 生成ファイルを改行で終了する必要があるかどうかを示します。

ケース 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 {

}

ケース 4: separator = '\",\"'

Camel 2.8.2 以前に該当

CSV レコードの解析対象フィールドに ',' または ';' が含まれる場合。これはセパレーターとしても使用されるため、Camel バインドにこのケースの処理方法を伝える別のストラテジー
を見つける必要があります。データを含むフィールドをコンマで定義するには、単純引用符または二重引用符を区切り文字として使用します
(例: '10', 'Street 10, NY', 'USA' or "10", "Street 10, NY", "USA")。
注意: この場合、単純または二重引用符である行の最初と最後の文字は 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 または never bindy から、レコードが一重引用符または二重引用符で囲まれているかどうかが自動的に検出され、CSV からオブジェクトにアンマーシャリングするときにそれらの引用符が自動的に削除されます。したがって、セパレーターに引用符を 含めず に、単に以下を実行するだけです。

"10","J","Pauline"," M","XD12345678","Fortis Dynamic 15,15"
2500","USD","08-01-2009"
@CsvRecord( separator = "," )
public Class Order {

}

Object から CSV にマーシャリングして引用符を使用する場合は、以下に示すように @CsvRecord の quote 属性を使用して、使用する引用符を指定する必要があることに注意してください。

@CsvRecord( separator = ",", quote = "\"" )
public Class Order {

}

case 5 : separator & skipfirstline

この機能は、クライアントがファイルの最初の行にデータフィールドの名前を入れる場合に役立ちます。

注文 ID、クライアント ID、名、姓、isin コード、商品名、数量、通貨、日付

解析プロセス中にこの最初の行をスキップする必要があることを bindy に通知するには、次の属性を使用します。

@CsvRecord(separator = ",", skipFirstLine = true)
public Class Order {

}

ケース 6: generateHeaderColumns

生成された CSV の最初の行に追加するには、次のようにアノテーションで属性 generateHeaderColumns を true に設定する必要があります。

@CsvRecord( generateHeaderColumns = true )
public Class Order {

}

その結果、アンマーシャリングプロセス中の Bindy は、次のような CSV を生成します。

注文 ID、クライアント ID、名、姓、isin コード、商品名、数量、通貨、日付

10, J, Pauline, M, XD12345678, Fortis Dynamic 15/15, 2500, USD,08-01-2009

case 7 : carriage return

camel-bindy が実行されるプラットフォームが Windows ではなく、Macintosh または Unix である場合には、次のように crlf プロパティーを変更できます。WINDOWS、UNIX、または MAC の 3 つの値を使用できます。

@CsvRecord(separator = ",", crlf="MAC")
public Class Order {

}

さらに、何らかの理由で別の行末文字を追加する必要がある場合は、crlf パラメーターを使用して指定できます。次の例では、コンマとそれに続く改行文字で行を終了できます。

@CsvRecord(separator = ",", crlf=",\n")
public Class Order {

}

ケース 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 はファイルの解析に使用され、stream は position を使用して CSV を生成します

48.6. 3.DataField

DataField アノテーションは、フィールドのプロパティーを定義します。各データフィールドは、レコード内の位置、タイプ (string、int、date など)、およびパターン (任意) によって識別されます

アノテーション名レコードの種類レベル

DataField

all

プロパティー

パラメーター名typeInfo

pos

int

必須 - フィールドの 入力 位置。1 から … までの桁数 - position パラメーターを参照してください。

pattern

string

オプション - デフォルト値 = "" - Decimal、Date、

長さ

int

オプション - 固定長形式のフィールドの長さを表します

精度

int

オプション - 10 進数がフォーマット/解析されるときに使用される精度を表します

pattern

string

オプション - デフォルト値 = "" - Java フォーマッター (例では SimpleDateFormat) によってデータのフォーマット/検証に使用されます。パターンを使用する場合は、バインドデータ形式にロケールを設定することをお勧めします。us などの既知のロケールに設定するか、default を使用してプラットフォームのデフォルトロケールを使用します。デフォルトには Camel 2.14/2.13.3/2.12.5 が必要であることに注意してください。

position

int

オプション - 生成された CSV 内のフィールドの位置 (出力メッセージ) が、入力位置 (pos) と比較して異なる必要がある場合に使用します。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 を使用してください

delimiter

string

Camel 2.11: オプション - 固定長レコード内の可変長フィールドの終わりを区切るために使用できます

ケース 1: pos

このパラメーター/属性は、csv レコード内のフィールドの位置を表します

Position

@CsvRecord(separator = ",")
public class Order {

    @DataField(pos = 1)
    private int orderNr;

    @DataField(pos = 5)
    private String isinCode;

}

この例でわかるように、位置は 1 から始まりますが、クラス Order では続きは 5 になります。2 から 4 までの数字はクラス Client で定義されています (以下を参照)。

位置は別のモデルクラスで継続する

public class Client {

    @DataField(pos = 2)
    private String clientNr;

    @DataField(pos = 3)
    private String firstName;

    @DataField(pos = 4)
    private String lastName;
}

ケース 2: pattern

パターンを使用すると、データの形式を強化または検証できます

Pattern

@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

精度は、数値の小数部分を定義する場合に役立ちます

精度

@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 属性は、生成された CSV レコードにフィールドを配置する方法を bindy に通知します。デフォルトでは、使用される位置は属性 pos で定義された位置に対応します。位置が異なる場合 (つまり、マーシャリングとアンマーシャリングを比較する非対称プロセスがあることを意味します)、position を使用してこれを指定できます。

以下に例を示します。

出力位置が異なる

@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 の属性 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;
}

このフィールドがレコードに存在しない場合には、パーサーにより次の情報を含めてエラーが報告されます。

一部のフィールドが欠落しています (オプションまたは必須)、行:

case 6 : trim

フィールドの先頭および/または末尾にスペースがあり、処理する前に削除する必要がある場合は、trim 属性を true に設定してください。

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.7. 4.FixedLengthRecord

FixedLengthRecord アノテーションは、モデルのルートクラスを識別するために使用されます。これは、レコード = フォーマットされた固定長のデータを含むファイル/メッセージの行を表し、複数の子モデルクラスにリンクできます。フィールドのデータは右または左に位置合わせできるため、この形式は少し特殊です。
データのサイズがフィールドの長さを完全に満たしていない場合は、埋め込み文字を追加できます。

アノテーション名レコードの種類レベル

FixedLengthRecord

固定:

クラス

パラメーター名typeInfo

crlf

string

オプション - 可能な値 = WINDOWS、UNIX、MAC、またはカスタム。デフォルト値。WINDOWS - 使用するキャリッジリターン文字を定義できます。上記の 3 つ以外の値を指定すると、入力した値 (カスタム) が CRLF 文字として使用されます。このオプションはマーシャリング中にのみ使用されますが、アンマーシャリングでは、eol がカスタマイズされていない限り、JDK が提供するシステムのデフォルトの行区切り文字が使用されます

eol

string

オプション - 空の文字列である default=""。アンマーシャリング中に各レコードの後に行末を考慮して処理するために使用される文字 (オプション - デフォルト = "" は、他の行区切り文字が提供されない限り、JDK が提供するデフォルトの行区切り文字を使用するのに役立ちます)。このオプションは、アンマーシャリング中にのみ使用されます。マーシャリングでは、他の値が指定されていない限り、システムのデフォルトで提供される行区切り文字が WINDOWS として使用されます。

paddingChar

char

mandatory - default value = ' '

長さ

int

必須 = 固定長レコードのサイズ

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 と相互に排他的です。レコードは、ヘッダー/フッターと、プライマリーの固定長レコードを両方に指定できません。

ケース 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: アラインメントとパディングのある固定長レコード

こちらの詳細な例は、フィールドの配置を定義する方法と、' ' here'' のパディング文字を割り当てる方法を示しています。

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

Fixed-delimited

@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 値は、正確な列番号の代わりに序数の連続した値を使用してオプションで定義できます。

ケース 5: レコード定義フィールド長の固定長レコード

固定長レコードには、同じレコード内の別のフィールドで必要とされる長さを定義するフィールドが含まれる場合があります。次の例では、instrumentNumber フィールド値の長さは、レコード内の instrumentNumberLen フィールドの値によって定義されます。

10A9Pauline^M^ISIN10XD12345678BUYShare000002500.45USD01-08-2009

Fixed-delimited

@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 クラスと同じパッケージに存在するか、設定されたスキャンパッケージの 1 つに含まれている必要があります。次のテキストは、ヘッダーレコードとフッターレコードで囲まれた 2 つの固定長レコードを示しています。

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: 固定長レコードの解析時にコンテンツをスキップする(Camel 2.11.1)

ターゲットユースケースに必要以上の情報を含む、固定長レコードを提供するシステムと統合するのが一般的です。この状況では、不要なフィールドの宣言と解析をスキップすると便利です。これに対応するために、次に宣言されたフィールドの pos 値が最後に解析されたフィールドのカーソル位置を超えている場合には、Bindy により、レコード内で次にマップされたフィールドに移動されます。対象のフィールドに (順序値ではなく) 絶対 pos 位置を使用すると、Bindy は 2 つのフィールド間のコンテンツをスキップします。

同様に、先のフィールドに対象となるコンテンツがない場合があります。この場合には、@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.8. 5.メッセージ

Message アノテーションは、キーと値のペアフィールドを含むモデルのクラスを識別するために使用されます。この種の形式は、主に Financial Exchange Protocol Messages (FIX) で使用されます。いずれの場合も、このアノテーションは、データがキーによって識別される他の形式に使用できます。キーペアの値は、区切り記号で互いに区切られます。区切り文字には、タブ区切り記号 (Unicode 表現: \u0009) または見出しの開始 (Unicode 表現: \u0001) などの特殊文字を使用できます。

*"FIX information"*

FIX の詳細については、Web サイト http://www.fixprotocol.org/ を参照してください。FIX メッセージを操作するには、モデルに、Order クラスである可能性があるルートメッセージクラスにリンクされた Header クラスと Trailer クラスが含まれている必要があります。これは必須ではありませんが、camel-bindy を、quickFix プロジェクト (http://www.quickfixj.org/) に基づく修正ゲートウェイである camel-fix と組み合わせて使用する場合に非常に役立ちます。

アノテーション名レコードの種類レベル

メッセージ

キーと値のペア。

Class

パラメーター名typeInfo

pairSeparator

string

必須 - '=' または ';' または 'anything'

keyValuePairSeparair

string

必須 - '\u0001、'\u0009'、'#' または 'anything'

crlf

string

オプション - 可能な値 = WINDOWS、UNIX、MAC、またはカスタム。デフォルト値 = WINDOWS - 使用する復帰文字を定義できます。上記の 3 つ以外の値を指定すると、入力した値 (カスタム) が CRLF 文字として使用されます

type

string

オプション - メッセージのタイプを定義します (FIX、EMX など)。

version

string

オプション - メッセージのバージョン (例: 4.1)

isOrdered

boolean

オプション - デフォルト値 = false - FIX メッセージの生成時にフィールドの順序を変更できます。このアノテーションは、モデルのメッセージクラスに関連付けられており、一度宣言する必要があります。

ケース 1: separator = 'u0001'

FIX メッセージでキーと値のペアフィールドを分離するために使用される区切り文字は、ASCII 01 文字または Unicode 形式の \u0001 です。Java ランタイムエラーを回避するには、この文字をもう一度エスケープする必要があります。以下は例です。

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*

タブなどの ASCII 文字は、WIKI ページでは表示できません。そのため、camel-bindy のテストケースを見て、FIX メッセージ (src\test\data\fix\fix.txt) と Order、Trailer、Header クラス (src\test\java\) がどのように見えるかを正確に確認してください。org\apache\camel\dataformat\bindy\model\fix\simple\Order.java)

48.9. 6.KeyValuePairField

KeyValuePairField アノテーションは、キーと値のペアフィールドのプロパティーを定義します。各 KeyValuePairField は、タグ (= キー) とそれに関連付けられた値、タイプ (文字列、整数、日付など)、オプションのパターン、およびフィールドが必須かどうかによって識別されます

アノテーション名レコードの種類レベル

KeyValuePairField

キーと値のペア - FIX

プロパティー

パラメーター名typeInfo

tag

int

必須 - メッセージ内のフィールドを識別する数字 - 一意でなければなりません

pattern

string

オプション - デフォルト値 = "" - Decimal、Date などのフォーマットに使用されます

精度

int

オプション - 桁数 - 10 進数がフォーマット/解析されるときに使用される精度を表します

position

int

オプション - FIX メッセージ内のキー/タグの位置が異なる必要がある場合に使用する必要があります

必須

boolean

optional - default value = "false"

impliedDecimalSeparator

boolean

Camel 2.11: オプション - デフォルト値 = "false" - 指定された位置に暗黙の小数点があるかどうかを示します

case 1 : tag

このパラメーターは、メッセージ内のフィールドのキーを表します

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.10. 7.セクション

固定長レコードの FIX メッセージでは、情報の表現にさまざまなセクション (ヘッダー、ボディ、およびセクション) があるのが一般的です。アノテーション @Section の目的は、モデルのどのクラスがヘッダー (= セクション 1)、ボディー (= セクション 2)、およびフッター (= セクション 3) を表しているかを bindy に通知することです。

このアノテーションには、1 つの属性/パラメーターのみが存在します。

アノテーション名レコードの種類レベル

セクション

FIX

Class

パラメーター名typeInfo

number

int

セクション位置を識別する桁数

ケース 1: セクション

ヘッダーセクションの定義

FIX メッセージ - セクション - ヘッダー

@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 メッセージ - セクション - 本文

@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;

フッターセクションの定義:

FIX メッセージ - セクション - フッター

@Section(number = 3)
public class Trailer {

    @KeyValuePairField(tag = 10, position = 1)
    // CheckSum
    private int checkSum;

    public int getCheckSum() {
        return checkSum;
    }

48.11. 8.OneToMany

アノテーション @OneToMany の目的は、POJO クラスで定義された List<?> フィールドを操作できるようにすること、または反復グループを含むレコードから操作できるようにすることです。

*Restrictions OneToMany*

bindy の 1 対多では、階層の複数のレベルで定義された繰り返しを処理できないことに注意してください。

OneToMany の関係は、次の場合にのみ機能します。

  • 反復グループ (= タグ/キーのグループ) を含む FIX メッセージの読み取り
  • 反復データを含む CSV の生成
アノテーション名レコードの種類レベル

OneToMany

all

プロパティー

パラメーター名typeInfo

mappedTo

string

オプション - 文字列 - List<Type of the Class> の型に関連付けられたクラス名

ケース 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

備考 : 反復データは本のタイトルとその発行日に関するもので、姓名と年齢が一般的です。

そして、これをモデル化するために使用されるクラス。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 メッセージの読み取り

モデルで処理するメッセージは次のとおりです。

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

タグ 22、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.12. 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.13. 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.14. サポートされるデータタイプ

DefaultFormatFactory は、提供された FormattingOptions に基づいてインターフェイス FormatFactoryInterface のインスタンスを返して、次のデータ型のフォーマットを使用できるようにします。

  • BigDecimal
  • BigInteger
  • Boolean
  • Byte
  • Character
  • 日付
  • double
  • Enum
  • Float
  • Integer
  • LocalDate (Java 8、2.18.0 以降)
  • LocalDateTime (java 8, since 2.18.0)
  • LocalTime (java 8, since 2.18.0)
  • Long
  • Short
  • String

DefaultFormatFactory は、使用中のレジストリー (Spring または JNDI など) で FactoryRegistry のインスタンスを提供してオーバーライドできます。

48.15. Java DSL を使用

次のステップでは、このレコードタイプに関連付けられた DataFormat bindy クラスをインスタンス化し、Java パッケージ名をパラメーターとして提供します。

たとえば、次の例では、com.acme.model パッケージ名で設定されたクラス BindyCsvDataFormat (CSV レコードタイプに関連付けられたクラスに対応) を使用して、このパッケージで設定されたモデルオブジェクトを初期化します。

// 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.15.1. ロケールの設定

Bindy は、次のようなデータ形式でのロケールの設定をサポートしています。 

// 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.15.2. アンマーシャリング

from("file://inbox")
  .unmarshal(bindy)
  .to("direct:handleOrders");

または、Spring XML ファイルなどのレジストリーで定義できるデータ形式への名前付き参照を使用できます。

from("file://inbox")
  .unmarshal("myBindyDataFormat")
  .to("direct:handleOrders");

Camel ルートは、受信トレイディレクトリー内のファイルをピックアップし、CSV レコードをモデルオブジェクトのコレクションにアンマーシャリングして、handleOrders によって参照されるルートにコレクション
を送信します。

返されるコレクションは、List of Map オブジェクト です。リスト内の各 Map には、CSV の各行からマーシャリングされたモデルオブジェクトが含まれています。理由は、各行が複数のオブジェクトに対応している可能性 があるためです。1 行にオブジェクト 1 つだけが返されることを想定している場合には、混乱を招く可能性があります。

各オブジェクトは、そのクラス名を使用して取得できます。

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 オブジェクトを抽出すると仮定する場合に、次のようにスプリッターとプロセッサーの組み合わせを使用できます。

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 は CHARSET_NAME プロパティーまたは CHARSET_NAME ヘッダーを Exchange インターフェイスで定義されているように使用して、アンマーシャリングのために受信した入力ストリームの文字セット変換を行うことに注意してください。一部のプロデューサ (file-endpoint など) では、文字セットを定義できます。文字セット変換は、このプロデューサによってすでに実行されている可能性があります。アンマーシャルに送信する前に、エクスチェンジからこのプロパティーまたはヘッダーを削除する必要がある場合があります。削除しないと、変換が 2 回行われ、想定外の結果が生じる可能性があります。

from("file://inbox?charset=Cp922")
  .removeProperty(Exchange.CHARSET_NAME)
  .unmarshal("myBindyDataFormat")
  .to("direct:handleOrders");

48.15.3. マーシャリング

モデルオブジェクトのコレクションから CSV レコードを生成するには、次のルートを作成します。

from("direct:handleOrders")
   .marshal(bindy)
   .to("file://outbox")

48.16. Spring XML の使用

これにより、お気に入りの DSL 言語として Spring を使用して、非常に簡単に camel-bindy に使用するルートを宣言できます。次の例は、最初のルートがファイルからレコードを取得し、コンテンツをアンマーシャリングしてモデルにバインドする 2 つのルートを示しています。結果は pojo に送信され (特別なことは何も行われません)、キューに入れられます。

2 番目のルートは、キューから pojo を抽出し、コンテンツをマーシャリングして、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.17. 依存関係

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 ダイアレクトを利用できるようになりました。ブループリントのカスタム名前空間はまだ標準化されていないため、この名前空間は、Apache Karaf で使用される Apache Aries ブループリントの実装でのみ使用できます。

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 環境にデプロイするときにブループリントを使用すると、いくつかの利点があります。

  • 新しい camel バージョンにアップグレードする場合、名前空間を変更する必要はありません。バンドルによってインポートされた camel パッケージに基づいて正しいバージョンが選択されるためです。
  • カスタム名前空間とバンドルに関する起動順序の問題はありません
  • Blueprint プロパティープレースホルダーを使用できます

49.2. camel-blueprint の使用

OSGi で camel-blueprint を活用するには、camel-core とその依存関係に加えて、Aries Blueprint バンドルと camel-blueprint バンドルのみが必要です。

Karaf を使用する場合は、必要なすべてのバンドルをインストールする camel-blueprint という名前の機能を使用できます。

第50章 Bonita コンポーネント

Camel バージョン 2.19 以降で利用可能

リモートの Bonita BPM プロセスエンジンとの通信に使用されます。

50.1. URI 形式

bonita://[operation]?[options]

operation は、Bonita で実行する特定のアクションです。

50.2. 一般的なオプション

Bonita コンポーネントにはオプションがありません。

Bonita エンドポイントは、URI 構文を使用して設定されます。

bonita:operation

パスおよびクエリーパラメーターを使用します。

50.2.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

operation

必須 必要な操作

 

BonitaOperation

50.2.2. クエリーパラメーター(9 パラメーター):

名前説明デフォルトタイプ

bridgeErrorHandler (consumer)

コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

false

boolean

hostname (consumer)

Bonita エンジンが実行されるホスト名

localhost

String

port (consumer)

Bonita エンジンをホストするサーバーのポート

8080

String

processName (consumer)

操作に関係するプロセスの名前

 

String

exceptionHandler (consumer)

コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

 

ExceptionHandler

exchangePattern (consumer)

コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。

 

ExchangePattern

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

password (security)

Bonita エンジンを認証するためのパスワード。

 

String

username (security)

Bonita エンジンを認証するためのユーザー名。

 

String

50.3. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 2 つのオプションをサポートします。

名前説明デフォルトタイプ

camel.component.bonita.enabled

bonita コンポーネントを有効にする

true

Boolean

camel.component.bonita.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

50.4. ボディーコンテンツ

startCase 操作の場合、入力変数はボディーメッセージから取得されます。これには Map<String,Serializable> が含まれている必要があります。

50.5. 例

次の例では、Bonita で新しいケースを開始します。

from("direct:start").to("bonita:startCase?hostname=localhost&amp;port=8080&amp;processName=TestProcess&amp;username=install&amp;password=install")

50.6. 依存関係

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 データ形式は、以下にリストされている 3 個のオプションをサポートしています。

名前デフォルトJava タイプ説明

unmarshalTypeName

 

String

アンアームシャリング時に使用する Java 型のクラス名

useList

false

Boolean

Map の List または Pojo の List にアンマーシャリングします。

contentTypeHeader

false

Boolean

データフォーマットがデータ形式を実行できる場合は、データフォーマットの型で Content-Type ヘッダーを設定するかどうか。たとえば、XML にマーシャリングするデータ形式の場合は application/xml、JSON にマーシャリングするデータ形式の場合は JSon です。

51.2. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 4 つのオプションをサポートします。

名前説明デフォルトタイプ

camel.dataformat.boon.content-type-header

データフォーマットがデータ形式を実行できる場合は、データフォーマットの型で Content-Type ヘッダーを設定するかどうか。たとえば、XML にマーシャリングするデータ形式の場合は application/xml、JSON にマーシャリングするデータ形式の場合は JSon です。

false

Boolean

camel.dataformat.boon.enabled

boon データフォーマットを有効にする

true

Boolean

camel.dataformat.boon.unmarshal-type-name

アンアームシャリング時に使用する Java 型のクラス名

 

String

camel.dataformat.boon.use-list

Map の List または Pojo の List にアンマーシャリングします。

false

Boolean

ND

51.3. Java DSL を使用

DataFormat boonDataFormat = new BoonDataFormat("com.acme.model.Person");

from("activemq:My.Queue")
  .unmarshal(boonDataFormat)
  .to("mqseries:Another.Queue");

51.4. ブループリント 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.5. 依存関係

<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-boon</artifactId>
  <version>x.x.x</version>
</dependency>

第52章 Box コンポーネント

Camel バージョン 2.14 以降で利用可能

Box コンポーネントは、https://github.com/box/box-java-sdk を使用してアクセスできるすべての Box.com API へのアクセスを提供します。ファイルのアップロードとダウンロード、フォルダーの作成、編集、管理などのメッセージを作成できます。また、ユーザーアカウントの更新やエンタープライズアカウントの変更などをポーリングできる API もサポートしています。

Box.com では、すべてのクライアントアプリケーション認証に OAuth2.0 を使用する必要があります。アカウントで camel-box を使用するには、https://developer.box.com の 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 コンポーネントは、3 種類の認証済み接続をサポートしています。

52.1.1. 標準認証

標準認証 は、OAuth 2.0 three-legged 認証プロセス を使用して、Box.com との接続を認証します。このタイプの認証により、Box 管理対象ユーザー外部ユーザー は、Box コンポーネントを介して Box コンテンツにアクセスし、編集し、保存することができます。

52.1.2. アプリケーションエンタープライズ認証

App Enterprise Authentication は、OAuth 2.0 と JSON Web トークン (JWT) を使用して、Box アプリケーションサービスアカウント として接続を認証します。このタイプの認証により、サービスアカウントは、Box コンポーネントを介して Box アプリケーション の Box コンテンツにアクセスし、編集し、保存することができます。

52.1.3. アプリユーザー認証

アプリケーションユーザー認証 は、OAuth 2.0 と JSON Web トークン (JWT) を使用して、Box アプリケーションアプリユーザー としての接続を認証します。このタイプの認証により、アプリユーザーは、Box コンポーネントを介して Box アプリケーション で Box コンテンツにアクセスし、編集し、保存することができます。

52.2. Box のオプション

Box コンポーネントは、以下に示す 2 個のオプションをサポートしています。

名前説明デフォルトタイプ

configuration (common)

共有設定を使用するには

 

BoxConfiguration

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

Box エンドポイントは、URI 構文を使用して設定されます。

box:apiName/methodName

パスおよびクエリーパラメーターを使用します。

52.2.1. パスパラメーター (2 個のパラメーター):

名前説明デフォルトタイプ

apiName

必須 操作の種類

 

BoxApiName

methodName

必須: 選択した操作に使用するサブ操作

 

String

52.2.2. クエリーパラメーター (20 パラメーター)

名前説明デフォルトタイプ

clientId (common)

Box アプリケーションのクライアント ID

 

String

enterpriseId (common)

App Enterprise に使用するエンタープライズ ID。

 

String

inBody (common)

ボディにて交換で渡されるパラメーターの名前を設定します。

 

String

userId (common)

アプリユーザーに使用するユーザー ID。

 

String

bridgeErrorHandler (consumer)

コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

false

boolean

exceptionHandler (consumer)

コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

 

ExceptionHandler

exchangePattern (consumer)

コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。

 

ExchangePattern

httpParams (advanced)

プロキシーホストなどの設定用のカスタム HTTP パラメーター

 

Map

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

accessTokenCache (security)

アクセストークンを保存および取得するためのカスタムアクセストークンキャッシュ。

 

IAccessTokenCache

clientSecret (security)

Box アプリケーションのクライアントシークレット

 

String

encryptionAlgorithm (security)

JWT の暗号化アルゴリズムのタイプ。サポートされているアルゴリズム: RSA_SHA_256 RSA_SHA_384 RSA_SHA_512

RSA_SHA_256

EncryptionAlgorithm

maxCacheEntries (security)

キャッシュ内のアクセストークンの最大数。

100

int

authenticationType (authentication)

接続の認証の種類。認証の種類: STANDARD_AUTHENTICATION - OAuth 2.0 (3-legged) SERVER_AUTHENTICATION - JSON Web トークンを使用した OAuth 2.0

APP_USER_AUTHENTICATION

String

privateKeyFile (security)

JWT 署名を生成するための秘密鍵。

 

String

privateKeyPassword (security)

秘密鍵のパスワード。

 

String

publicKeyId (security)

JWT 署名を検証するための公開鍵の ID。

 

String

sslContextParameters (security)

SSLContextParameters を使用してセキュリティーを設定する場合。

 

SSLContextParameters

userName (security)

ボックスのユーザー名を指定する必要があります

 

String

userPassword (security)

Box ユーザーのパスワード。authSecureStorage が設定されていない場合は指定する必要があり、最初の呼び出しで null を返す

 

String

52.3. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 17 のオプションをサポートします。

名前説明デフォルトタイプ

camel.component.box.configuration.access-token-cache

アクセストークンを保存および取得するためのカスタムアクセストークンキャッシュ。

 

IAccessTokenCache

camel.component.box.configuration.api-name

実行する操作の種類

 

BoxApiName

camel.component.box.configuration.authentication-type

接続の認証の種類。認証の種類: STANDARD_AUTHENTICATION - OAuth 2.0 (3-legged) SERVER_AUTHENTICATION - JSON Web トークンを使用した OAuth 2.0

APP_USER_AUTHENTICATION

String

camel.component.box.configuration.client-id

Box アプリケーションのクライアント ID

 

String

camel.component.box.configuration.client-secret

Box アプリケーションのクライアントシークレット

 

String

camel.component.box.configuration.enterprise-id

App Enterprise に使用するエンタープライズ ID。

 

String

camel.component.box.configuration.http-params

プロキシーホストなどの設定用のカスタム HTTP パラメーター

 

Map

camel.component.box.configuration.method-name

選択した操作に使用するサブ操作

 

String

camel.component.box.configuration.private-key-file

JWT 署名を生成するための秘密鍵。

 

String

camel.component.box.configuration.private-key-password

秘密鍵のパスワード。

 

String

camel.component.box.configuration.public-key-id

JWT 署名を検証するための公開鍵の ID。

 

String

camel.component.box.configuration.ssl-context-parameters

SSLContextParameters を使用してセキュリティーを設定する場合。

 

SSLContextParameters

camel.component.box.configuration.user-id

アプリユーザーに使用するユーザー ID。

 

String

camel.component.box.configuration.user-name

ボックスのユーザー名を指定する必要があります

 

String

camel.component.box.configuration.user-password

Box ユーザーのパスワード。authSecureStorage が設定されていない場合は指定する必要があり、最初の呼び出しで null を返す

 

String

camel.component.box.enabled

ボックスコンポーネントを有効にする

true

Boolean

camel.component.box.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

52.4. URI 形式

box:apiName/methodName

apiName は次のいずれかです。

  • コラボレーション
  • コメント
  • event-logs
  • files
  • folders
  • groups
  • events
  • search
  • tasks
  • users

52.5. プロデューサーエンドポイント:

プロデューサーエンドポイントは、エンドポイント 接頭辞の後にエンドポイント名と次に説明する関連オプションを使用できます。一部のエンドポイントには省略形のエイリアスを使用できます。エンドポイント URI には接頭辞が含まれている必要があります。

必須ではないエンドポイントオプションは [] で示されます。エンドポイントに必須のオプションがない場合、[] オプションのセットの 1 つを提供する必要があります。プロデューサエンドポイントは、特別なオプション inBody を 使用することもできます。このオプションには、値が Camel Exchange In メッセージに含まれるエンドポイントオプションの名前が含まれている必要があります。

エンドポイントオプションは、エンドポイント URI またはメッセージヘッダーで動的に指定できます。メッセージヘッダー名は CamelBox.<option> の形式である必要があります。inBody オプションはメッセージヘッダーをオーバーライドすることに注意してください。つまり、エンドポイントオプション inBody=optionCamelBox.option ヘッダーをオーバーライドします。

エンドポイント URI またはメッセージヘッダーのオプション defaultRequest に値が指定されていない場合は、null と見なされます。null 値は、他のオプションが一致するエンドポイントを満たさない場合にのみ使用されることに注意してください。

Box API エラーの場合、エンドポイントは com.box.sdk.BoxAPIException から生成された例外が原因で RuntimeCamelException を出力します。

52.5.1. エンドポイント接頭辞 collaborations

Box コラボレーションの詳細については、https://developer.box.com/reference#collaboration-object を参照してください。 次のエンドポイントは、次のように接頭辞 collaborations を使用して呼び出すことができます。

box:collaborations/endpoint?[options]
エンドポイント短縮形エイリアスオプション結果ボディーのタイプ

addFolderCollaboration

add

folderId、コラボレーター、ロール

com.box.sdk.BoxCollaboration

addFolderCollaborationByEmail

addByEmail

folderId、電子メール、ロール

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 オプション

名前タイプ

collaborationId

String

コラボレーター

com.box.sdk.BoxCollaborator

role

com.box.sdk.BoxCollaboration.Role

folderId

String

email

String

info

com.box.sdk.BoxCollaboration.Info

52.5.2. エンドポイント接頭辞 comments

Box コメントの詳細については、https://developer.box.com/reference#comment-object を参照してください。 次のエンドポイントは、次のように接頭辞 comments を使用して呼び出すことができます。

box:comments/endpoint?[options]
エンドポイント短縮形エイリアスオプション結果ボディーのタイプ

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 オプション

名前タイプ

commentId

String

fileId

String

message

String

52.5.3. エンドポイント接頭辞 events-logs

Box イベントログの詳細については、https://developer.box.com/reference#events を参照してください。次のエンドポイントは、次のように接頭辞 event-logs で呼び出すことができます。

box:event-logs/endpoint?[options]
エンドポイント短縮形エイリアスオプション結果ボディーのタイプ

getEnterpriseEvents

events

position, after, before, [types]

java.util.List

イベントログ の URI オプション

名前タイプ

position

String

after

Date

before

Date

types

com.box.sdk.BoxEvent.Types[]

52.5.4. エンドポイント接頭辞 files

Box ファイルの詳細については、https://developer.box.com/reference#file-object を参照してください。次のエンドポイントは、次のように接頭辞 files を使用して呼び出すことができます。

box:files/endpoint?[options]
エンドポイント短縮形エイリアスオプション結果ボディーのタイプ

uploadFile

upload

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

リンク

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

versions

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

preview

fileId

java.net.URL

getFileThumbnail

thumbnail

fileId, fileType, minWidth, minHeight, maxWidth, maxHeight

byte[]

ファイル の URI オプション

名前タイプ

parentFolderId

String

content

java.io.InputStream

fileName

String

created

Date

modified

Date

size

Long

listener

com.box.sdk.ProgressListener

output

java.io.OutputStream

rangeStart

Long

rangeEnd

Long

outputStreams

java.io.OutputStream[]

destinationFolderId

String

newName

String

fields

String[]

info

com.box.sdk.BoxFile.Info

fileSize

Long

version

Integer

access

com.box.sdk.BoxSharedLink.Access

unshareDate

Date

permissions

com.box.sdk.BoxSharedLink.Permissions

fileType

com.box.sdk.BoxFile.ThumbnailFileType

minWidth

Integer

minHeight

Integer

maxWidth

Integer

maxHeight

Integer

metadata

com.box.sdk.Metadata

typeName

String

52.5.5. エンドポイント接頭辞 folders

Box フォルダーの詳細については、https://developer.box.com/reference#folder-object を参照してください。次のエンドポイントは、次のように接頭辞 folders を使用して呼び出すことができます。

box:folders/endpoint?[options]
エンドポイント短縮形エイリアスオプション結果ボディーのタイプ

getRootFolder

root

 

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

リンク

folderId, access, [unsharedDate], [permissions]

java.util.List

deleteFolder

delete

folderId

 

getFolder

folder

path

com.box.sdk.BoxFolder

getFolderInfo

info

folderId, fields

com.box.sdk.BoxFolder.Info

getFolderItems

items

folderId, offset, limit, fields

java.util.List

updateFolderInfo

updateInfo

folderId, info

com.box.sdk.BoxFolder

folders の URI オプション

名前タイプ

path

String[]

folderId

String

offset

Long

limit

Long

fields

String[]

parentFolderId

String

folderName

String

destinationFolderId

String

newName

String

newFolderName

String

info

String

access

com.box.sdk.BoxSharedLink.Access

unshareDate

Date

permissions

com.box.sdk.BoxSharedLink.Permissions

52.5.6. エンドポイント接頭辞 groups

Box グループの詳細については、https://developer.box.com/reference#group-object を参照してください。次のエンドポイントは、次のように接頭辞 groups を使用して呼び出すことができます。

box:groups/endpoint?[options]
エンドポイント短縮形エイリアスオプション結果ボディーのタイプ

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

groupMemebershipId

com.box.sdk.BoxGroup.Info

updateGroupMembershipInfo

updateMembershipInfo

groupMembershipId、info

com.box.sdk.BoxGroupMembership

groups の URI オプション

名前タイプ

name

String

groupId

String

userId

String

role

com.box.sdk.BoxGroupMembership.Role

groupMembershipId

String

info

com.box.sdk.BoxGroupMembership.Info

52.5.7. エンドポイント接頭辞 search

Box 検索 API の詳細については、https://developer.box.com/reference#searching-for-content を参照してください。 次のエンドポイントは、次のように接頭辞 search で呼び出すことができます。

box:search/endpoint?[options]
エンドポイント短縮形エイリアスオプション結果ボディーのタイプ

searchFolder

search

folderId, query

java.util.Collection

search の URI オプション

名前タイプ

folderId

String

query

String

52.5.8. エンドポイント接頭辞 tasks

Box タスクの詳細については、https://developer.box.com/reference#task-object-1 を参照してください。次のエンドポイントは、次のように接頭辞 tasks を使用して呼び出すことができます。

box:tasks/endpoint?[options]
エンドポイント短縮形エイリアスオプション結果ボディーのタイプ

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

assignments

taskId

java.util.List

getTaskAssignmentInfo

assignmentInfo

taskAssignmentId

com.box.sdk.BoxTaskAssignment.Info

tasks の URI オプション

名前タイプ

fileId

String

action

com.box.sdk.BoxTask.Action

dueAt

Date

message

String

taskId

String

info

com.box.sdk.BoxTask.Info

assignTo

com.box.sdk.BoxUser

taskAssignmentId

String

52.5.9. エンドポイント接頭辞 users

Box ユーザーについては、https://developer.box.com/reference#user-object を参照してください。次のエンドポイントは、次のように接頭辞 users で呼び出すことができます。

box:users/endpoint?[options]
エンドポイント短縮形エイリアスオプション結果ボディーのタイプ

getCurrentUser

currentUser

 

com.box.sdk.BoxUser

getAllEnterpriseOrExternalUsers

users

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

users の URI オプション

名前タイプ

defaultRequest

com.box.restclientv2.requestsbase.BoxDefaultRequestObject

emailAliasRequest

com.box.boxjavalibv2.requests.requestobjects.BoxEmailAliasRequestObject

emailId

String

filterTerm

String

folderId

String

simpleUserRequest

com.box.boxjavalibv2.requests.requestobjects.BoxSimpleUserRequestObject

userDeleteRequest

com.box.boxjavalibv2.requests.requestobjects.BoxUserDeleteRequestObject

userId

String

userRequest

com.box.boxjavalibv2.requests.requestobjects.BoxUserRequestObject

userUpdateLoginRequest

com.box.boxjavalibv2.requests.requestobjects.BoxUserUpdateLoginRequestObject

52.6. コンシューマーエンドポイント

Box イベントの詳細については、https://developer.box.com/reference#events を参照してください。次の例に示すように、コンシューマーエンドポイントはエンドポイント 接頭辞 events のみを使用できます。

box:events/endpoint?[options]
エンドポイント短縮形エイリアスオプション結果ボディーのタイプ

events

 

[startingPosition]

com.box.sdk.BoxEvent

events の URI オプション

名前タイプ

startingPosition

Long

52.7. メッセージヘッダー

CamelBox 接頭辞を使用するプロデューサーエンドポイントのメッセージヘッダーには、任意のオプションを指定できます。

52.8. メッセージボディー

すべての結果メッセージ本文は、Box Java SDK によって提供されるオブジェクトを利用します。プロデューサーエンドポイントは、inBody エンドポイントパラメーターで受信メッセージボディーのオプション名を指定できます。

52.9. コンポーネントを設定して認証を有効にする

Box を使用した認証では、次の例に示すように、コンポーネントで認証プロパティーを設定します。

BoxConfiguration configuration = new BoxConfiguration();
configuration.setClientId("clientId");
configuration.setClientSecret("clientSecret");
configuration.setUserName("userName");
configuration.setUserPassword("userPassword");

// add BoxComponent to Camel context
BoxComponent component = new BoxComponent(context);
component.setConfiguration(configuration);
context.addComponent("box", component);

52.10. サンプル

次のルートは、新しいファイルをユーザーのルートフォルダーにアップロードします。

from("file:...")
    .to("box://files/upload/inBody=fileUploadRequest");

次のルートは、更新のためにユーザーのアカウントをポーリングします。

from("box://events/listen?startingPosition=-1")
    .to("bean:blah");

次のルートでは、動的ヘッダーオプションを持つプロデューサーを使用します。 fileId プロパティーには Box ファイル ID があり、output プロパティーにはファイルコンテンツの出力ストリームがあるため、次のように 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 オプション

Braintree コンポーネントは、以下に示す 2 個のオプションをサポートしています。

名前説明デフォルトタイプ

configuration (common)

共有設定を使用するには

 

BraintreeConfiguration

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

Braintree エンドポイントは、URI 構文を使用して設定されます。

braintree:apiName/methodName

パスおよびクエリーパラメーターを使用します。

53.1.1. パスパラメーター (2 個のパラメーター):

名前説明デフォルトタイプ

apiName

必須 操作の種類

 

BraintreeApiName

methodName

選択した操作に使用するサブ操作

 

String

53.1.2. クエリーパラメーター (14 パラメーター)

名前説明デフォルトタイプ

environment (common)

環境 SANDBOX または PRODUCTION のいずれか

 

String

inBody (common)

ボディにて交換で渡されるパラメーターの名前を設定します。

 

String

merchantId (common)

Braintree が提供するマーチャント ID。

 

String

privateKey (common)

Braintree が提供する秘密鍵。

 

String

publicKey (common)

Braintree が提供する公開鍵。

 

String

bridgeErrorHandler (consumer)

コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

false

boolean

exceptionHandler (consumer)

コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

 

ExceptionHandler

exchangePattern (consumer)

コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。

 

ExchangePattern

accessToken (advanced)

マーチャントに代わってトランザクションを処理するために、マーチャントが別のマーチャントに付与するアクセストークン。環境、マーチャント ID、公開鍵、および秘密鍵フィールドの代わりに使用されます。

 

String

httpReadTimeout (advanced)

http 呼び出しの読み取りタイムアウトを設定します。

 

Integer

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

httpLogLevel (logging)

http 呼び出しのロギングレベルを設定します。java.util.logging.Level を参照してください。

 

String

proxyHost (proxy)

プロキシーホスト

 

String

proxyPort (proxy)

プロキシーポート

 

Integer

53.2. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 14 のオプションをサポートします。

名前説明デフォルトタイプ

camel.component.braintree.configuration.access-token

マーチャントに代わってトランザクションを処理するために、マーチャントが別のマーチャントに付与するアクセストークン。環境、マーチャント ID、公開鍵、および秘密鍵フィールドの代わりに使用されます。

 

String

camel.component.braintree.configuration.api-name

実行する操作の種類

 

BraintreeApiName

camel.component.braintree.configuration.environment

環境 SANDBOX または PRODUCTION のいずれか

 

String

camel.component.braintree.configuration.http-log-level

http 呼び出しのロギングレベルを設定します。java.util.logging.Level を参照してください。

 

レベル

camel.component.braintree.configuration.http-log-name

http 呼び出しのログに使用するログカテゴリーを設定します。デフォルトは Braintree です。

 

String

camel.component.braintree.configuration.http-read-timeout

http 呼び出しの読み取りタイムアウトを設定します。

 

Integer

camel.component.braintree.configuration.merchant-id

Braintree が提供するマーチャント ID。

 

String

camel.component.braintree.configuration.method-name

選択した操作に使用するサブ操作

 

String

camel.component.braintree.configuration.private-key

Braintree が提供する秘密鍵。

 

String

camel.component.braintree.configuration.proxy-host

プロキシーホスト

 

String

camel.component.braintree.configuration.proxy-port

プロキシーポート

 

Integer

camel.component.braintree.configuration.public-key

Braintree が提供する公開鍵。

 

String

camel.component.braintree.enabled

braintree コンポーネントを有効にする

true

Boolean

camel.component.braintree.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

53.3. URI 形式

 

braintree://endpoint-prefix/endpoint?[options]

 

エンドポイント 接頭辞は次のいずれかです。

  • アドオン
  • address
  • clientToken
  • creditCardverification
  • customer
  • discount
  • dispute
  • documentUpload
  • merchantAccount
  • paymentmethod
  • paymentmethodNonce
  • plan
  • report
  • settlementBatchSummary
  • subscription
  • transaction
  • webhookNotification

 

53.4. BraintreeComponent

Braintree コンポーネントは、以下のオプションで設定できます。これらのオプションは、タイプ org.apache.camel.component.braintree.BraintreeConfiguration のコンポーネントの Bean プロパティー 設定 を使用して提供できます。

オプションタイプ説明

environment

String

リクエストの送信先を指定する値 - sandbox または production

merchantId

String

マーチャントアカウント ID とは異なる、ゲートウェイアカウントの一意の識別子

publicKey

String

ユーザー固有の公開識別子

privateKey

String

共有してはならないユーザー固有の安全な識別子 - 私たちとさえも!

accessToken

String

Braintree Auth を使用してマーチャントに付与されるトークンで、別のマーチャントに代わってトランザクションを処理できるようになります。環境、merchantId、publicKey、および privateKey オプションの代わりに使用されます。

上記のすべてのオプションは、Braintree Payments によって提供されます。

53.5. プロデューサーエンドポイント:

プロデューサーエンドポイントは、エンドポイント 接頭辞の後にエンドポイント名と次に説明する関連オプションを使用できます。一部のエンドポイントには省略形のエイリアスを使用できます。エンドポイント URI には接頭辞が含まれている必要があります。

必須ではないエンドポイントオプションはで示されます。エンドポイントに必須のオプションがない場合、オプションのセットの 1 つを提供する必要があります。プロデューサエンドポイントは、特別なオプション inBody を使用することもできます。このオプションには、値が Camel Exchange In メッセージに含まれるエンドポイントオプションの名前が含まれている必要があります。

エンドポイントオプションは、エンドポイント URI またはメッセージヘッダーで動的に指定できます。メッセージヘッダー名は CamelBraintree.<option> の形式である必要があります。inBody オプションはメッセージヘッダーをオーバーライドすることに注意してください。つまり、エンドポイントオプション inBody=optionCamelBraintree.option ヘッダーをオーバーライドします。

エンドポイントとオプションの詳細については、https://developers.braintreepayments.com/reference/overview で Braintree のリファレンスを参照してください。

 

53.5.1. エンドポイント接頭辞 addOn

次のエンドポイントは、次のように接頭辞 addOn を使用して呼び出すことができます。

 

braintree://addOn/endpoint
エンドポイント短縮形エイリアスオプション結果ボディーのタイプ

all

 

 

List<com.braintreegateway.Addon>

53.5.2. エンドポイント接頭辞 address

次のエンドポイントは、次のように接頭辞 address を使用して呼び出すことができます。

 

braintree://address/endpoint?[options]
エンドポイント短縮形エイリアスオプション結果ボディーのタイプ

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> 

address の URI オプション

名前タイプ

customerId

String

request

com.braintreegateway.AddressRequest

id

String

53.5.3. エンドポイント接頭辞 clientToken

次のエンドポイントは、次のように接頭辞 clientToken を使用して呼び出すことができます。

 

braintree://clientToken/endpoint?[options]
エンドポイント短縮形エイリアスオプション結果ボディーのタイプ

generate

 

 request

String

clientToken の URI オプション

名前タイプ

request

com.braintreegateway.ClientTokenrequest

53.5.4. エンドポイント接頭辞 creditCardVerification

次のエンドポイントは、次のように接頭辞 creditCardverification で呼び出すことができます。

 

braintree://creditCardVerification/endpoint?[options]
エンドポイント短縮形エイリアスオプション結果ボディーのタイプ

find

 

 id

com.braintreegateway.CreditCardVerification

search

 

query

com.braintreegateway.ResourceCollection<com.braintreegateway.CreditCardVerification>

creditCardVerification の URI オプション

名前タイプ

id

String

query

com.braintreegateway.CreditCardVerificationSearchRequest

53.5.5. エンドポイント接頭辞 customer

次のエンドポイントは、次のように接頭辞 customer で呼び出すことができます。

 

braintree://customer/endpoint?[options]
エンドポイント短縮形エイリアスオプション結果ボディーのタイプ

all

 

 

 

create

 

request

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、request

com.braintreegateway.Result<com.braintreegateway.Customer>

customer の URI オプション

名前タイプ

id

String

request

com.braintreegateway.CustomerRequest

query

com.braintreegateway.CustomerSearchRequest

53.5.6. エンドポイント接頭辞 discount

次のエンドポイントは、次のように接頭辞 discount で呼び出すことができます。

 

braintree://discount/endpoint
エンドポイント短縮形エイリアスオプション結果ボディーのタイプ

all

 

 

List<com.braintreegateway.Discount>

+
+

53.5.7. エンドポイント接頭辞 dispute

次のエンドポイントは、次のように接頭辞の dispute で呼び出すことができます。

braintree://dispute/endpoint?[options]
エンドポイント短縮形エイリアスオプション結果ボディーのタイプ

accept

 

id

com.braintreegateway.Result

addFileEvidence

 

disputeId, documentId

com.braintreegateway.Result<DisputeEvidence>

addFileEvidence

 

disputeId, fileEvidenceRequest

com.braintreegateway.Result<DisputeEvidence>

addTextEvidence

 

disputeId, content

com.braintreegateway.Result<DisputeEvidence>

addTextEvidence

 

disputeId, textEvidenceRequest

com.braintreegateway.Result<DisputeEvidence>

finalize

 

id

com.braintreegateway.Result

find

 

id

com.braintreegateway.Dispute

removeEvidence

 

id

com.braintreegateway.Result

search

 

disputeSearchRequest

com.braintreegateway.PaginatedCollection<com.braintreegateway.Dispute>

dispute のための URI オプション

名前タイプ

id

String

disputeId

String

documentId

String

fileEvidenceRequest

com.braintreegateway.FileEvidenceRequest

content

String

 

textEvidenceRequest

com.braintreegateway.TextEvidenceRequest

disputeSearchRequest

53.5.8. エンドポイント接頭辞 documentUpload

次のエンドポイントは、次のように接頭辞 documentUpload で呼び出すことができます。

braintree://documentUpload/endpoint?[options]
エンドポイント短縮形エイリアスオプション結果ボディーのタイプ

create

 

request

com.braintreegateway.Result<com.braintreegateway.DocumentUpload>

documentUpload の URI オプション

名前タイプ

request

com.braintreegateway.DocumentUploadRequest

53.5.9. エンドポイント接頭辞 merchantAccount

次のエンドポイントは、次のように接頭辞 MerchantAccount で呼び出すことができます。

 

braintree://merchantAccount/endpoint?[options]
エンドポイント短縮形エイリアスオプション結果ボディーのタイプ

create

 

request

com.braintreegateway.Result<com.braintreegateway.MerchantAccount>

createForCurrency

 

currencyRequest

com.braintreegateway.Result<com.braintreegateway.MerchantAccount>

find

 

id

com.braintreegateway.MerchantAccount

update

 

id、request

com.braintreegateway.Result<com.braintreegateway.MerchantAccount>

MerchantAccount の URI オプション

名前タイプ

id

String

request

com.braintreegateway.MerchantAccountRequest

currencyRequest

com.braintreegateway.MerchantAccountCreateForCurrencyRequest

53.5.10. エンドポイント接頭辞 paymentMethod

次のエンドポイントは、次のように paymentMethod 接頭辞を付けて呼び出すことができます。

 

braintree://paymentMethod/endpoint?[options]
エンドポイント短縮形エイリアスオプション結果ボディーのタイプ

create

 

request

com.braintreegateway.Result<com.braintreegateway.PaymentMethod>

delete

 

token, deleteRequest

com.braintreegateway.Result<com.braintreegateway.PaymentMethod>

find

 

token

com.braintreegateway.PaymentMethod

update

 

token, request

com.braintreegateway.Result<com.braintreegateway.PaymentMethod>

paymentMethod の URI オプション

名前タイプ

token

String

request

com.braintreegateway.PaymentMethodRequest

deleteRequest

com.braintreegateway.PaymentMethodDeleteRequest

53.5.11. エンドポイント接頭辞 paymentMethodNonce

次のエンドポイントは、次のように接頭辞 paymentMethodNonce で呼び出すことができます。

 

braintree://paymentMethodNonce/endpoint?[options]
エンドポイント短縮形エイリアスオプション結果ボディーのタイプ

create

 

paymentMethodToken

com.braintreegateway.Result<com.braintreegateway.PaymentMethodNonce>

find

 

paymentMethodNonce

com.braintreegateway.PaymentMethodNonce

paymentMethodNonce の URI オプション

名前タイプ

paymentMethodToken

String

paymentMethodNonce

String

53.5.12. エンドポイント接頭辞 plan

次のエンドポイントは、次のように接頭辞 plan で呼び出すことができます。

 

braintree://plan/endpoint
エンドポイント短縮形エイリアスオプション結果ボディーのタイプ

all

 

 

List<com.braintreegateway.Plan>

53.5.13. エンドポイント接頭辞 report

次のエンドポイントは、次のように接頭辞 report で呼び出すことができます。

braintree://plan/report?[options]
エンドポイント短縮形エイリアスオプション結果ボディーのタイプ

transactionLevelFees

 

 request

com.braintreegateway.Result<com.braintreegateway.TransactionLevelFeeReport>

report の URI オプション

名前タイプ

request

com.braintreegateway.TransactionLevelFeeReportRequest

53.5.14. エンドポイント接頭辞 settlementBatchSummary

次のエンドポイントは、次のように、separationBatchSummary 接頭辞を使用して呼び出すことができます。

 

braintree://settlementBatchSummary/endpoint?[options]
エンドポイント短縮形エイリアスオプション結果ボディーのタイプ

generate

 

 request

com.braintreegateway.Result<com.braintreegateway.SettlementBatchSummary>

決済 BatchSummary の URI オプション

名前タイプ

settlementDate

Calendar

groupByCustomField

String

53.5.15. エンドポイント接頭辞 subscription

次のエンドポイントは、次のように接頭辞 subscription で呼び出すことができます。

 

braintree://subscription/endpoint?[options]
エンドポイント短縮形エイリアスオプション結果ボディーのタイプ

cancel

 

 id

 com.braintreegateway.Result<com.braintreegateway.Subscription>

create

 

request

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、request

com.braintreegateway.Result<com.braintreegateway.Subscription>

subscription の URI オプション

名前タイプ

id

String

request

com.braintreegateway.SubscriptionRequest

customerId

String

subscriptionId

String

amount

BigDecimal

searchRequest

com.braintreegateway.SubscriptionSearchRequest.

 

53.5.16. エンドポイント接頭辞 transaction

次のエンドポイントは、次のように接頭辞 transaction で呼び出すことができます。

 

braintree://transaction/endpoint?[options]
エンドポイント短縮形エイリアスオプション結果ボディーのタイプ

cancelRelease

 

id

com.braintreegateway.Result<com.braintreegateway.Transaction>

cloneTransaction

 

id, cloneRequest

com.braintreegateway.Result<com.braintreegateway.Transaction>

credit

 

request

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>

refund

 

id, amount, refundRequest

com.braintreegateway.Result<com.braintreegateway.Transaction>

sale

 

request

com.braintreegateway.Result<com.braintreegateway.Transaction>

search

 

query

com.braintreegateway.ResourceCollection<com.braintreegateway.Transaction>

submitForPartialSettlement

 

id, amount

com.braintreegateway.Result<com.braintreegateway.Transaction>

submitForSettlement

 

id, amount, request

com.braintreegateway.Result<com.braintreegateway.Transaction>

voidTransaction

 

id

com.braintreegateway.Result<com.braintreegateway.Transaction>

transaction の URI オプション

名前タイプ

id

String

request

com.braintreegateway.TransactionCloneRequest

cloneRequest

com.braintreegateway.TransactionCloneRequest

refundRequest

com.braintreegateway.TransactionRefundRequest

amount

BigDecimal

query

com.braintreegateway.TransactionSearchRequest

53.5.17. エンドポイント接頭辞 webhookNotification

次のエンドポイントは、次のように接頭辞 webhookNotification で呼び出すことができます。

 

braintree://webhookNotification/endpoint?[options]
エンドポイント短縮形エイリアスオプション結果ボディーのタイプ

parse

 

 signature, payload

com.braintreegateway.WebhookNotification

verify

 

challenge

String

webhookNotification の URI オプション

名前タイプ

signature

String

payload

String

challenge

String

 

53.6. コンシューマーエンドポイント

どのプロデューサーエンドポイントもコンシューマーエンドポイントとして使用できます。コンシューマーエンドポイントは、Scheduled Poll Consumer Optionsconsumer.の接頭辞を使用して、エンドポイントの呼び出しをスケジュールすることができます。デフォルトでは、配列またはコレクションを返す Consumer エンドポイントは、要素ごとに 1 つのエクスチェンジを生成し、それらのルートはエクスチェンジごとに 1 回実行されます。この動作を変更するには、プロパティー consumer.splitResults=true を使用して、リストまたは配列全体の単一のエクスチェンジを返します。 

53.7. メッセージヘッダー

プロデューサーエンドポイントのメッセージヘッダーには、CamelBraintree.という接頭辞で任意の URI オプションを提供することができます。

53.8. メッセージボディー

すべての結果メッセージボディーは、Braintree Java SDK によって提供されるオブジェクトを利用します。プロデューサーエンドポイントは、inBody エンドポイントパラメーターで受信メッセージボディーのオプション名を指定できます。

 

 

53.9. 例

ブループリント

<?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.10. 関連項目

* Camel の設定 * コンポーネント * エンドポイント * はじめに

 

 

第54章 Browse コンポーネント

Camel バージョン 1.3 以降で利用可能

Browse コンポーネントは、テスト、視覚化ツール、またはデバッグに役立つシンプルな BrowsableEndpoint を提供します。エンドポイントに送信された交換はすべて閲覧可能です。

54.1. URI 形式

browse:someName[?options]

someName は、エンドポイントを一意に識別する任意の文字列にすることができます。

54.2. オプション

Browse コンポーネントにはオプションがありません。

Browse エンドポイントは、URI 構文を使用して設定されます。

browse:name

パスおよびクエリーパラメーターを使用します。

54.2.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

name

必須 エンドポイントを一意に識別する任意の文字列の名前

 

String

54.2.2. クエリーパラメーター (4 パラメーター)

名前説明デフォルトタイプ

bridgeErrorHandler (consumer)

コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN/ERROR レベルでログに記録され、無視されます。

false

boolean

exceptionHandler (consumer)

コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN/ERROR レベルでログに記録され、無視されます。

 

ExceptionHandler

exchangePattern (consumer)

エクスチェンジの作成時にデフォルトのエクスチェンジパターンを設定します。

 

ExchangePattern

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

54.3. 例

以下のルートでは、通過する Exchange を参照できるように、browse: コンポーネントを挿入します。

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. 関連項目

  • Configuring Camel (Camel の設定)
  • コンポーネント
  • エンドポイント
  • スタートガイド

第55章 EHCache コンポーネント (非推奨)

Camel バージョン 2.1 以降で利用可能

cache コンポーネントを使用すると、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]

次の形式でクエリーオプションを URI に追加できます: ?option=value&option=#beanRef&…

55.2. オプション

EHCache コンポーネントは、以下に示す 4 個のオプションをサポートしています。

名前説明デフォルトタイプ

cacheManagerFactory (advanced)

指定された CacheManagerFactory を使用して CacheManager を作成します。デフォルトでは、DefaultCacheManagerFactory が使用されます。

 

CacheManagerFactory

configuration (common)

キャッシュ構成を設定します

 

CacheConfiguration

configurationFile (common)

クラスパスまたはファイルシステムからロードする ehcache.xml ファイルのロケーションを設定します。デフォルトでは、ファイルは classpath:ehcache.xml からロードされます

classpath:ehcache.xml

String

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

EHCache エンドポイントは、URI 構文を使用して設定されます。

cache:cacheName

パスおよびクエリーパラメーターを使用します。

55.2.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

cacheName

必須 キャッシュの名前

 

String

55.2.2. クエリーパラメーター (19 パラメーター)

名前説明デフォルトタイプ

diskExpiryThreadInterval Seconds (common)

ディスク期限切れスレッドの実行間隔の秒数。

 

long

diskPersistent (common)

アプリケーションの再起動間でディスクストアが保持されるかどうか。

false

boolean

diskStorePath (common)

非推奨 このパラメーターは無視されます。CacheManager は、setter インジェクションを使用して設定します。

 

String

eternal (common)

要素が永続的かどうかを設定します。永続的である場合、タイムアウトは無視され、要素は期限切れになりません。

false

boolean

key (common)

使用するデフォルトのキー。メッセージヘッダーにキーが指定されている場合は、ヘッダーのキーが優先されます。

 

String

maxElementsInMemory (common)

メモリー内の定義済みキャッシュに格納できる要素の数。

1000

int

memoryStoreEvictionPolicy (common)

メモリー内の要素が最大数に達したときに使用するエビクションストラテジー。ストラテジーは、削除する要素を定義します。LRU - 最近使用されないようにする LFU - 頻繁に使用されないようにする FIFO - 先入れ先出し

LFU

MemoryStoreEviction Policy

objectCache (common)

シリアル化できないオブジェクトをキャッシュに保存できるようにするかどうか。このオプションが有効になっている場合、ディスクへのオーバーフローも有効にできません。

false

boolean

operation (common)

使用するデフォルトのキャッシュ操作。メッセージヘッダー内の操作の場合、ヘッダーからの操作が優先されます。

 

String

overflowToDisk (common)

キャッシュがディスクにオーバーフローする可能性があるかどうかを指定します

true

boolean

timeToIdleSeconds (common)

要素の有効期限が切れるまでのアクセス間の最大時間

300

long

timeToLiveSeconds (common)

要素が作成されてから有効期限が切れるまでの最大時間。要素が永続的でない場合にのみ使用されます

300

long

bridgeErrorHandler (consumer)

コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

false

boolean

exceptionHandler (consumer)

コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

 

ExceptionHandler

exchangePattern (consumer)

コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。

 

ExchangePattern

cacheLoaderRegistry (advanced)

CacheLoaderRegistry を使用してキャッシュローダーを設定するには

 

CacheLoaderRegistry

cacheManagerFactory (advanced)

カスタム CacheManagerFactory を使用して、このエンドポイントで使用される CacheManager を作成します。デフォルトでは、コンポーネントに設定された CacheManagerFactory が使用されます。

 

CacheManagerFactory

eventListenerRegistry (advanced)

CacheEventListenerRegistry を使用してイベントリスナーを設定するには

 

CacheEventListener Registry

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

55.3. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 17 のオプションをサポートします。

名前説明デフォルトタイプ

camel.component.cache.cache-manager-factory

指定された CacheManagerFactory を使用して CacheManager を作成します。デフォルトでは、DefaultCacheManagerFactory が使用されます。オプションは org.apache.camel.component.cache.CacheManagerFactory タイプです。

 

String

camel.component.cache.configuration-file

クラスパスまたはファイルシステムからロードする ehcache.xml ファイルのロケーションを設定します。デフォルトでは、ファイルは classpath:ehcache.xml からロードされます

classpath:ehcache.xml

String

camel.component.cache.configuration.cache-loader-registry

CacheLoaderRegistry を使用してキャッシュローダーを設定するには

 

CacheLoaderRegistry

camel.component.cache.configuration.cache-name

キャッシュの名前

 

String

camel.component.cache.configuration.disk-expiry-thread-interval-seconds

ディスク期限切れスレッドの実行間隔の秒数。

 

Long

camel.component.cache.configuration.disk-persistent

アプリケーションの再起動間でディスクストアが保持されるかどうか。

false

Boolean

camel.component.cache.configuration.eternal

要素が永続的かどうかを設定します。永続的である場合、タイムアウトは無視され、要素は期限切れになりません。

false

Boolean

camel.component.cache.configuration.event-listener-registry

CacheEventListenerRegistry を使用してイベントリスナーを設定するには

 

CacheEventListener Registry

camel.component.cache.configuration.max-elements-in-memory

メモリー内の定義済みキャッシュに格納できる要素の数。

1000

Integer

camel.component.cache.configuration.memory-store-eviction-policy

メモリー内の要素が最大数に達したときに使用するエビクションストラテジー。ストラテジーは、削除する要素を定義します。LRU - 最近使用されないようにする LFU - 頻繁に使用されないようにする FIFO - 先入れ先出し

 

MemoryStoreEviction Policy

camel.component.cache.configuration.object-cache

シリアル化できないオブジェクトをキャッシュに保存できるようにするかどうか。このオプションが有効になっている場合、ディスクへのオーバーフローも有効にできません。

false

Boolean

camel.component.cache.configuration.overflow-to-disk

キャッシュがディスクにオーバーフローする可能性があるかどうかを指定します

true

Boolean

camel.component.cache.configuration.time-to-idle-seconds

要素の有効期限が切れるまでのアクセス間の最大時間

300

Long

camel.component.cache.configuration.time-to-live-seconds

要素が作成されてから有効期限が切れるまでの最大時間。要素が永続的でない場合にのみ使用されます

300

Long

camel.component.cache.enabled

キャッシュコンポーネントを有効にする

true

Boolean

camel.component.cache.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

camel.component.cache.configuration.disk-store-path

このパラメーターは無視されます。CacheManager は、setter インジェクションを使用して設定します。

 

String

55.4. キャッシュとのメッセージの送受信

55.4.1. Camel 2.7 までのメッセージヘッダー

ヘッダー説明

CACHE_OPERATION

キャッシュに対して実行される操作。有効なオプションは以下のとおりです

* GET * CHECK * ADD * UPDATE * DELETE * DELETEALL
GETCHECK には Camel 2.3 以降が必要です。

CACHE_KEY

メッセージをキャッシュに格納するために使用されるキャッシュキー。CACHE_OPERATION が DELETEALL の場合、キャッシュキーはオプションです。

55.4.2. Message Headers Camel 2.8 以降

Camel 2.8 でのヘッダーの変更

ヘッダー名とサポートされる値が変更され、'CamelCache' の接頭辞が付けられ、大文字と小文字が混在して使用されるようになりました。これにより、識別しやすくなり、他のヘッダーと区別しやすくなります。CacheConstants 変数名は変更されず、値が変更されただけです。また、これらのヘッダーは、キャッシュ操作の実行後にエクスチェンジから削除されるようになりました。

ヘッダー説明

CamelCacheOperation

キャッシュに対して実行される操作。有効なオプションは次のとおりです。

* CamelCacheGet * CamelCacheCheck * CamelCacheAdd * CamelCacheUpdate * CamelCacheDelete * CamelCacheDeleteAll

CamelCacheKey

メッセージをキャッシュに格納するために使用されるキャッシュキー。CamelCacheOperation が CamelCacheDeleteAll の場合、キャッシュキーはオプションです。

CamelCacheAdd および CamelCacheUpdate 操作は、追加のヘッダーをサポートします。

ヘッダータイプ説明

CamelCacheTimeToLive

Integer

Camel 2.11: 秒単位の動作時間。

CamelCacheTimeToIdle

Integer

Camel 2.11: アイドル状態になるまでの時間 (秒単位)。

CamelCacheEternal

Boolean

Camel 2.11: コンテンツが永続的かどうか。

55.4.3. Cache Producer

キャッシュへのデータの送信には、エクスチェンジのペイロードを、既存またはオンデマンドで作成されたキャッシュに格納するように指示する機能が含まれます。これを行うメカニズムには、

  • 上記のメッセージエクスチェンジヘッダーを設定します。
  • Message Exchange Body にキャッシュに送信されたメッセージが含まれていることを確認する

55.4.4. Cache Consumer

キャッシュからデータを受信するには、イベントリスナーを使用して既存のキャッシュまたはオンデマンドで作成されたキャッシュをリッスンし、キャッシュアクティビティーが発生したときに自動通知を受信する CacheConsumer の機能が必要です (つまり、CamelCacheGet/CamelCacheUpdate/CamelCacheDelete/CamelCacheDeleteAll)。このような活動が行われると

  • メッセージエクスチェンジヘッダーを含む交換と、追加/更新されたばかりのペイロードを含むメッセージエクスチェンジボディーが配置され、送信されます。
  • CamelCacheDeleteAll 操作の場合、Message Exchange Header CamelCacheKey と Message Exchange Body は取り込まれません。

55.4.5. キャッシュプロセッサー

キャッシュルックアップを実行し、ペイロードコンテンツを選択的に置き換える機能を備えた一連の優れたプロセッサーがあります。

  • body
  • token
  • xpath レベル

55.5. キャッシュの使用例

55.5.1. 例 1: キャッシュの設定

from("cache://MyApplicationCache" +
          "?maxElementsInMemory=1000" +
          "&memoryStoreEvictionPolicy=" +
              "MemoryStoreEvictionPolicy.LFU" +
          "&overflowToDisk=true" +
          "&eternal=true" +
          "&timeToLiveSeconds=300" +
          "&timeToIdleSeconds=true" +
          "&diskPersistent=true" +
          "&diskExpiryThreadIntervalSeconds=300")

55.5.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.5.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.5.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.5.5. 例 4: キャッシュ内のすべての既存のキーを削除する

RouteBuilder builder = new RouteBuilder() {
    public void configure() {
     from("direct:start")
     .setHeader(CacheConstants.CACHE_OPERATION, constant(CacheConstants.CACHE_DELETEALL))
     .to("cache://TestCache1");
    }
};

55.5.6. 例 5: キャッシュに登録されている変更をプロセッサーおよび他のプロデューサーに通知する

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
        }
     })
   }
};

55.5.7. 例 6: プロセッサーを使用してペイロードを選択的にキャッシュ値に置き換える

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.5.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.5.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.6. 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.7. キャッシュレプリケーション Camel 2.8

Camel Cache コンポーネントは、RMI、JGroups、JMS、Cache Server などのいくつかの異なるレプリケーションメカニズムを使用して、サーバーノード間でキャッシュを分散できます。

それを動作させるには、次の 2 つの方法があります。

1.ehcache.xml を手動で設定できます

または

2.次の 3 つのオプションを設定できます。

  • cacheManagerFactory
  • eventListenerRegistry
  • cacheLoaderRegistry

最初のオプションを使用して Camel Cache レプリケーションを設定するのは、すべてのキャッシュを個別に設定する必要があるため、少し大変です。そのため、キャッシュのすべての名前が不明な状況では、ehcache.xml を使用することはお勧めできません。

2 番目のオプションは、キャッシュごとにオプションを定義する必要がないため、多数の異なるキャッシュを使用する場合に適しています。これは、レプリケーションオプションが CacheManager ごとおよび CacheEndpoint ごとに設定されるためです。また、開発段階でキャッシュ名がわからない場合の唯一の方法です。

注記: Camel Cache のレプリケーションメカニズムをよりよく理解するには、EHCache のマニュアル を読むと役立つ場合があります。

55.7.1. 例: JMS キャッシュのレプリケーション

JMS レプリケーションは、最も強力で安全なレプリケーション方法です。Camel Cache レプリケーションと一緒に使用すると、かなり単純になります。例は 別のページ にあります。

第56章 Caffeine Cache コンポーネント

Camel バージョン 2.20 以降で利用可能

caffeine-cache コンポーネントを使用すると、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]

次の形式でクエリーオプションを URI に追加できます: ?option=value&option=#beanRef&…

56.2. オプション

Caffeine Cache コンポーネントは、以下に示す 2 個のオプションをサポートしています。

名前説明デフォルトタイプ

configuration (advanced)

グローバルコンポーネント設定を設定します

 

CaffeineConfiguration

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

Caffeine Cache エンドポイントは、URI 構文を使用して設定されます。

caffeine-cache:cacheName

パスおよびクエリーパラメーターを使用します。

56.2.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

cacheName

必須 キャッシュ名

 

String

56.2.2. クエリーパラメーター (19 パラメーター)

名前説明デフォルトタイプ

createCacheIfNotExist (common)

キャッシュが存在する場合、または事前設定できない場合にキャッシュを作成する必要があるかどうかを設定します。

true

boolean

bridgeErrorHandler (consumer)

コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

false

boolean

exceptionHandler (consumer)

コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

 

ExceptionHandler

exchangePattern (consumer)

コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。

 

ExchangePattern

action (producer)

デフォルトのキャッシュアクションを設定します。メッセージヘッダーにアクションが設定されている場合は、ヘッダーからの操作が優先されます。

 

String

cache (producer)

すでにインスタンス化されたキャッシュを使用するように設定するには

 

Cache

cacheLoader (producer)

LoadCache を使用する場合に CacheLoader を設定するには

 

CacheLoader

evictionType (producer)

このキャッシュの削除タイプを設定します

SIZE_BASED

EvictionType

expireAfterAccessTime (producer)

時間ベースのエビクションの場合は、アクセス時間後に有効期限を設定します (秒単位)。

300

int

expireAfterWriteTime (producer)

時間ベースのエビクションの場合に、アクセス書き込み後に有効期限を設定します (秒単位)

300

int

initialCapacity (producer)

キャッシュの初期容量を設定します

10000

int

key (producer)

デフォルトのアクションキーを設定します。メッセージヘッダーにキーが設定されている場合は、ヘッダーのキーが優先されます。

 

Object

maximumSize (producer)

キャッシュの最大サイズを設定する

10000

int

removalListener (producer)

キャッシュに特定の削除リスナーを設定する

 

RemovalListener

statsCounter (producer)

キャッシュ統計用の特定の統計カウンターを設定します

 

StatsCounter

statsEnabled (producer)

キャッシュの統計を有効にするには

false

boolean

keyType (advanced)

キャッシュキータイプ、デフォルトの java.lang.Object

java.lang.Object

String

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

valueType (advanced)

キャッシュ値の型、デフォルトは java.lang.Object

java.lang.Object

String

56.3. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 17 のオプションをサポートします。

名前説明デフォルトタイプ

camel.component.caffeine-cache.configuration.action

デフォルトのキャッシュアクションを設定します。メッセージヘッダーにアクションが設定されている場合は、ヘッダーからの操作が優先されます。

 

String

camel.component.caffeine-cache.configuration.cache

すでにインスタンス化されたキャッシュを使用するように設定するには

 

Cache

camel.component.caffeine-cache.configuration.cache-loader

LoadCache を使用する場合に CacheLoader を設定するには

 

CacheLoader

camel.component.caffeine-cache.configuration.create-cache-if-not-exist

キャッシュが存在する場合、または事前設定できない場合にキャッシュを作成する必要があるかどうかを設定します。

true

Boolean

camel.component.caffeine-cache.configuration.eviction-type

このキャッシュの削除タイプを設定します

 

EvictionType

camel.component.caffeine-cache.configuration.expire-after-access-time

時間ベースのエビクションの場合は、アクセス時間後に有効期限を設定します (秒単位)。

300

Integer

camel.component.caffeine-cache.configuration.expire-after-write-time

時間ベースのエビクションの場合に、アクセス書き込み後に有効期限を設定します (秒単位)

300

Integer

camel.component.caffeine-cache.configuration.initial-capacity

キャッシュの初期容量を設定します

10000

Integer

camel.component.caffeine-cache.configuration.key

デフォルトのアクションキーを設定します。メッセージヘッダーにキーが設定されている場合は、ヘッダーのキーが優先されます。

 

Object

camel.component.caffeine-cache.configuration.key-type

キャッシュキータイプ、デフォルトの java.lang.Object

java.lang.Object

String

camel.component.caffeine-cache.configuration.maximum-size

キャッシュの最大サイズを設定する

10000

Integer

camel.component.caffeine-cache.configuration.removal-listener

キャッシュに特定の削除リスナーを設定する

 

RemovalListener

camel.component.caffeine-cache.configuration.stats-counter

キャッシュ統計用の特定の統計カウンターを設定します

 

StatsCounter

camel.component.caffeine-cache.configuration.stats-enabled

キャッシュの統計を有効にするには

false

Boolean

camel.component.caffeine-cache.configuration.value-type

キャッシュ値の型、デフォルトは java.lang.Object

java.lang.Object

String

camel.component.caffeine-cache.enabled

caffeine-cache コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

Boolean

camel.component.caffeine-cache.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

56.4. 例

次のコードでキャッシュを使用できます。

    @Override
    protected RouteBuilder createRouteBuilder() throws Exception {
        return new RouteBuilder() {
            public void configure() {
                from("direct://start")
                    .toF("caffeine-cache://%s?cache=#cache&action=PUT&key=1", "test")
                    .toF("caffeine-cache://%s?cache=#cache&key=1&action=GET", "test")
                    .log("Test! ${body}")
                    .to("mock:result");
            }
        };
    }

このようにして、常にレジストリー内の同じキャッシュで作業できます。

56.5. 操作結果の確認

キャッシュで操作を使用するたびに、ステータスを確認するための 2 つの異なるヘッダーがあります。

CaffeineConstants.ACTION_HAS_RESULT
CaffeineConstants.ACTION_SUCCEEDED

第57章 Caffeine LoadCache コンポーネント

Camel バージョン 2.20 以降で利用可能

caffeine-loadcache コンポーネントを使用すると、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>

57.1. URI 形式

caffeine-loadcache://cacheName[?options]

次の形式でクエリーオプションを URI に追加できます: ?option=value&option=#beanRef&…

57.2. オプション

Caffeine LoadCache コンポーネントは、以下に示す 2 つのオプションをサポートしています。

名前説明デフォルトタイプ

configuration (advanced)

グローバルコンポーネント設定を設定します

 

CaffeineConfiguration

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

Caffeine LoadCache エンドポイントは、URI 構文を使用して設定されます。

caffeine-loadcache:cacheName

パスおよびクエリーパラメーターを使用します。

57.2.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

cacheName

必須 キャッシュ名

 

String

57.2.2. クエリーパラメーター (19 パラメーター)

名前説明デフォルトタイプ

createCacheIfNotExist (common)

キャッシュが存在する場合、または事前設定できない場合にキャッシュを作成する必要があるかどうかを設定します。

true

boolean

bridgeErrorHandler (consumer)

コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

false

boolean

exceptionHandler (consumer)

コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

 

ExceptionHandler

exchangePattern (consumer)

コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。

 

ExchangePattern

action (producer)

デフォルトのキャッシュアクションを設定します。メッセージヘッダーにアクションが設定されている場合は、ヘッダーからの操作が優先されます。

 

String

cache (producer)

すでにインスタンス化されたキャッシュを使用するように設定するには

 

Cache

cacheLoader (producer)

LoadCache を使用する場合に CacheLoader を設定するには

 

CacheLoader

evictionType (producer)

このキャッシュの削除タイプを設定します

SIZE_BASED

EvictionType

expireAfterAccessTime (producer)

時間ベースのエビクションの場合は、アクセス時間後に有効期限を設定します (秒単位)。

300

int

expireAfterWriteTime (producer)

時間ベースのエビクションの場合に、アクセス書き込み後に有効期限を設定します (秒単位)

300

int

initialCapacity (producer)

キャッシュの初期容量を設定します

10000

int

key (producer)

デフォルトのアクションキーを設定します。メッセージヘッダーにキーが設定されている場合は、ヘッダーのキーが優先されます。

 

Object

maximumSize (producer)

キャッシュの最大サイズを設定する

10000

int

removalListener (producer)

キャッシュに特定の削除リスナーを設定する

 

RemovalListener

statsCounter (producer)

キャッシュ統計用の特定の統計カウンターを設定します

 

StatsCounter

statsEnabled (producer)

キャッシュの統計を有効にするには

false

boolean

keyType (advanced)

キャッシュキータイプ、デフォルトの java.lang.Object

java.lang.Object

String

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

valueType (advanced)

キャッシュ値の型、デフォルトは java.lang.Object

java.lang.Object

String

57.3. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 17 のオプションをサポートします。

名前説明デフォルトタイプ

camel.component.caffeine-loadcache.configuration.action

デフォルトのキャッシュアクションを設定します。メッセージヘッダーにアクションが設定されている場合は、ヘッダーからの操作が優先されます。

 

String

camel.component.caffeine-loadcache.configuration.cache

すでにインスタンス化されたキャッシュを使用するように設定するには

 

Cache

camel.component.caffeine-loadcache.configuration.cache-loader

LoadCache を使用する場合に CacheLoader を設定するには

 

CacheLoader

camel.component.caffeine-loadcache.configuration.create-cache-if-not-exist

キャッシュが存在する場合、または事前設定できない場合にキャッシュを作成する必要があるかどうかを設定します。

true

Boolean

camel.component.caffeine-loadcache.configuration.eviction-type

このキャッシュの削除タイプを設定します

 

EvictionType

camel.component.caffeine-loadcache.configuration.expire-after-access-time

時間ベースのエビクションの場合は、アクセス時間後に有効期限を設定します (秒単位)。

300

Integer

camel.component.caffeine-loadcache.configuration.expire-after-write-time

時間ベースのエビクションの場合に、アクセス書き込み後に有効期限を設定します (秒単位)

300

Integer

camel.component.caffeine-loadcache.configuration.initial-capacity

キャッシュの初期容量を設定します

10000

Integer

camel.component.caffeine-loadcache.configuration.key

デフォルトのアクションキーを設定します。メッセージヘッダーにキーが設定されている場合は、ヘッダーのキーが優先されます。

 

Object

camel.component.caffeine-loadcache.configuration.key-type

キャッシュキータイプ、デフォルトの java.lang.Object

java.lang.Object

String

camel.component.caffeine-loadcache.configuration.maximum-size

キャッシュの最大サイズを設定する

10000

Integer

camel.component.caffeine-loadcache.configuration.removal-listener

キャッシュに特定の削除リスナーを設定する

 

RemovalListener

camel.component.caffeine-loadcache.configuration.stats-counter

キャッシュ統計用の特定の統計カウンターを設定します

 

StatsCounter

camel.component.caffeine-loadcache.configuration.stats-enabled

キャッシュの統計を有効にするには

false

Boolean

camel.component.caffeine-loadcache.configuration.value-type

キャッシュ値の型、デフォルトは java.lang.Object

java.lang.Object

String

camel.component.caffeine-loadcache.enabled

caffeine-loadcache コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

Boolean

camel.component.caffeine-loadcache.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

第58章 Castor DataFormat (非推奨)

Camel バージョン 2.1 以降で利用可能

Castor は、Castor XML ライブラリー を使用して XML ペイロードを Java オブジェクトにアンマーシャリングするか、Java オブジェクトを XML ペイロードにマーシャリングするデータ形式です。

通常、Java DSL または Spring XML のいずれかを使用して Castor Data Format を操作できます。

58.1. Java DSL を使用

from("direct:order").
  marshal().castor().
  to("activemq:queue:order");

たとえば、次の例では、デフォルトの Castor データバインディング機能を使用する名前付きの Castor の DataFormat を使用しています。

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 を使用してアンマーシャリングするために Castor を使用する方法を示しています。

<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>

この例は、データ型を 1 回だけ設定し、それを複数のルートで再利用する方法を示しています。<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 データ形式は、以下に示す 9 個のオプションをサポートしています。

名前デフォルトJava タイプ説明

mappingFile

 

String

クラスパスからロードする Castor マッピングファイルへのパス。

whitelistEnabled

true

Boolean

ホワイトリスト機能を有効にするかどうかを定義します

allowedUnmarshallObjects

 

String

非整列化を許可するオブジェクトを定義します。許可されたオブジェクトの FQN クラス名を指定でき、コンマを使用して複数のエントリーを区切ることができます。リンク org.apache.camel.util.EndpointHelper#matchPattern (String、String) で定義されたパターンに基づくワイルドカードと正規表現を使用することもできます。拒否されたオブジェクトは、許可されたオブジェクトよりも優先されます。

deniedUnmarshallObjects

 

String

拒否されたオブジェクトをアンマーシャリングするように定義します。定義済みオブジェクトの FQN クラス名を指定でき、コンマを使用して複数のエントリーを区切ることができます。リンク org.apache.camel.util.EndpointHelper#matchPattern (String、String) で定義されたパターンに基づくワイルドカードと正規表現を使用することもできます。拒否されたオブジェクトは、許可されたオブジェクトよりも優先されます。

validation

true

Boolean

検証が有効か無効か。デフォルトでは true です。

encoding

UTF-8

String

オブジェクトを XML にマーシャリングするときに使用するエンコーディング。デフォルトでは UTF-8 です。

packages

 

String[]

追加のパッケージを Castor XmlContext に追加する

classes

 

String[]

クラス名を Castor XmlContext に追加する

contentTypeHeader

false

Boolean

データフォーマットがデータ形式を実行できる場合は、データフォーマットの型で Content-Type ヘッダーを設定するかどうか。たとえば、XML にマーシャリングするデータ形式の場合は application/xml、JSON にマーシャリングするデータ形式の場合は JSon です。

58.4. Spring Boot Auto-Configuration

コンポーネントは、以下に示す 10 個のオプションをサポートします。

名前説明デフォルトタイプ

camel.dataformat.castor.allowed-unmarshall-objects

非整列化を許可するオブジェクトを定義します。許可されたオブジェクトの FQN クラス名を指定でき、コンマを使用して複数のエントリーを区切ることができます。リンク org.apache.camel.util.EndpointHelper#matchPattern (String、String) で定義されたパターンに基づくワイルドカードと正規表現を使用することもできます。拒否されたオブジェクトは、許可されたオブジェクトよりも優先されます。

 

String

camel.dataformat.castor.classes

クラス名を Castor XmlContext に追加する

 

String[]

camel.dataformat.castor.content-type-header

データフォーマットがデータ形式を実行できる場合は、データフォーマットの型で Content-Type ヘッダーを設定するかどうか。たとえば、XML にマーシャリングするデータ形式の場合は application/xml、JSON にマーシャリングするデータ形式の場合は JSon です。

false

Boolean

camel.dataformat.castor.denied-unmarshall-objects

拒否されたオブジェクトをアンマーシャリングするように定義します。定義済みオブジェクトの FQN クラス名を指定でき、コンマを使用して複数のエントリーを区切ることができます。リンク org.apache.camel.util.EndpointHelper#matchPattern (String、String) で定義されたパターンに基づくワイルドカードと正規表現を使用することもできます。拒否されたオブジェクトは、許可されたオブジェクトよりも優先されます。

 

String

camel.dataformat.castor.enabled

castor データ形式を有効にする

true

Boolean

camel.dataformat.castor.encoding

オブジェクトを XML にマーシャリングするときに使用するエンコーディング。デフォルトでは UTF-8 です。

UTF-8

String

camel.dataformat.castor.mapping-file

クラスパスからロードする Castor マッピングファイルへのパス。

 

String

camel.dataformat.castor.packages

追加のパッケージを Castor XmlContext に追加する

 

String[]

camel.dataformat.castor.validation

検証が有効か無効か。デフォルトでは true です。

true

Boolean

camel.dataformat.castor.whitelist-enabled

ホワイトリスト機能を有効にするかどうかを定義します

true

Boolean

ND

58.5. 依存関係

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 ルートを自動検出し、EndpointFluentProducerTemplateProducerTemplateTypeConverter などの一般的な Camel プリミティブの Bean を提供します。@Consume@Produce@PropertyInject などの Camel アノテーションを CDI Bean でシームレスに使用できるように、標準の Camel Bean 統合を実装します。さらに、Camel イベント (RouteAddedEventCamelContextStartedEventExchangeCompletedEvent など) を CDI イベントとしてブリッジし、Camel ルートから/への CDI イベントを消費/生成するために使用できる CDI イベントエンドポイントを提供します。

Camel CDI コンポーネントは Camel 2.10 で利用できますが、CDI プログラミングモデルにより適合するように Camel 2.17 で書き直されました。したがって、Camel イベントから CDI イベントへのブリッジや CDI イベントエンドポイントなどの一部の機能は、Camel 2.17 以降にのみ適用されます。

Camel CDI アプリケーションをテストする方法の詳細については、Camel CDI テストを参照してください。

注意

camel-cdi は OSGi では推奨されておらず、サポートされていません。OSGi で Camel を使用する場合は、OSGi Blueprint を使用します。

59.1. 自動設定された Camel コンテキスト

Camel CDI は、CamelContext Bean を自動的にデプロイおよび設定します。その CamelContext Bean は、CDI コンテナーの初期化 (またはシャットダウン) 時に、自動的にインスタンス化、設定、および開始 (または停止) されます。アプリケーションに注入できます。たとえば、次のようになります。

@Inject
CamelContext context;

そのデフォルトの CamelContext Bean は、ビルトインの @Default 修飾子で修飾され、スコープが @ApplicationScoped であり、タイプ DefaultCamelContext です。

この Bean はプログラムでカスタマイズでき、他の Camel コンテキスト Bean もアプリケーションにデプロイできることに注意してください。

59.2. Camel ルートの自動検出

Camel CDI は、アプリケーション内のすべての RoutesBuilder Bean を自動的に収集し、インスタンス化して、CDI コンテナーの初期化時に CamelContext Bean インスタンスに追加します。たとえば、Camel ルートの追加は、クラスを宣言するのと同じくらい簡単です。

class MyRouteBean extends RouteBuilder {
 
    @Override
    public void configure() {
        from("jms:invoices").to("file:/invoices");
    }
}

必要な数の RoutesBuilder Bean を宣言できることに注意してください。さらに、RouteContainer Bean も自動的に収集され、インスタンス化され、コンテナーの初期化時に Camel CDI によって管理される CamelContext Bean インスタンスに追加されます。

Camel 2.19 以降で利用可能

状況によっては、RouteBuilder および RouteContainer Bean の自動設定を無効にする必要がある場合があります。これは、CdiCamelConfiguration イベントを監視することで実現できます。

static void configuration(@Observes CdiCamelConfiguration configuration) {
    configuration.autoConfigureRoutes(false);
}

同様に、設定された CamelContext Bean の自動起動を無効にすることができます。

static void configuration(@Observes CdiCamelConfiguration configuration) {
    configuration.autoStartContexts(false);
}

59.3. 自動設定された Camel プリミティブ

Camel CDI は、任意の CDI Bean に注入できる一般的な Camel プリミティブの Bean を提供します。

@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 Bean の名前を変更するだけの場合は、Camel CDI によって提供される @ContextName 修飾子を使用できます。

@ContextName("camel-context")
class MyRouteBean extends RouteBuilder {
 
    @Override
    public void configure() {
        from("jms:invoices").to("file:/invoices");
    }
}

それ以外の場合、さらにカスタマイズが必要な場合は、任意の CamelContext クラスを使用してカスタム Camel コンテキスト Bean を宣言できます。次に、@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 コンテキスト Bean をカスタマイズすることもできます。次に例を示します。

class CamelContextFactory {

    @Produces
    @ApplicationScoped
    CamelContext customize() {
        DefaultCamelContext context = new DefaultCamelContext();
        context.setName("custom");
        return context;
    }

    void cleanUp(@Disposes CamelContext context) {
        // ...
    }
}

同様に、producer fields を使用できます。

@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 Bean を宣言できます。その場合、これらの CamelContext Bean で宣言された CDI 修飾子は、対応する Camel コンテキストへの Camel ルートおよび他の Camel プリミティブを BIND するために使用されます。例から、次の Bean が宣言された場合:

@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 Bean は、Camel CDI によって対応する CamelContext Bean に自動的に追加されます。そのような CamelContext Bean が存在しない場合は、RouteAddedToBazCamelContext Bean の場合と同様に、自動的に作成されます。これは、Camel CDI によって提供される @ContextName 修飾子に対してのみ発生することに注意してください。したがって、ユーザー定義の @MyOtherQualifier 修飾子で修飾された RouteNotAddedToAnyCamelContext Bean は、どの Camel コンテキストにも追加されません。これは、たとえば、後でアプリケーションの実行中に追加する必要がある Camel ルートの場合に役立ちます。

注記

Camel バージョン 2.17.0 以降、Camel CDI はあらゆる種類の CamelContext Bean (例: DefaultCamelContext) を管理できます。以前のバージョンでは、タイプ CdiCamelContext の Bean しか管理できないため、拡張する必要があります。

CamelContext Bean で宣言された CDI 修飾子は、対応する Camel プリミティブを BIND するためにも使用されます。

@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 Bean を宣言できます。

@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 Bean を宣言できます。

@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 Bean は、デプロイされた Camel コンテキストに自動的に登録されます。

@Converter
public class MyTypeConverter {

    @Converter
    public Output convert(Input input) {
        //...
    }
}

型コンバーター内で CDI インジェクションがサポートされていることに注意してください。

59.8. Camel Bean の統合

59.8.1. Camel アノテーション

Camel Bean 統合 の一部として、Camel には、Camel CDI によってシームレスにサポートされる一連の アノテーション が付属しています。したがって、CDI Bean でこれらのアノテーションのいずれかを使用できます。

 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;

エンドポイントインジェクション (名前による Camel コンテキスト)

@EndpointInject(uri = "direct:inbound",
                context = "foo")
Endpoint contextEndpoint;
@Inject
@ContextName("foo")
@Uri("direct:inbound")
Endpoint contextEndpoint;

Bean インジェクション (種類別)

@BeanInject
MyBean bean;
@Inject
MyBean bean;

Bean インジェクション (名前別)

@BeanInject("foo")
MyBean bean;
@Inject
@Named("foo")
MyBean bean;

POJO consuming

@Consume(uri = "seda:inbound")
void consume(@Body String body) {
    //...
}

 

59.8.2. Bean コンポーネント

Java Camel DSL などを使用して、Camel DSL から、タイプまたは名前で CDI Bean を参照できます。

class MyBean {
    //...
}

from("direct:inbound").bean(MyBean.class);

または、Java DSL から名前で CDI Bean を検索するには:

@Named("foo")
class MyNamedBean {
    //...
}

from("direct:inbound").bean("foo");

59.8.3. エンドポイント URI からの Bean の参照

URI 構文を使用してエンドポイントを設定する場合、# 表記を使用してレジストリー内の Bean を参照できます。 URI パラメーター値が # 記号で始まる場合、Camel CDI は指定されたタイプの Bean を名前で検索します。

from("jms:queue:{{destination}}?transacted=true&transactionManager=#jtaTransactionManager").to("...");

次の CDI Bean を @Named("jtaTransactionManager") で修飾します。

@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 observer メソッド を使用して監視できる CDI イベントにシームレスに変換します。

void onContextStarting(@Observes CamelContextStartingEvent event) {
    // Called before the default Camel context is about to start
}

Camel 2.18 の時点で、特定のルート (RouteAddedEventRouteStartedEventRouteStoppedEvent、および RouteRemovedEvent) のイベントを監視することが可能です。

from("...").routeId("foo").to("...");

void onRouteStarted(@Observes @Named("foo") RouteStartedEvent event) {
    // Called after the route "foo" has started
}

複数の Camel コンテキストが CDI コンテナーに存在する場合、@ContextName などの Camel コンテキスト Bean 修飾子を使用して、observer resolution で指定されている特定の Camel コンテキストに observer メソッドのソリューションを絞り込むことができます。次に例を示します。

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 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 イベントをリッスンする observer メソッドが検出され、Camel コンテキストごとに検出された場合にのみアクティブ化されることに注意してください。

59.10. CDI イベントエンドポイント

Camel 2.17 以降で利用可能

CDI イベントエンドポイントは、CDI イベントを Camel ルートにブリッジし、CDI イベントを Camel コンシューマー (または Camel プロデューサー) からシームレスに監視/消費 (または生成/起動) できるようにします。

Camel CDI が提供する CdiEventEndpoint<T> Bean を使用して、イベントタイプ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> Bean を使用して、イベントタイプT である 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 lambda 式を使用します。

@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. 修飾子) は、パラメーター化された イベント型 (resp. イベント修飾子) に自動的に変換されます。

@Inject
@FooQualifier
CdiEventEndpoint<List<String>> cdiEventEndpoint;

from("direct:event").to(cdiEventEndpoint);

void observeCdiEvents(@Observes @FooQualifier List<String> event) {
    logger.info("CDI event: {}", event);
}

複数の Camel コンテキストが CDI コンテナーに存在する場合、@ContextName などの Camel コンテキスト Bean 修飾子を使用して、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 エンドポイントは、イベントタイプイベント修飾子 の一意の組み合わせごとに observer メソッドを 動的に追加し、コンテナータイプセーフ オブザーバーソリューション にのみ依存することに注意してください。これにより、実装が可能な限り効率的になります。

さらに、CDI の タイプセーフな 性質と Camel コンポーネント モデルの 動的な 性質の間のインピーダンスが非常に高いため、URI を介して CDI イベント Camel エンドポイントのインスタンスを作成することはできません。実際、CDI イベントコンポーネントの URI 形式は次のとおりです。

cdi-event://PayloadType<T1,...,Tn>[?qualifiers=QualifierType1[,...[,QualifierTypeN]...]]

権限 PayloadType (resp. QualifierType) は、URI エスケープされたペイロード (resp. qualifier) の raw タイプの完全修飾名であり、その後に、ペイロードのパラメーター化された型の山括弧で区切られた型パラメーターセクションが続きます。これは、不親切な 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 コンテキストを設定すると便利な場合があります。

Camel CDI によって提供される @ImportResource アノテーションを任意の CDI Bean で使用できます。Camel CDI は、指定されたロケーションに Camel XML 設定を自動的にロードします。

@ImportResource("camel-context.xml")
class MyBean {
}

Camel CDI は、クラスパスから指定されたロケーションにリソースをロードします (他のプロトコルが将来追加される可能性があります)。

インポートされたリソースのすべての CamelContext 要素とその他の Camel プリミティブは、コンテナーのブートストラップ中に CDI Bean として自動的にデプロイされるため、Camel CDI によって提供される自動設定の恩恵を受け、実行時に注入できるようになります。そのような要素に明示的な id 属性が設定されている場合、対応する CDI Bean は @Named 修飾子で修飾されます。たとえば、次の Camel XML 設定が与えられます。

<camelContext id="foo">
    <endpoint id="bar" uri="seda:inbound">
        <property key="queue" value="#queue"/>
        <property key="concurrentConsumers" value="10"/>
    </endpoint>
<camelContext/>

対応する CDI Bean が自動的にデプロイされ、注入することができます。

@Inject
@ContextName("foo")
CamelContext context;

@Inject
@Named("bar")
Endpoint endpoint;

CamelContext Bean は、@Named 修飾子と @ContextName 修飾子の両方で自動的に修飾されることに注意してください。インポートされた CamelContext 要素に id 属性がない場合、対応する Bean は組み込みの @Default 修飾子でデプロイされます。

逆に、アプリケーションにデプロイされた CDI Bean は、通常は ref 属性を使用して、Camel XML 設定から参照できます。たとえば、次の Bean が宣言されているとします。

@Produces
@Named("baz")
Processor processor = exchange -> exchange.getIn().setHeader("qux", "quux");

その Bean への参照は、インポートされた Camel XML 設定で宣言できます。

<camelContext id="foo">
    <route>
        <from uri="..."/>
        <process ref="baz"/>
    </route>
<camelContext/>

59.12. トランザクションサポート

Camel 2.19 以降で利用可能

Camel CDI は、JTA を使用して Camel トランザクションクライアントをサポートします。

このサポートはオプションであるため、アプリケーションのクラスパスに JTA を含める必要があります。たとえば、Maven を使用するときに JTA を依存関係として明示的に追加します。

<dependency>
    <groupId>javax.transaction</groupId>
    <artifactId>javax.transaction-api</artifactId>
    <scope>runtime</scope>
</dependency>

アプリケーションを JTA 対応コンテナーにデプロイするか、スタンドアロンの JTA 実装を提供する必要があります。

注意

当面の間、トランザクションマネージャーは java:/TransactionManager キーで JNDI リソースとしてルックアップされることに注意してください。

より幅広いデプロイメントシナリオをサポートするために、より柔軟なストラテジーが将来追加される予定です。

59.12.1. トランザクションポリシー

Camel CDI は、通常サポートされる Camel TransactedPolicy の実装を CDI Bean として提供します。これらのポリシーは、処理された 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 は、再配信エラーハンドラーを拡張するトランザクションエラーハンドラーを提供し、例外が発生するたびにロールバックを強制し、再配信ごとに新しいトランザクションを作成します。

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. 自動設定された OSGi 統合

Camel 2.17 以降で利用可能

Camel コンテキスト Bean は、Camel CDI によって自動的に適応されるため、OSGi サービスとして登録され、さまざまなリゾルバー (ComponentResolverDataFormatResolver など) が OSGi レジストリーと統合されます。これは、Karaf Camel コマンドを使用して、Camel CDI によって自動設定された Camel コンテキストを操作できることを意味します。

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. レイジーインジェクション/プログラムによるルックアップ

CDI プログラムモデルは、アプリケーションの初期化時に発生する タイプセーフな解決 メカニズムを優先しますが、プログラムによるルックアップ メカニズムを使用して、後でアプリケーションの実行中に動的/レイジーインジェクションを実行することができます。

Camel CDI は、便宜上、Camel プリミティブの標準的な注入に使用できる CDI 修飾子に対応する注釈リテラルを提供します。これらの注釈リテラルは、レイジーインジェクション/プログラムによるルックアップを実行するための CDI エントリーポイントである javax.enterprise.inject.Instance インターフェイスと組み合わせて使用できます。

たとえば、@Uri 修飾子に提供されたアノテーションリテラルを使用して、ProducerTemplate Bean などの Camel プリミティブを遅延検索できます。

@Any
@Inject
Instance<ProducerTemplate> producers;

ProducerTemplate inbound = producers
    .select(Uri.Literal.of("direct:inbound"))
    .get();

または エンドポイント Bean の場合は、次のようになります。

@Any
@Inject
Instance<Endpoint> endpoints;

MockEndpoint outbound = endpoints
    .select(MockEndpoint.class, Uri.Literal.of("mock:outbound"))
    .get();

同様に、@ContextName 修飾子に提供されたアノテーションリテラルを使用して、CamelContext Bean を遅延検索できます。

@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 準拠のランタイムと互換性があります。次のランタイムに対して正常にテストされています。

ContainerVersionランタイム

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 プロジェクトの examples ディレクトリーにあります。

説明

camel-example-cdi

コンポーネント、エンドポイント、および Bean を設定するために 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 を使用する Web アプリケーションで使用されている 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 ブックのウィジェットとガジェットのユースケース

59.18. 関連項目

59.19. WildFly-Camel での EAR デプロイメント用の Camel CDI

WildFly-Camel での Camel CDI EAR デプロイメントは、標準の WAR または JAR デプロイメントと比較して、クラスおよびリソースのロード動作にいくつかの違いがあります。

WildFly は、EAR デプロイメント ClassLoader を使用して Weld をブートストラップします。WildFly では、単一の CDI 拡張機能のみを作成し、すべての EAR サブデプロイメントで共有することも義務付けています。

これにより、EAR デプロイメント ClassLoader を使用して自動設定 CDI Camel コンテキストが生成され、クラスとリソースが動的にロードされます。デフォルトでは、この ClassLoader は EAR サブデプロイメント内のリソースにアクセスできません。

EAR デプロイメントの場合、自動設定された CDI Camel コンテキストの使用を避け、RouteBuilder クラスに @ContextName のアノテーションを付けるか、@ImportResource アノテーションまたは CDI producer メソッドとフィールドを介して CamelContext を作成することをお勧めします。これは、WildFly-Camel が Camel で使用する正しい ClassLoader を決定するのに役立ちます。

第60章 Chronicle エンジンコンポーネント

Camel バージョン 2.18 以降で利用可能

camel クロニクルエンジンコンポーネントを使用すると、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 個のパラメーター):

名前説明デフォルトタイプ

addresses

必須 エンジンアドレス。複数のアドレスはコンマで区切ることができます。

 

String

path

必須 エンジンパス

 

String

60.2.2. クエリーパラメーター (12 パラメーター)

名前説明デフォルトタイプ

action (common)

実行するデフォルトのアクションで、有効な値は次のとおりです: - PUBLISH - PPUBLISH_AND_INDEX - PPUT - PGET_AND_PUT - PPUT_ALL - PPUT_IF_ABSENT - PGET - PGET_AND_REMOVE - PREMOVE - PIS_EMPTY - PSIZE

 

String

clusterName (common)

キューのクラスター名

 

String

filteredMapEvents (common)

ファイラーへの Map イベントタイプのコンマ区切りリスト。有効な値は、INSERT、UPDATE、REMOVE です。

 

String

persistent (common)

データの永続性を有効/無効にする

true

boolean

subscribeMapEvents (common)

コンシューマーが Map イベントをサブスクライブする必要があるかどうかを設定します。デフォルトは true です。

true

boolean

subscribeTopicEvents (common)

コンシューマーが TopicEvents にサブスクライブする必要があるかどうかを設定します。デフォルトは false です。

false

boolean

subscribeTopologicalEvents (common)

コンシューマーが TopologicalEvents にサブスクライブする必要があるかどうかを設定します。デフォルトは false です。

false

boolean

wireType (common)

使用するワイヤータイプ。デフォルトはバイナリーワイヤーです。

BINARY

String

bridgeErrorHandler (consumer)

コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

false

boolean

exceptionHandler (consumer)

コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

 

ExceptionHandler

exchangePattern (consumer)

コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。

 

ExchangePattern

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

60.3. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 2 つのオプションをサポートします。

名前説明デフォルトタイプ

camel.component.chronicle-engine.enabled

記録エンジンコンポーネントを有効にする

true

Boolean

camel.component.chronicle-engine.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

第61章 Chunk コンポーネント

Camel バージョン 2.15 以降で利用可能

chunk: コンポーネントを使用すると、Chunk テンプレートを使用してメッセージを処理できます。これは、テンプレーティングを使用してリクエストに対するレスポンスを生成する場合に理想的です。

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 は、呼び出すテンプレートのクラスパスローカル URI です。

URI には、?option=value&option=value&…​ の形式でクエリーオプションを追加できます。

61.2. オプション

Chunk コンポーネントは、次に示す 2 個のオプションをサポートしています。

名前説明デフォルトタイプ

allowContextMapAll (producer)

コンテキストマップが前詳細へのアクセスを許可するかどうかを設定します。デフォルトでは、メッセージの本文とヘッダーにのみアクセスできます。このオプションは、現在の Exchange および CamelContext へのフルアクセスに対して有効にできます。これを行うと、CamelContext API の全機能へのアクセスが開かれるため、潜在的なセキュリティーリスクが発生します。

false

boolean

allowTemplateFromHeader (producer)

ヘッダーのリソーステンプレートの使用を許可するかどうか (デフォルトは false)。このオプションを有効にすると、セキュリティーに影響があります。たとえば、ヘッダーに信頼されていないコンテンツやユーザー派生コンテンツが含まれている場合、これは最終的にエンドアプリケーションの信頼性および完全性に影響を与える可能性があるため、このオプションは注意して使用してください。

false

boolean

Chunk エンドポイントは、URI 構文を使用して設定されます。

chunk:resourceUri

パスおよびクエリーパラメーターを使用します。

61.2.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

resourceUri

必須 リソースへのパス。プリフィックスには、classpath、file、http、ref、または bean. classpath、file、http を付けることができます (classpath はデフォルト)。ref は、レジストリーでリソースを検索します。Bean は、リソースとして使用される Bean のメソッドを呼び出します。Bean の場合は、ドットの後にメソッド名を指定できます (例:bean:myBean.myMethod)。

 

String

61.2.2. クエリーパラメーター(9 パラメーター):

名前説明デフォルトタイプ

allowContextMapAll (producer)

コンテキストマップが前詳細へのアクセスを許可するかどうかを設定します。デフォルトでは、メッセージの本文とヘッダーにのみアクセスできます。このオプションは、現在の Exchange および CamelContext へのフルアクセスに対して有効にできます。これを行うと、CamelContext API の全機能へのアクセスが開かれるため、潜在的なセキュリティーリスクが発生します。

false

boolean

allowTemplateFromHeader (producer)

ヘッダーのリソーステンプレートの使用を許可するかどうか (デフォルトは false)。このオプションを有効にすると、セキュリティーに影響があります。たとえば、ヘッダーに信頼されていないコンテンツやユーザー派生コンテンツが含まれている場合、これは最終的にエンドアプリケーションの信頼性および完全性に影響を与える可能性があるため、このオプションは注意して使用してください。

false

boolean

contentCache (producer)

リソースコンテンツキャッシュを使用するかどうかを設定します。

false

boolean

encoding (producer)

本文のエンコーディングを定義する

 

String

extension (producer)

テンプレートのファイル拡張子を定義する

 

String

themeFolder (producer)

スキャンするテーマフォルダーを定義する

 

String

themeLayer (producer)

精緻化するテーマレイヤーを定義する

 

String

themeSubfolder (producer)

スキャンするテーマのサブフォルダーを定義します

 

String

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

61.3. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 2 つのオプションをサポートします。

名前説明デフォルトタイプ

camel.component.chunk.enabled

chunk コンポーネントを有効にする

true

Boolean

camel.component.chunk.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

Chunk コンポーネントは、拡張子が .chtml または _.cxml の テーマ フォルダーで特定のテンプレートを探します。_ 別のフォルダーまたは拡張子を指定する必要がある場合は、上記の特定のオプションを使用する必要があります。

61.4. Chunk コンテキスト

Camel は Chunk コンテキスト (単なる Map) で交換情報を提供します。Exchange は次のように転送されます。

 

keyvalue

exchange

Exchange 自体。

exchange.properties

Exchange プロパティー。

ヘッダー

In メッセージのヘッダー。

camelContext

Camel コンテキスト

request

IN メッセージ

body

In メッセージボディー

response

Out メッセージ (InOut メッセージエクスチェンジパターンのみ)。

61.5. 動的テンプレート

Camel は、テンプレートまたはテンプレートコンテンツ自体の異なるリソースのロケーションを定義できる 2 つのヘッダーを提供します。これらのヘッダーのいずれかが設定されている場合、Camel はエンドポイントで設定されたリソースに対してこれを使用します。これにより、実行時に動的なテンプレートを提供できます。

ヘッダータイプ説明サポートバージョン

ChunkConstants.CHUNK_RESOURCE_URI

String

設定されたエンドポイントの代わりに使用するテンプレートリソースの URI。

 

ChunkConstants.CHUNK_TEMPLATE

String

設定されたエンドポイントの代わりに使用するテンプレート。

 

61.6. サンプル

たとえば、次のようなものを使用できます。

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?allowTemplateFromHeader=true");
警告

allowTemplateFromHeader オプションを有効にすると、セキュリティー上の問題が発生します。たとえば、ヘッダーに信頼されていないコンテンツやユーザー派生コンテンツが含まれている場合、これは最終的にエンドアプリケーションの信頼性および完全性に影響を与える可能性があるため、このオプションは注意して使用してください。

Chunk コンポーネントオプションの使用例:

from("direct:in").
to("chunk:file_example?themeFolder=template&themeSubfolder=subfolder&extension=chunk");

この例では、Chunk コンポーネントは、フォルダー template/subfolder. でファイル file_example.chunk を探します。

61.7. 電子メールのサンプル

このサンプルでは、注文確認電子メールに Chunk テンプレーティングを使用します。電子メールテンプレートは、次のように Chunk に配置されます。

 
Dear {$headers.lastName}, {$headers.firstName}

Thanks for the order of {$headers.item}.

Regards Camel Riders Bookstore
{$body}

61.8. 関連項目

  • Configuring Camel (Camel の設定)
  • コンポーネント
  • エンドポイント
  • スタートガイド

第62章 Class コンポーネント

Camel バージョン 2.4 以降で利用可能

class: コンポーネントは、Bean を Camel メッセージエクスチェンジにバインドします。Bean コンポーネントと同じように機能しますが、レジストリーから Bean を検索する代わりに、クラス名に基づいて Bean を作成します。

62.1. URI 形式

class:className[?options]

className は、作成して Bean として使用する完全修飾クラス名です。

62.2. オプション

Class コンポーネントは、次に示す 2 個のオプションをサポートしています。

名前説明デフォルトタイプ

cache (advanced)

有効にすると、Camel は最初のレジストリールックアップの結果をキャッシュします。レジストリー内の Bean がシングルトンスコープとして定義されている場合、キャッシュを有効にできます。

 

Boolean

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

Class エンドポイントは、URI 構文を使用して設定されます。

class:beanName

パスおよびクエリーパラメーターを使用します。

62.2.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

beanName

必須: 呼び出す Bean の名前を設定します。

 

String

62.2.2. クエリーパラメーター (5 つのパラメーター):

名前説明デフォルトタイプ

method (producer)

Bean で呼び出すメソッドの名前を設定します。

 

String

cache (advanced)

有効にすると、Camel は最初のレジストリールックアップの結果をキャッシュします。レジストリー内の Bean がシングルトンスコープとして定義されている場合、キャッシュを有効にできます。

 

Boolean

multiParameterArray (advanced)

非推奨 メッセージ本文から渡されるパラメーターの処理方法。true の場合、メッセージボディーはパラメーターの配列である必要があります。注記: このオプションは Camel によって内部的に使用され、エンドユーザーが使用することを意図したものではありません。非推奨の注記: このオプションは Camel によって内部的に使用され、エンドユーザーが使用することを意図したものではありません。

false

boolean

parameters (advanced)

Bean の追加プロパティーの設定に使用します

 

Map

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

62.3. 使用

class コンポーネントを単に Bean コンポーネントと同じように使用しますが、代わりに完全修飾クラス名を指定します。
たとえば、MyFooBean を使用するには、次のようにする必要があります。

    from("direct:start").to("class:org.apache.camel.component.bean.MyFooBean").to("mock:result");

hello など、MyFooBean で呼び出すメソッドを指定することもできます。

    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 でレジストリーから Bean を検索し、MyPrefixBean クラスの作成されたインスタンスで setCool メソッドを呼び出します。

ヒント: class コンポーネントはほとんど同じように機能するため、Bean コンポーネントで詳細を参照してください。

62.5. 関連項目

  • Configuring Camel (Camel の設定)
  • コンポーネント
  • エンドポイント
  • スタートガイド
  • Bean
  • Bean バインディング
  • Bean インテグレーション

第63章 CMIS コンポーネント

Camel バージョン 2.11 以降で利用可能

cmis コンポーネントは Apache Chemistry クライアント API を使用し、CMIS 準拠のコンテンツリポジトリーにノードを追加したり、そこからノードを読み取ったりできるようにします。

63.1. URI 形式

cmis://cmisServerUrl[?options]

URI には、?options=value&option2=value&…​ という形式でクエリーオプションを追加できます。

63.2. CMIS オプション

CMIS コンポーネントは、次に示す 2 個のオプションをサポートしています。

名前説明デフォルトタイプ

sessionFacadeFactory (common)

カスタム CMISSessionFacadeFactory を使用して CMISSessionFacade インスタンスを作成する場合

 

CMISSessionFacade Factory

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

CMIS エンドポイントは、URI 構文を使用して設定されます。

cmis:cmsUrl

パスおよびクエリーパラメーターを使用します。

63.2.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

cmsUrl

必須 cmis リポジトリーへの URL

 

String

63.2.2. クエリーパラメーター (13 パラメーター)

名前説明デフォルトタイプ

pageSize (common)

ページごとに取得するノードの数

100

int

readContent (common)

true に設定すると、プロパティーに加えてドキュメントノードのコンテンツが取得されます。

false

boolean

readCount (common)

読み取るノードの最大数

 

int

repositoryId (common)

使用するリポジトリーの ID。指定しない場合、最初に使用可能なリポジトリーが使用されます

 

String

bridgeErrorHandler (consumer)

コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

false

boolean

query (consumer)

リポジトリーに対して実行する cmis クエリー。指定しない場合、コンシューマーはコンテンツツリーを再帰的に反復することにより、コンテンツリポジトリーからすべてのノードを取得します。

 

String

exceptionHandler (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

password (security)

cmis リポジトリーのパスワード

 

String

username (security)

cmis リポジトリーのユーザー名

 

String

63.3. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 3 つのオプションをサポートします。

名前説明デフォルトタイプ

camel.component.cmis.enabled

cmis コンポーネントを有効にする

true

Boolean

camel.component.cmis.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

camel.component.cmis.session-facade-factory

カスタム CMISSessionFacadeFactory を使用して CMISSessionFacade インスタンスを作成するには。オプションは org.apache.camel.component.cmis.CMISSessionFacadeFactory タイプです。

 

String

63.4. 使用方法

63.4.1. プロデューサーによって評価されるメッセージヘッダー

ヘッダーデフォルト値説明

CamelCMISFolderPath

/

実行中に使用する現在のフォルダー。指定しない場合は、ルートフォルダーが使用されます

CamelCMISRetrieveContent

false

queryMode では、このヘッダーはプロデューサーに強制的にドキュメントノードのコンテンツを取得させます。

CamelCMISReadSize

0

読み取るノードの最大数。

cmis:path

null

CamelCMISFolderPath が設定されていない場合、このcmisプロパティからノードのパスを見つけようとし、それが名前である場合

cmis:name

null

CamelCMISFolderPath が設定されていない場合、この cmis プロパティーからノードのパスを見つけようとします。

cmis:objectTypeId

null

ノードのタイプ

cmis:contentStreamMimeType

null

ドキュメントに設定する MIME タイプ

63.4.2. Producer 操作のクエリー中に設定されるメッセージヘッダー

ヘッダータイプ説明

CamelCMISResultCount

Integer

クエリーから返されたノードの数。

メッセージ本文にはマップのリストが含まれます。マップの各エントリーは cmis プロパティーとその値です。CamelCMISRetrieveContent ヘッダーが true に設定されている場合、キー CamelCMISContent を持つマップ内の 1 つの追加エントリーには、ノードのドキュメントタイプの InputStream が含まれます。

63.5. 依存関係

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.6. 関連項目

  • Configuring Camel (Camel の設定)
  • コンポーネント
  • エンドポイント
  • スタートガイド

第64章 CM SMS ゲートウェイコンポーネント

Camel バージョン 2.18 以降で利用可能

Camel-Cm-Sms は、CM SMS Gateway (https://www.cmtelecom.com) の Apache Camel コンポーネントです。

CM SMS API をキャメルコンポーネントとしてアプリケーションに統合できます。

有効なアカウントが必要です。詳細については、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 Gateway コンポーネントにはオプションがありません。

CM SMS ゲートウェイエンドポイントは、URI 構文を使用して設定されます。

cm-sms:host

パスおよびクエリーパラメーターを使用します。

64.1.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

host

必須 SMS プロバイダー HOST とスキーム

 

String

64.1.2. クエリーパラメーター (5 つのパラメーター):

名前説明デフォルトタイプ

defaultFrom (producer)

これは差出人の名前です。最大長は 11 文字です。

 

String)

defaultMaxNumberOfParts (producer)

マルチパートメッセージの場合は、最大数を強制します。メッセージは切り詰めることができます。技術的には、ゲートウェイは最初にメッセージが 160 文字を超えるかどうかをチェックします。160 文字を超える場合、メッセージはこれらのパラメーターによって制限された複数の 153 文字の部分に分割されます。

8

Max(8L)::Int)

productToken (producer)

必須 使用する一意のトークン

 

String)

testConnectionOnStartup (producer)

起動時に SMS ゲートウェイへの接続をテストするかどうか

false

boolean

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

64.2. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 2 つのオプションをサポートします。

名前説明デフォルトタイプ

camel.component.cm-sms.enabled

cm-sms コンポーネントを有効にする

true

Boolean

camel.component.cm-sms.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

64.3. 例

このプロジェクト を試して、camel-cm-sms をキャメルルートに統合する方法を確認できます。

第65章 CoAP コンポーネント

Camel バージョン 2.16 以降で利用可能

Camel-CoAP は、マシン間の操作のための軽量な REST タイプのプロトコルである CoAP を操作できるようにする Apache Camel コンポーネントです。CoAP、Constrained Application Protocol は、制約のあるノードと制約のあるネットワークで使用するための特殊な Web 転送プロトコルであり、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 個のパラメーター):

名前説明デフォルトタイプ

uri

CoAP エンドポイントの URI

 

URI

65.1.2. クエリーパラメーター (5 つのパラメーター):

名前説明デフォルトタイプ

bridgeErrorHandler (consumer)

コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

false

boolean

coapMethodRestrict (consumer)

CoAP コンシューマーが BIND するメソッドのコンマ区切りリスト。デフォルトは、すべてのメソッド (DELETE、GET、POST、PUT) に対して BIND です。

 

String

exceptionHandler (consumer)

コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

 

ExceptionHandler

exchangePattern (consumer)

コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。

 

ExchangePattern

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

65.2. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 2 つのオプションをサポートします。

名前説明デフォルトタイプ

camel.component.coap.enabled

coap コンポーネントを有効にする

true

Boolean

camel.component.coap.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

65.3. メッセージヘッダー

名前タイプ説明

CamelCoapMethod

String

ターゲット CoAP サーバー URI を呼び出すときに CoAP プロデューサーが使用する要求メソッド。有効なオプションは、DELETE、GET、PING、POST、および PUT です。

CamelCoapResponseCode

String

外部サーバーから送信された CoAP 応答コード。各コードの意味の詳細については、RFC 7252 を参照してください。

CamelCoapUri

String

呼び出す CoAP サーバーの URI。エンドポイントで直接設定された既存の URI をオーバーライドします。

65.3.1. CoAP プロデューサーリクエストメソッドの設定

次のルールは、CoAP プロデューサーがターゲット URI を呼び出すために使用するリクエストメソッドを決定します。

  1. CamelCoapMethod ヘッダーの値
  2. ターゲット CoAP サーバー URI でクエリー文字列が提供されている場合は GET
  3. メッセージエクスチェンジボディーが null でない場合は POST
  4. それ以外の場合は GET

第66章 Constant 言語

Camel バージョン 1.5 以降で利用可能

定数式言語は、定数文字列を式の型として指定する方法にすぎません。

注記

これは、ルートの開始時に一度だけ設定される固定定数値であるため、ルーティング中に動的な値が必要な場合は、この値は使用しないでください。

66.1. Constant オプション

Constant 言語は、以下に示す 1 つのオプションをサポートしています。

名前デフォルトJava タイプ説明

trim

true

Boolean

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか

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 エンドポイントからのメッセージには、定数値値に設定された theHeader ヘッダーがあります。

Java DSL を使用した同じ例:

from("seda:a")
  .setHeader("theHeader", constant("the value"))
  .to("mock:b");

66.3. 依存関係

Constant 言語は camel-core の一部です。

第67章 CometD コンポーネント

Camel バージョン 2.0 以降で利用可能

cometd: コンポーネントは、cometd/bayeux プロトコルjetty 実装を操作するためのトランスポートです。
このコンポーネントを dojo ツールキットライブラリーと組み合わせて使用すると、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 個のオプションをサポートします。

名前説明デフォルトタイプ

sslKeyPassword (security)

SSL を使用する場合のキーストアのパスワード。

 

String

sslPassword (security)

SSL 使用時のパスワード。

 

String

sslKeystore (security)

キーストアへのパス。

 

String

securityPolicy (security)

カスタム設定の SecurityPolicy を使用して承認を制御するには

 

SecurityPolicy

extensions (common)

着信および発信要求を変更できるカスタム BayeuxServer.Extension のリストを使用するには。

 

List

sslContextParameters (security)

SSLContextParameters を使用してセキュリティーを設定する場合。

 

SSLContextParameters

useGlobalSslContext Parameters (security)

グローバル SSL コンテキストパラメーターの使用を有効にします。

false

boolean

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

CometD エンドポイントは、URI 構文を使用して設定されます。

cometd:host:port/channelName

パスおよびクエリーパラメーターを使用します。

67.3.1. パスパラメーター (3 パラメーター):

名前説明デフォルトタイプ

host

必須 ホスト名

 

String

port

必須 ホストのポート番号

 

int

channelName

必須 channelName は、Camel エンドポイントがサブスクライブできるトピックを表します。

 

String

67.3.2. クエリーパラメーター (16 個のパラメーター):

名前説明デフォルトタイプ

allowedOrigins (common)

crosssOriginFilterOn が true の場合、クロスをサポートするオリジンドメイン

*

String

baseResource (common)

Web リソースまたはクラスパスのルートディレクトリー。コンポーネントがリソースをファイルシステムまたはクラスパスからロードするかどうかに応じて、protocol file: または classpath: を使用します。リソースが jar にパッケージ化されている OSGI デプロイメントには、クラスパスが必要です。

 

String

crossOriginFilterOn (common)

true の場合、サーバーはクロスドメインフィルタリングをサポートします。

false

boolean

filterPath (common)

crosssOriginFilterOn が true の場合、filterPath は CrossOriginFilter によって使用されます。

 

String

interval (common)

クライアント側のポーリングタイムアウト (ミリ秒)。クライアントが再接続の間に待機する時間

 

int

jsonCommented (common)

true の場合、サーバーはコメントでラップされた JSON を受け入れ、コメントでラップされた JSON を生成します。これは、Ajax ハイジャックに対する防御です。

true

boolean

logLevel (common)

ロギングレベル0=none、1=info、2=debug。

1

int

maxInterval (common)

クライアント側の最大ポーリングタイムアウト (ミリ秒)。この時間内に接続が受信されない場合、クライアントは削除されます。

30000

int

multiFrameInterval (common)

同じブラウザーから複数の接続が検出された場合の、クライアント側のポーリングタイムアウト。

1500

int

timeout (common)

サーバー側のポーリングタイムアウト (ミリ秒)。これは、サーバーが応答する前に再接続要求を保持する時間です。

240000

int

bridgeErrorHandler (consumer)

コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

false

boolean

sessionHeadersEnabled (consumer)

着信要求の Camel メッセージを作成するときに、サーバーセッションヘッダーを Camel メッセージに含めるかどうか。

false

boolean

exceptionHandler (consumer)

コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

 

ExceptionHandler

exchangePattern (consumer)

コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。

 

ExchangePattern

disconnectLocalSession (producer)

メッセージをチャネルにパブリッシュした後、ローカルセッションを切断するかどうか。ローカルセッションはデフォルトで CometD によってスイープされないため、ローカルセッションを切断する必要があり、メモリーが不足する可能性があります。

false

boolean

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

67.4. Spring Boot Auto-Configuration

このコンポーネントは、以下に示す 9 のオプションをサポートします。

名前説明デフォルトタイプ

camel.component.cometd.enabled

cometd コンポーネントを有効にする

true

Boolean

camel.component.cometd.extensions

着信および発信要求を変更できるカスタム BayeuxServer.Extension のリストを使用する場合。

 

List

camel.component.cometd.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

camel.component.cometd.security-policy

カスタム設定された SecurityPolicy を使用して承認を制御する場合。オプションは org.cometd.bayeux.server.SecurityPolicy タイプです。

 

String

camel.component.cometd.ssl-context-parameters

SSLContextParameters を使用してセキュリティーを設定する場合。このオプションは org.apache.camel.util.jsse.SSLContextParameters タイプです。

 

String

camel.component.cometd.ssl-key-password

SSL を使用する場合のキーストアのパスワード。

 

String

camel.component.cometd.ssl-keystore

キーストアへのパス。

 

String

camel.component.cometd.ssl-password

SSL 使用時のパスワード。

 

String

camel.component.cometd.use-global-ssl-context-parameters

グローバル SSL コンテキストパラメーターの使用を有効にします。

false

Boolean

URI には、?option=value&option=value&…​ の形式でクエリーオプションを追加できます。

パラメーターを渡す方法の例を次に示します

ファイルの場合 (Web アプリケーションディレクトリーにある webapp リソースの場合 -→ cometd://localhost:8080?resourceBase=file./webapp
クラスパスの場合 (たとえば、Web リソースが webapp フォルダー内にパッケージ化されている場合 -→ cometd://localhost:8080?resourceBase=classpath:webapp

67.5. 認証

Camel 2.8 から利用可能

ここに記載されている ように、カスタム SecurityPolicyExtension’s to the `CometdComponent に設定して、認証を使用できるようにすることができます

67.6. Cometd コンポーネントの SSL の設定

67.6.1. JSSE 設定ユーティリティーの使用

Camel 2.9 の時点で、Cometd コンポーネントは Camel JSSE Configuration Utility を介した 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.7. 関連項目

  • Configuring Camel (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 個のオプションをサポートしています。

名前説明デフォルトタイプ

url (common)

Consul エージェントの URL

 

String

datacenter (common)

データセンター

 

String

sslContextParameters (common)

org.apache.camel.util.jsse.SSLContextParameters インスタンスを使用した SSL 設定。

 

SSLContextParameters

useGlobalSslContext Parameters (security)

グローバル SSL コンテキストパラメーターの使用を有効にします。

false

boolean

aclToken (common)

Consul で使用する ACL トークンを設定します

 

String

userName (common)

Basic 認証に使用するユーザー名を設定します

 

String

password (common)

基本認証に使用するパスワードを設定します

 

String

configuration (advanced)

エンドポイント間で共有される共通設定を設定します

 

ConsulConfiguration

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

Consul エンドポイントは、URI 構文を使用して設定されます。

consul:apiEndpoint

パスおよびクエリーパラメーターを使用します。

68.2.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

apiEndpoint

必須 API エンドポイント

 

String

68.2.2. クエリーパラメーター (4 パラメーター)

名前説明デフォルトタイプ

bridgeErrorHandler (consumer)

コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

false

boolean

exceptionHandler (consumer)

コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

 

ExceptionHandler

exchangePattern (consumer)

コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。

 

ExchangePattern

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

68.3. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 90 個のオプションをサポートします。

名前説明デフォルトタイプ

camel.component.consul.acl-token

Consul で使用する ACL トークンを設定します

 

String

camel.component.consul.cluster.service.acl-token

  

String

camel.component.consul.cluster.service.attributes

カスタムサービス属性。

 

Map

camel.component.consul.cluster.service.block-seconds

  

Integer

camel.component.consul.cluster.service.connect-timeout-millis

  

Long

camel.component.consul.cluster.service.consistency-mode

  

ConsistencyMode

camel.component.consul.cluster.service.datacenter

  

String

camel.component.consul.cluster.service.enabled

Consul クラスターサービスを有効にするかどうかを設定します。デフォルトは false です。

false

Boolean

camel.component.consul.cluster.service.first-index

  

BigInteger

camel.component.consul.cluster.service.id

クラスターサービス ID

 

String

camel.component.consul.cluster.service.near-node

  

String

camel.component.consul.cluster.service.node-meta

  

List

camel.component.consul.cluster.service.order

サービスルックアップの順序/優先度。

 

Integer

camel.component.consul.cluster.service.password

  

String

camel.component.consul.cluster.service.ping-instance

  

Boolean

camel.component.consul.cluster.service.read-timeout-millis

  

Long

camel.component.consul.cluster.service.recursive

  

Boolean

camel.component.consul.cluster.service.root-path

  

String

camel.component.consul.cluster.service.session-lock-delay

  

Integer

camel.component.consul.cluster.service.session-refresh-interval

  

Integer

camel.component.consul.cluster.service.session-ttl

  

Integer

camel.component.consul.cluster.service.ssl-context-parameters

  

SSLContextParameters

camel.component.consul.cluster.service.tags

  

Set

camel.component.consul.cluster.service.url

  

String

camel.component.consul.cluster.service.user-name

  

String

camel.component.consul.cluster.service.write-timeout-millis

  

Long

camel.component.consul.configuration.acl-token

Consul で使用する ACL トークンを設定します

 

String

camel.component.consul.configuration.action

これがデフォルト動作です。CamelConsulAction でオーバーライド可能

 

String

camel.component.consul.configuration.block-seconds

監視イベントを待機する秒数。デフォルトは 10 秒です

 

Integer

camel.component.consul.configuration.connect-timeout-millis

OkHttpClient の接続タイムアウト

 

Long

camel.component.consul.configuration.consistency-mode

クエリーに使用される一貫性モード、デフォルトの ConsistencyMode.DEFAULT

 

ConsistencyMode

camel.component.consul.configuration.consul-client

レジストリー内の com.orbitz.consul.Consul への参照。

 

Consul

camel.component.consul.configuration.datacenter

データセンター

 

String

camel.component.consul.configuration.first-index

監視する最初のインデックス、デフォルトは 0

 

BigInteger

camel.component.consul.configuration.key

デフォルトのキー。Can be overridden by CamelConsulKey

 

String

camel.component.consul.configuration.near-node

クエリーに使用するニアノード。

 

String

camel.component.consul.configuration.node-meta

クエリーに使用するノートメタデータ。

 

List

camel.component.consul.configuration.password

基本認証に使用するパスワードを設定します

 

String

camel.component.consul.configuration.ping-instance

Consul インスタンスを返す前に AgentClient が ping を試行するかどうかを設定します。

 

Boolean

camel.component.consul.configuration.read-timeout-millis

OkHttpClient の読み取りタイムアウト

 

Long

camel.component.consul.configuration.recursive

再帰的に監視、デフォルトは false

 

Boolean

camel.component.consul.configuration.ssl-context-parameters

org.apache.camel.util.jsse.SSLContextParameters インスタンスを使用した SSL 設定。

 

SSLContextParameters

camel.component.consul.configuration.tags

タグを設定します。複数のタグはコンマで区切ることができます。

 

Set

camel.component.consul.configuration.url

Consul エージェントの URL

 

String

camel.component.consul.configuration.user-name

Basic 認証に使用するユーザー名を設定します

 

String

camel.component.consul.configuration.value-as-string

デフォルトでは、KV エンドポイントで Consul から取得した値を文字列に変換します。

 

Boolean

camel.component.consul.configuration.write-timeout-millis

OkHttpClient の書き込みタイムアウト

 

Long

camel.component.consul.datacenter

データセンター

 

String

camel.component.consul.enabled

consul コンポーネントを有効にする

true

Boolean

camel.component.consul.health.check.repository.checks

含めるチェックを定義します。

 

List

camel.component.consul.health.check.repository.configurations

ヘルスチェック設定。

 

Map

camel.component.consul.health.check.repository.enabled

  

Boolean

camel.component.consul.health.check.repository.failure-threshold

  

Integer

camel.component.consul.health.check.repository.interval

  

String

camel.component.consul.password

基本認証に使用するパスワードを設定します

 

String

camel.component.consul.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

camel.component.consul.service-registry.acl-token

  

String

camel.component.consul.service-registry.attributes

カスタムサービス属性。

 

Map

camel.component.consul.service-registry.block-seconds

  

Integer

camel.component.consul.service-registry.check-interval

  

Integer

camel.component.consul.service-registry.check-ttl

  

Integer

camel.component.consul.service-registry.connect-timeout-millis

  

Long

camel.component.consul.service-registry.consistency-mode

  

ConsistencyMode

camel.component.consul.service-registry.datacenter

  

String

camel.component.consul.service-registry.deregister-after

  

Integer

camel.component.consul.service-registry.deregister-services-on-stop

  

Boolean

camel.component.consul.service-registry.enabled

consul サービスレジストリーを有効にするかどうかを設定します。デフォルトは false です。

false

Boolean

camel.component.consul.service-registry.first-index

  

BigInteger

camel.component.consul.service-registry.id

サービスレジストリー ID

 

String

camel.component.consul.service-registry.near-node

  

String

camel.component.consul.service-registry.node-meta

  

List

camel.component.consul.service-registry.order

サービスルックアップの順序/優先度。

 

Integer

camel.component.consul.service-registry.override-service-host

  

Boolean

camel.component.consul.service-registry.password

  

String

camel.component.consul.service-registry.ping-instance

  

Boolean

camel.component.consul.service-registry.read-timeout-millis

  

Long

camel.component.consul.service-registry.recursive

  

Boolean

camel.component.consul.service-registry.service-host

  

String

camel.component.consul.service-registry.ssl-context-parameters

  

SSLContextParameters

camel.component.consul.service-registry.tags

  

Set

camel.component.consul.service-registry.url

  

String

camel.component.consul.service-registry.user-name

  

String

camel.component.consul.service-registry.write-timeout-millis

  

Long

camel.component.consul.ssl-context-parameters

org.apache.camel.util.jsse.SSLContextParameters インスタンスを使用した SSL 設定。このオプションは org.apache.camel.util.jsse.SSLContextParameters タイプです。

 

String

camel.component.consul.url

Consul エージェントの URL

 

String

camel.component.consul.use-global-ssl-context-parameters

グローバル SSL コンテキストパラメーターの使用を有効にします。

false

Boolean

camel.component.consul.user-name

Basic 認証に使用するユーザー名を設定します

 

String

camel.component.consul.cluster.service.dc

  

String

camel.component.consul.configuration.dc

{@link #setDatacenter(String)} ()} に置き換えられた @deprecated データセンター

 

String

camel.component.consul.service-registry.dc

  

String

68.4. ヘッダー

名前タイプ説明

CamelConsulAction

String

プロデューサーのアクション

CamelConsulKey

String

アクションが適用されるキー

CamelConsulEventId

String

イベント ID (コンシューマーのみ)

CamelConsulEventName

String

イベント名 (コンシューマーのみ)

CamelConsulEventLTime

Long

イベント LTime

CamelConsulNodeFilter

String

ノードフィルター

CamelConsulTagFilter

String

タグフィルター

CamelConsulSessionFilter

String

セッションフィルター

CamelConsulVersion

int

データのバージョン

CamelConsulFlags

Long

値に関連付けられたフラグ

CamelConsulCreateIndex

Long

エントリーがいつ作成されたかを表す内部インデックス値

CamelConsulLockIndex

Long

このキーがロックで正常に取得された回数

CamelConsulModifyIndex

Long

このキーを変更した最後のインデックス

CamelConsulOptions

Object

リクエストに関連付けられたオプション

CamelConsulResult

boolean

レスポンスに結果がある場合は true

CamelConsulSession

String

セッション ID

CamelConsulValueAsString

boolean

Consul ie の KV エンドポイントから取得した値を文字列に変換します。

第69章 コントロールバスコンポーネント

Camel バージョン 2.11 以降で利用可能

EIP パターンからの 制御バス により、統合システムをフレームワーク内から監視および管理できます。

image

コントロールバスを使用して、エンタープライズ統合システムを管理します。コントロールバスは、アプリケーションデータで使用されるのと同じメッセージングメカニズムを使用しますが、メッセージフローに含まれるコンポーネントの管理に関連するデータを送信するために別のチャネルを使用します。

Camel では、JMX を使用して、または CamelContext から、または org.apache.camel.api.management パッケージから Java API を使用して、
またはここに例があるイベント通知機能を使用して、管理および監視できます。

Camel 2.11 以降、それに応じて反応するコントロールバスエンドポイントにメッセージを送信できる新しい ControlBus コンポーネント を導入しました。

69.1. ControlBus コンポーネント

Camel 2.11 から利用可能

controlbus: コンポーネントは、Control Bus EIP パターンに基づいて Camel アプリケーションを簡単に管理できるようにします。たとえば、エンドポイントにメッセージを送信することで、ルートのライフサイクルを制御したり、パフォーマンス統計を収集したりできます。

controlbus:command[?options]

command には、使用するコマンドのタイプを識別するための任意の文字列を指定できます。

69.2. コマンド

コマンド説明

route

routeIdaction パラメーターを使用してルートを制御します。

言語

メッセージボディーの評価に使用する 言語 を指定できます。評価の結果があれば、その結果がメッセージ本文に入れられます。

69.3. オプション

コントロールバスコンポーネントにはオプションがありません。

Control Bus エンドポイントは、URI 構文を使用して設定されます。

controlbus:command:language

パスおよびクエリーパラメーターを使用します。

69.3.1. パスパラメーター (2 個のパラメーター):

名前説明デフォルトタイプ

command

必要な コマンドは、ルートまたは言語のいずれかです

 

String

言語

メッセージ本文の評価に使用する言語の名前を指定できます。評価の結果があれば、その結果がメッセージ本文に入れられます。

 

言語

69.3.2. クエリーパラメーター (6 個のパラメーター):

名前説明デフォルトタイプ

action (producer)

開始、停止、またはステータスのいずれかのアクションを示す。ルートを開始または停止するか、ルートのステータスをメッセージ本文の出力として取得します。Camel 2.11.1 以降では、サスペンドとレジュームを使用して、ルートをサスペンドまたはレジュームできます。また、Camel 2.11.1 以降では、stats を使用して、パフォーマンスの統計を XML 形式で取得できます。routeId オプションを使用して、パフォーマンス統計を取得するルートを定義できます。routeId が定義されていない場合は、CamelContext 全体の統計を取得します。再起動アクションはルートを再起動します。

 

String

async (producer)

コントロールバスタスクを非同期で実行するかどうか。重要: このオプションを有効にすると、タスクの結果は Exchange に設定されません。これは、タスクを同期的に実行する場合にのみ可能です。

false

boolean

loggingLevel (producer)

タスクが完了したとき、またはタスクの処理中に例外が発生した場合にログに使用されるログレベル。

INFO

LoggingLevel

restartDelay (producer)

ルートを再起動するときに使用するミリ単位の遅延。

1000

int

routeId (producer)

ID でルートを指定します。特別なキーワード current は、現在のルートを示します。

 

String

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

URI には、?option=value&option=value&…​ の形式でクエリーオプションを追加できます。

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 という名前のルートの統計を取得するには、次のようにします。

String xml = template.requestBody("controlbus:route?routeId=foo&action=stats", null, String.class);

返される統計は XML 形式です。ManagedRouteMBeandumpRouteStatsAsXml 操作を使用して JMX から取得できるデータと同じです。

CamelContext 全体の統計を取得するには、以下に示すように 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')}");

これは無効な操作であるため、結果は返されません。ただし、ルートステータスが必要な場合は、次のことができます。

String status = template.requestBody("controlbus:language:simple", "${camelContext.getRouteStatus('myRoute')}", String.class);

route コマンドを使用してルートのライフサイクルを制御する方が簡単です。language コマンドを使用すると、Groovy などのより強力な言語スクリプトを実行したり、Simple 言語を拡張したりできます。

たとえば、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 パラメーター):

名前説明デフォルトタイプ

protocol

必須 使用するプロトコル

 

String

hostname

必須 使用するホスト名

 

String

port

使用するポート番号

8091

int

70.2.2. クエリーパラメーター(47 個のパラメーター):

名前説明デフォルトタイプ

bucket (common)

使用するバケット

 

String

key (common)

使用する鍵

 

String

bridgeErrorHandler (consumer)

コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

false

boolean

consumerProcessedStrategy (consumer)

使用するコンシューマー処理済み戦略を定義する

none

String

descending (consumer)

この操作が降順かどうかを定義します

false

boolean

designDocumentName (consumer)

使用する設計ドキュメント名

beer

String

limit (consumer)

使用する出力制限

-1

int

rangeEndKey (consumer)

終了キーの範囲を定義する

 

String

rangeStartKey (consumer)

開始キーの範囲を定義する

 

String

sendEmptyMessageWhenIdle (consumer)

ポーリングコンシューマーがファイルをポーリングしなかった場合、このオプションを有効にして、代わりに空のメッセージ (ボディーなし) を送信できます。

false

boolean

skip (consumer)

使用するスキップを定義する

-1

int

viewName (consumer)

使用するビュー名

brewery_beers

String

exceptionHandler (consumer)

コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

 

ExceptionHandler

exchangePattern (consumer)

コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。

 

ExchangePattern

pollStrategy (consumer)

プラグ可能な org.apache.camel.PollingConsumerPollingStrategy を使用すると、エクスチェンジが作成され、Camel でルーティングされる前に、通常はポーリング操作中に発生するエラー処理を制御するカスタム実装が提供できます。

 

PollingConsumerPoll Strategy

autoStartIdForInserts (producer)

挿入操作を行っているときに自動開始 ID が必要かどうかを定義します

false

boolean

operation (producer)

やるべき操作

CCB_PUT

String

persistTo (producer)

データを永続化する場所

0

int

producerRetryAttempts (producer)

再試行回数を定義する

2

int

producerRetryPause (producer)

異なる試行間の再試行の一時停止を定義する

5000

int

replicaTo (producer)

データをレプリケートする場所

0

int

startingIdForInsertsFrom (producer)

挿入操作を行っている開始 ID を定義します

 

long

additionalHosts (advanced)

追加のホスト

 

String

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)

タイムアウト例外を出力するためのしきい値を定義します

998

int

backoffErrorThreshold (scheduler)

backoffMultipler が開始する前に発生する必要がある後続のエラーポーリング (エラーによって失敗した) の数。

 

int

backoffIdleThreshold (scheduler)

backoffMultipler が開始する前に発生する必要がある後続のアイドルポーリングの数。

 

int

backoffMultiplier (scheduler)

後続のアイドル状態/エラーが連続して発生した場合に、スケジュールされたポーリングコンシューマーのバックオフを許可します。乗数は、実際に次の試行が行われる前にスキップされるポーリングの数です。このオプションが使用されている場合は、backoffIdleThreshold や backoffErrorThreshold も設定する必要があります。

 

int

delay (scheduler)

次のポーリングまでの時間 (ミリ秒単位)。60s (60 秒)、5m30s (5 分 30 秒)、1h (1 時間) などの単位を使用して時間値を指定することもできます。

500

long

greedy (scheduler)

greedy が有効で、以前の実行が 1 つ以上のメッセージをポーリングした場合、ScheduledPollConsumer は即座に再度実行されます。

false

boolean

initialDelay (scheduler)

最初のポーリングが開始されるまでの時間 (ミリ秒単位)。60s (60 秒)、5m30s (5 分 30 秒)、1h (1 時間) などの単位を使用して時間値を指定することもできます。

1000

long

runLoggingLevel (scheduler)

コンシューマーはポーリング時に開始/完了のログ行を記録します。このオプションを使用すると、ログレベルを設定できます。

TRACE

LoggingLevel

scheduledExecutorService (scheduler)

コンシューマーに使用するカスタム/共有スレッドプールを設定できます。デフォルトでは、各コンシューマーに独自の単一スレッドのスレッドプールがあります。

 

ScheduledExecutor Service

scheduler (scheduler)

camel-spring または camel-quartz2 コンポーネントから cron スケジューラーを使用します。

none

ScheduledPollConsumer Scheduler

schedulerProperties (scheduler)

カスタムスケジューラーまたは Quartz2 や Spring ベースのスケジューラーを使用する場合に、追加のプロパティーを設定します。

 

Map

startScheduler (scheduler)

スケジューラーを自動起動するかどうか。

true

boolean

timeUnit (scheduler)

initialDelay および delay オプションの時間単位。

MILLISECONDS

TimeUnit

useFixedDelay (scheduler)

固定遅延または固定レートを使用するかどうかを制御します。詳細は、JDK の ScheduledExecutorService を参照してください。

true

boolean

password (security)

使用するパスワード

 

String

username (security)

使用するユーザー名

 

String

70.3. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 2 つのオプションをサポートします。

名前説明デフォルトタイプ

camel.component.couchbase.enabled

couchbase コンポーネントを有効にする

true

Boolean

camel.component.couchbase.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

第71章 CouchDB Component

Camel バージョン 2.11 以降で利用可能

couchdb: コンポーネントを使用すると、CouchDB インスタンスをメッセージのプロデューサーまたはコンシューマーとして扱うことができます。軽量の LightCouch API を使用して、この camel コンポーネントには次の機能があります。

  • コンシューマーとして、挿入、更新、および削除のために couch 変更セットを監視し、これらをメッセージとして camel ルートに公開します。
  • プロデューサとして、保存、更新、Camel 2.18 からの削除 (DELETE 値で CouchDbMethod を使用)、および Camel 2.22 からの ID によるドキュメントの取得 (GET 値で 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]

ホスト名 は、実行中の couchdb インスタンスのホスト名です。ポートはオプションで、指定しない場合はデフォルトで 5984 になります。

71.2. オプション

CouchDB コンポーネントにはオプションがありません。

CouchDB エンドポイントは、URI 構文を使用して設定されます。

couchdb:protocol:hostname:port/database

パスおよびクエリーパラメーターを使用します。

71.2.1. パスパラメーター (4 パラメーター)

名前説明デフォルトタイプ

protocol

必須 データベースとの通信に使用するプロトコル。

 

String

hostname

必須 実行中の couchdb インスタンスのホスト名

 

String

port

実行中の couchdb インスタンスのポート番号

5984

int

database

必須 使用するデータベースの名前

 

String

71.2.2. クエリーパラメーター (12 パラメーター)

名前説明デフォルトタイプ

createDatabase (common)

データベースがまだ存在しない場合は作成します

false

boolean

bridgeErrorHandler (consumer)

コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

false

boolean

deletes (consumer)

ドキュメントの削除はイベントとして公開されます

true

boolean

heartbeat (consumer)

空のメッセージを送信してソケットを維持する頻度 (ミリ秒)

30000

long

since (consumer)

指定された更新シーケンスの直後に変更の追跡を開始します。デフォルトの null は、最新のシーケンスからモニタリングを開始します。

 

String

style (consumer)

changes 配列で返されるリビジョンの数を指定します。デフォルトの main_only は、現在の優勝リビジョンのみを返します。all_docs は、すべてのリーフリビジョンを返します (競合および削除された以前の競合を含む)。

main_only

String

updates (consumer)

ドキュメントの挿入/更新はイベントとして公開されます

true

boolean

exceptionHandler (consumer)

コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

 

ExceptionHandler

exchangePattern (consumer)

コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。

 

ExchangePattern

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

password (security)

認証済みデータベースのパスワード

 

String

username (security)

認証済みデータベースの場合のユーザー名

 

String

71.3. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 2 つのオプションをサポートします。

名前説明デフォルトタイプ

camel.component.couchdb.enabled

couchdb コンポーネントを有効にする

true

Boolean

camel.component.couchdb.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

71.4. ヘッダー

次のヘッダーは、メッセージの転送中にエクスチェンジに設定されます。

プロパティー

CouchDbDatabase

メッセージの送信元データベース

CouchDbSeq

update/delete メッセージの couchdb 変更セットのシーケンス番号

CouchDbId

couchdb のドキュメント ID

CouchDbRev

couchdb のドキュメントのリビジョン

CouchDbMethod

メソッド (削除/更新)

メッセージが受信されると、ヘッダーはコンシューマーによって設定されます。プロデューサーは、挿入/更新が行われると、ダウンストリームプロセッサーのヘッダーも設定します。プロデューサーの前に設定されたヘッダーはすべて無視されます。つまり、たとえば、CouchDbId をヘッダーとして設定すると、挿入の ID として使用されず、ドキュメントの ID が引き続き使用されます。

71.5. メッセージボディー

コンポーネントは、メッセージボディーを挿入するドキュメントとして使用します。ボディーが String のインスタンスである場合、挿入前に GSON オブジェクトにマーシャリングされます。これは、文字列が有効な JSON である必要があり、そうでない場合、挿入/更新が失敗することを意味します。ボディーが com.google.gson.JsonElement のインスタンスである場合は、そのまま挿入されます。そうしないと、プロデューサーはサポートされていないボディータイプの例外を出力します。

71.6. サンプル

たとえば、ポート 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 Component

Camel バージョン 2.15 以降で利用可能

Apache Cassandra は、コモディティハードウェアで大量のデータを処理するように設計されたオープンソースの NoSQL データベースです。Amazon の DynamoDB と同様に、Cassandra にはピアツーピアおよびマスターレスアーキテクチャーがあり、単一障害点を回避し、高可用性を保証します。Google の BigTable と同様に、Cassandra データは、Thrift RPC API または CQL と呼ばれる SQL に似た API を介してアクセスできる列ファミリーを使用して構造化されています。

このコンポーネントは、(Thrift API ではなく) CQL3 API を使用して Cassandra 2.0+ を統合することを目的としています。DataStax が提供する Cassandra Java Driver をベースにしています。

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 接続を開始するか、既存のものを使用できます。

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 オプション、プーリングオプション、負荷分散ポリシー、再試行ポリシー、再接続ポリシーなど) を微調整するには、独自のクラスターインスタンスを作成し、それを Camel エンドポイントに渡します。

72.2. Cassandra オプション

Cassandra CQL コンポーネントにはオプションがありません。

Cassandra CQL エンドポイントは、URI 構文を使用して設定されます。

cql:beanRef:hosts:port/keyspace

パスおよびクエリーパラメーターを使用します。

72.2.1. パスパラメーター (4 パラメーター)

名前説明デフォルトタイプ

beanRef

beanRef は bean:id を使用して定義されます。

 

String

hosts

ホスト名 cassansdra サーバー。複数のホストはコンマで区切ることができます。

 

String

port

cassansdra サーバーのポート番号

 

Integer

keyspace

使用するキースペース

 

String

72.2.2. クエリーパラメーター (29 個のパラメーター):

名前説明デフォルトタイプ

cluster (common)

Cluster インスタンスを使用するには (通常、このオプションは使用しません)

 

クラスター

clusterName (common)

Cluster name

 

String

consistencyLevel (common)

使用する一貫性レベル

 

ConsistencyLevel

cql (common)

実行する CQL クエリー。キー CamelCqlQuery を持つメッセージヘッダーでオーバーライドできます。

 

String

loadBalancingPolicy (common)

特定の LoadBalancingPolicy を使用するには。

 

String

password (common)

セッション認証のパスワード。

 

String

prepareStatements (Common)

PreparedStatements を使用するか、通常のステートメントを使用するか。

true

boolean

resultSetConversionStrategy (Common)

ResultSet をメッセージ本文 ALL、ONE、LIMIT_10、LIMIT_100… に変換するためのロジックを実装するカスタムクラスを使用するには

 

String

session (Common)

Session インスタンスを使用するには (通常、このオプションは使用しません)。

 

Session

username (common)

セッション認証のユーザー名。

 

String

bridgeErrorHandler (consumer)

コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

false

boolean

sendEmptyMessageWhenIdle (consumer)

ポーリングコンシューマーがファイルをポーリングしなかった場合、このオプションを有効にして、代わりに空のメッセージ (ボディーなし) を送信できます。

false

boolean

exceptionHandler (consumer)

コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

 

ExceptionHandler

exchangePattern (consumer)

コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。

 

ExchangePattern

pollStrategy (consumer)

プラグ可能な org.apache.camel.PollingConsumerPollingStrategy を使用すると、エクスチェンジが作成され、Camel でルーティングされる前に、通常はポーリング操作中に発生するエラー処理を制御するカスタム実装が提供できます。

 

PollingConsumerPoll Strategy

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

backoffErrorThreshold (scheduler)

backoffMultipler が開始する前に発生する必要がある後続のエラーポーリング (エラーによって失敗した) の数。

 

int

backoffIdleThreshold (scheduler)

backoffMultipler が開始する前に発生する必要がある後続のアイドルポーリングの数。

 

int

backoffMultiplier (scheduler)

後続のアイドル状態/エラーが連続して発生した場合に、スケジュールされたポーリングコンシューマーのバックオフを許可します。乗数は、実際に次の試行が行われる前にスキップされるポーリングの数です。このオプションが使用されている場合は、backoffIdleThreshold や backoffErrorThreshold も設定する必要があります。

 

int

delay (scheduler)

次のポーリングまでの時間 (ミリ秒単位)。60s (60 秒)、5m30s (5 分 30 秒)、1h (1 時間) などの単位を使用して時間値を指定することもできます。

500

long

greedy (scheduler)

greedy が有効で、以前の実行が 1 つ以上のメッセージをポーリングした場合、ScheduledPollConsumer は即座に再度実行されます。

false

boolean

initialDelay (scheduler)

最初のポーリングが開始されるまでの時間 (ミリ秒単位)。60s (60 秒)、5m30s (5 分 30 秒)、1h (1 時間) などの単位を使用して時間値を指定することもできます。

1000

long

runLoggingLevel (scheduler)

コンシューマーはポーリング時に開始/完了のログ行を記録します。このオプションを使用すると、ログレベルを設定できます。

TRACE

LoggingLevel

scheduledExecutorService (scheduler)

コンシューマーに使用するカスタム/共有スレッドプールを設定できます。デフォルトでは、各コンシューマーに独自の単一スレッドのスレッドプールがあります。

 

ScheduledExecutor Service

scheduler (scheduler)

camel-spring または camel-quartz2 コンポーネントから cron スケジューラーを使用します。

none

ScheduledPollConsumer Scheduler

schedulerProperties (scheduler)

カスタムスケジューラーまたは Quartz2 や Spring ベースのスケジューラーを使用する場合に、追加のプロパティーを設定します。

 

Map

startScheduler (scheduler)

スケジューラーを自動起動するかどうか。

true

boolean

timeUnit (scheduler)

initialDelay および delay オプションの時間単位。

MILLISECONDS

TimeUnit

useFixedDelay (scheduler)

固定遅延または固定レートを使用するかどうかを制御します。詳細は、JDK の ScheduledExecutorService を参照してください。

true

boolean

72.3. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 2 つのオプションをサポートします。

名前説明デフォルトタイプ

camel.component.cql.enabled

cql コンポーネントを有効にする

true

Boolean

camel.component.cql.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

72.4. メッセージ

72.4.1. 着信メッセージ

Camel Cassandra エンドポイントは、クエリーパラメーターとして CQL ステートメントにバインドされる一連の単純なオブジェクト (Object または Object[] または Collection<Object>) を想定しています。メッセージボディーが null または空の場合、CQL クエリーはパラメーターをバインドせずに実行されます。

ヘッダー:

  • CamelCqlQuery (オプション、String または RegularStatement): プレーンな String として、または QueryBuilder を使用して構築された CQL クエリー。

72.4.2. 送信メッセージ

Camel Cassandra エンドポイントは、resultSetConversionStrategy に応じて、1 つまたは複数の Cassandra Row オブジェクトを生成します。

 

  • List<Row> (resultSetConversionStrategyALL または LIMIT_0-9+ の場合)
  • resultSetConversionStrategyONE の場合h Single` Row`
  • その他 (resultSetConversionStrategyResultSetConversionStrategy のカスタム実装である場合)

72.5. リポジトリー

Cassandra を使用して、べき等および集約 EIP のメッセージキーまたはメッセージを格納できます。

Cassandra は、まだユースケースをキューに入れるための最適なツールではない可能性があります。Cassandra anti-patterns queues and queue like datasets を参照してください。これらのテーブルに LeveledCompaction と小さな GC 猶予設定を使用して、廃棄された行をすばやく削除できるようにすることをお勧めします。

72.6. 冪等リポジトリー

NamedCassandraIdempotentRepository は、メッセージキーを次のように 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 列がなく、別のデータモデルを使用するように拡張できます。

オプションデフォルト説明

table

CAMEL_IDEMPOTENT

テーブル名

pkColumns

NAME,` KEY`

主キー列

name

 

リポジトリー名、NAME 列に使用される値

ttl

 

重要な生存期間

writeConsistencyLevel

 

キーの挿入/削除に使用される一貫性レベル: ANYONETWOQUORUMLOCAL_QUORUM

readConsistencyLevel

 

キーの読み取り/チェックに使用される一貫性レベル: ONETWOQUORUMLOCAL_QUORUM

72.7. 集計リポジトリー

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 列がなく、別のデータモデルを使用するように拡張できます。

オプションデフォルト説明

table

CAMEL_AGGREGATION

テーブル名

pkColumns

NAME,KEY

主キー列

exchangeIdColumn

EXCHANGE_ID

交換 ID 列

exchangeColumn

EXCHANGE

交換内容欄

name

 

リポジトリー名、NAME 列に使用される値

ttl

 

生存時間の交換

writeConsistencyLevel

 

交換の挿入/削除に使用される一貫性レベル: ANYONETWOQUORUMLOCAL_QUORUM

readConsistencyLevel

 

交換の読み取り/チェックに使用される整合性レベル: ONETWOQUORUMLOCAL_QUORUM

72.8. 例

テーブルに何かを挿入するには、次のコードを使用できます。

String CQL = "insert into camel_user(login, first_name, last_name) values (?, ?, ?)";
from("direct:input")
    .to("cql://localhost/camel_ks?cql=" + CQL);

この時点で、リストを本文として使用してデータを挿入できるはずです

Arrays.asList("davsclaus", "Claus", "Ibsen")

テーブルの更新またはクエリーにも同じアプローチを使用できます。

第73章 Crypto (JCE) コンポーネント

Camel バージョン 2.3 以降で利用可能

Camel 暗号化エンドポイントと Java の暗号化拡張機能を使用すると、エクスチェンジ用のデジタル署名を簡単に作成できます。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. はじめに

デジタル署名は、非対称暗号技術を使用してメッセージに署名します。(非常に) 高いレベルから、アルゴリズムは、1 つのキーで暗号化されたデータは、もう一方のキーでのみ復号化できるという特別なプロパティーを持つ補完的なキーのペアを使用します。一方の秘密鍵は厳重に保護され、メッセージの署名に使用され、もう一方の公開鍵は、署名されたメッセージの検証に関心のあるすべての人に共有されます。メッセージは、秘密鍵を使用してメッセージのダイジェストを暗号化することによって署名されます。この暗号化されたダイジェストは、メッセージとともに送信されます。一方、検証者はメッセージダイジェストを再計算し、公開鍵を使用して署名内のダイジェストを復号化します。両方のダイジェストが一致する場合、検証者は、秘密鍵の所有者だけが署名を作成した可能性があることを認識します。

Camel は、Java 暗号化拡張機能の署名サービスを使用して、エクスチェンジ署名の作成に必要なすべての重い暗号処理を行います。以下は、暗号化、メッセージダイジェスト、およびデジタル署名の仕組みと、それらを JCE で活用する方法を説明する優れたリソースです。

  • Bruce Schneier の応用暗号
  • David Hook による Java による暗号化の開始
  • 洞察に満ちたウィキペディア Digital_signatures

73.2. URI 形式

前述のように、Camel は署名を作成および検証するための暗号化エンドポイントのペアを提供します

crypto:sign:name[?options]
crypto:verify:name[?options]
  • crypto:sign は 署名を作成し、定数 org.apache.camel.component.crypto.DigitalSignatureConstants.SIGNATURE によってキー付けされたヘッダーに格納します。つまり、"CamelDigitalSignature".
  • crypto:verify は、このヘッダーの内容を読み取り、検証計算を行います。

署名と検証のプロセスが正しく機能するためには、共有するキーのペアが必要です。署名には PrivateKey が必要で、PublicKey (またはそれを含む Certificate) が検証されます。JCE を使用すると、これらのキーペアを生成するのは非常に簡単ですが、通常は KeyStore を使用してキーを格納および共有するのが最も安全です。DSL は、キーの提供方法について非常に柔軟であり、多くのメカニズムを提供します。

通常、crypto:sign エンドポイントは 1 つのルートで定義され、補完的な crypto:verify は別のルートで定義されることに注意してください。署名と検証の両方を同じように設定する必要があることは言うまでもありません。

73.3. オプション

Crypto (JCE) コンポーネントは、次に示す 2 個のオプションをサポートしています。

名前説明デフォルトタイプ

configuration (advanced)

共有 DigitalSignatureConfiguration を設定として使用するには

 

デジタル署名の設定

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

Crypto (JCE) エンドポイントは、URI 構文を使用して設定されます。

crypto:cryptoOperation:name

パスおよびクエリーパラメーターを使用します。

73.3.1. パスパラメーター (2 個のパラメーター):

名前説明デフォルトタイプ

cryptoOperation

必須 エンドポイント URI の暗号スキームの後に指定された暗号操作を設定します。たとえば、crypto:sign 操作として署名を設定します。

 

CryptoOperation

name

必須 この操作の論理名。

 

String

73.3.2. クエリーパラメーター (19 パラメーター)

名前説明デフォルトタイプ

algorithm (producer)

署名者に使用するアルゴリズムの JCE 名を設定します。

SHA1WithDSA

String

alias (producer)

エクスチェンジの署名と検証に使用される鍵とリンク java.security.cert.Certificate 証明書を KeyStore に照会するために使用される別名を設定します。この値は、実行時にメッセージヘッダー org.apache.camel.component.crypto.DigitalSignatureConstants#KEYSTORE_ALIAS を介して提供できます。

 

String

certificateName (producer)

レジストリーで使用できる PrivateKey の参照名を設定します。

 

String

keystore (producer)

エクスチェンジの署名と検証に使用するキーと証明書を格納できる KeyStore を設定します。KeyStore は通常、Route 定義で提供されるか、メッセージヘッダーの CamelSignatureKeyStoreAlias を介して動的に指定されるエイリアスと共に使用されます。エイリアスが指定されておらず、キーストアに 1 つのエントリーしかない場合は、この 1 つのエントリーが使用されます。

 

KeyStore

keystoreName (producer)

レジストリーで使用できるキーストアの参照名を設定します。

 

String

privateKey (producer)

エクスチェンジの署名に使用する PrivateKey を設定します

 

PrivateKey

privateKeyName (producer)

レジストリーで使用できる PrivateKey の参照名を設定します。

 

String

provider (producer)

設定された署名アルゴリズムを提供するセキュリティープロバイダーの ID を設定します。

 

String

publicKeyName (producer)

コンテキストが変更されたときに解決する必要がある参照

 

String

secureRandomName (producer)

レジストリーで使用できる SecureRandom の参照名を設定します。

 

String

signatureHeaderName (producer)

base64 でエンコードされた署名を格納するために使用する必要があるメッセージヘッダーの名前を設定します。これはデフォルトで CamelDigitalSignature に設定されています

 

String

bufferSize (advanced)

Exchange ペイロードデータの読み込みに使用されるバッファーのサイズを設定します。

2048

Integer

certificate (advanced)

ペイロードに基づいてエクスチェンジで署名を検証するために使用する証明書を設定します。

 

証明書

clearHeaders (advanced)

署名と検証後に署名固有のヘッダーをクリアするかどうかを決定します。デフォルトは true ですが、設定を解除するとキーやパスワードなどの重要な個人情報が漏洩する可能性があるため、極度の危険がある場合にのみ設定する必要があります。

true

boolean

keyStoreParameters (advanced)

指定された KeyStoreParameters に基づいて、エクスチェンジの署名と検証に使用するキーと証明書を格納できる KeyStore を設定します。KeyStore は通常、Route 定義で提供されるか、メッセージヘッダーの CamelSignatureKeyStoreAlias を介して動的に指定されるエイリアスと共に使用されます。エイリアスが指定されておらず、キーストアに 1 つのエントリーしかない場合は、この 1 つのエントリーが使用されます。

 

KeyStoreParameters

publicKey (advanced)

エクスチェンジで署名を検証するために使用する PublicKey を設定します。

 

PublicKey

secureRandom (advanced)

Signature サービスの初期化に使用する SecureRandom を設定します

 

SecureRandom

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

password (security)

KeyStore でエイリアス化された PrivateKey にアクセスするために使用するパスワードを設定します。

 

String

73.4. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 33 のオプションをサポートします。

名前説明デフォルトタイプ

camel.component.crypto.configuration.algorithm

署名者に使用するアルゴリズムの JCE 名を設定します。

SHA1WithDSA

String

camel.component.crypto.configuration.alias

エクスチェンジの署名と検証に使用される鍵とリンク java.security.cert.Certificate 証明書を KeyStore に照会するために使用される別名を設定します。この値は、実行時にメッセージヘッダー org.apache.camel.component.crypto.DigitalSignatureConstants #KEYSTORE_ALIAS を介して提供できます。

 

String

camel.component.crypto.configuration.buffer-size

Exchange ペイロードデータの読み込みに使用されるバッファーのサイズを設定します。

2048

Integer

camel.component.crypto.configuration.certificate

ペイロードに基づいてエクスチェンジで署名を検証するために使用する証明書を設定します。

 

証明書

camel.component.crypto.configuration.certificate-name

レジストリーで使用できる PrivateKey の参照名を設定します。

 

String

camel.component.crypto.configuration.clear-headers

署名と検証後に署名固有のヘッダーをクリアするかどうかを決定します。デフォルトは true ですが、設定を解除するとキーやパスワードなどの重要な個人情報が漏洩する可能性があるため、極度の危険がある場合にのみ設定する必要があります。

true

Boolean

camel.component.crypto.configuration.crypto-operation

エンドポイント URI の暗号スキームの後に指定されたものから暗号操作を設定します。たとえば、crypto:sign は操作として署名を設定します。

 

CryptoOperation

camel.component.crypto.configuration.key-store-parameters

指定された KeyStoreParameters に基づいて、エクスチェンジの署名と検証に使用するキーと証明書を格納できる KeyStore を設定します。KeyStore は通常、Route 定義で提供されるか、メッセージヘッダーの CamelSignatureKeyStoreAlias を介して動的に指定されるエイリアスと共に使用されます。エイリアスが指定されておらず、キーストアに 1 つのエントリーしかない場合は、この 1 つのエントリーが使用されます。

 

KeyStoreParameters

camel.component.crypto.configuration.keystore

エクスチェンジの署名と検証に使用するキーと証明書を格納できる KeyStore を設定します。KeyStore は通常、Route 定義で提供されるか、メッセージヘッダーの CamelSignatureKeyStoreAlias を介して動的に指定されるエイリアスと共に使用されます。エイリアスが指定されておらず、キーストアに 1 つのエントリーしかない場合は、この 1 つのエントリーが使用されます。

 

KeyStore

camel.component.crypto.configuration.keystore-name

レジストリーで使用できるキーストアの参照名を設定します。

 

String

camel.component.crypto.configuration.name

この操作の論理名。

 

String

camel.component.crypto.configuration.password

KeyStore でエイリアス化された PrivateKey にアクセスするために使用するパスワードを設定します。

 

Character[]

camel.component.crypto.configuration.private-key

エクスチェンジの署名に使用する PrivateKey を設定します

 

PrivateKey

camel.component.crypto.configuration.private-key-name

レジストリーで使用できる PrivateKey の参照名を設定します。

 

String

camel.component.crypto.configuration.provider

設定された署名アルゴリズムを提供するセキュリティープロバイダーの ID を設定します。

 

String

camel.component.crypto.configuration.public-key

エクスチェンジで署名を検証するために使用する PublicKey を設定します。

 

PublicKey

camel.component.crypto.configuration.public-key-name

コンテキストが変更されたときに解決する必要がある参照

 

String

camel.component.crypto.configuration.secure-random

Signature サービスの初期化に使用する SecureRandom を設定します

 

SecureRandom

camel.component.crypto.configuration.secure-random-name

レジストリーで使用できる SecureRandom の参照名を設定します。

 

String

camel.component.crypto.configuration.signature-header-name

base64 でエンコードされた署名を格納するために使用する必要があるメッセージヘッダーの名前を設定します。これはデフォルトで CamelDigitalSignature に設定されています

 

String

camel.component.crypto.enabled

暗号コンポーネントを有効にする

true

Boolean

camel.component.crypto.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

camel.dataformat.crypto.algorithm

使用される暗号アルゴリズムを示す JCE アルゴリズム名。デフォルトでは DES/CBC/PKCS5Padding です。

DES/CBC/PKCS5Padding

String

camel.dataformat.crypto.algorithm-parameter-ref

Cipher の初期化に使用される JCE AlgorithmParameterSpec。指定された名前を java.security.spec.AlgorithmParameterSpec タイプとして使用してタイプを検索します。

 

String

camel.dataformat.crypto.buffersize

署名プロセスで使用されるバッファーのサイズ。

 

Integer

camel.dataformat.crypto.content-type-header

データフォーマットがデータ形式を実行できる場合は、データフォーマットの型で Content-Type ヘッダーを設定するかどうか。たとえば、XML にマーシャリングするデータ形式の場合は application/xml、JSON にマーシャリングするデータ形式の場合は JSon です。

false

Boolean

camel.dataformat.crypto.crypto-provider

使用する JCE セキュリティープロバイダーの名前。

 

String

camel.dataformat.crypto.enabled

暗号データ形式を有効にする

true

Boolean

camel.dataformat.crypto.init-vector-ref

Cipher の初期化に使用される初期化ベクトルを含むバイト配列を参照します。

 

String

camel.dataformat.crypto.inline

設定された IV を暗号化されたデータストリームにインライン化する必要があることを示すフラグ。デフォルトでは false です。

false

Boolean

camel.dataformat.crypto.key-ref

使用するレジスタから参照する秘密鍵を参照します。

 

String

camel.dataformat.crypto.mac-algorithm

メッセージ認証アルゴリズムを示す JCE アルゴリズム名。

HmacSHA1

String

camel.dataformat.crypto.should-append-h-m-a-c

メッセージ認証コードを計算して暗号化されたデータに追加する必要があることを示すフラグ。

false

Boolean

73.5. 使用

73.5.1. Raw keys

エクスチェンジに署名して検証する最も基本的な方法は、次のように KeyPair を使用することです。

キーへの参照を使用して、Spring XML 拡張機能 で同じことを実現できます。

73.5.2. キーストアとエイリアス。

JCE は、秘密鍵と証明書のペアを格納し、それらを暗号化し、パスワードで保護するための非常に用途の広いキーストアの概念を提供します。これらは、取得 API にエイリアスを適用することで取得できます。鍵と証明書を鍵ストアに入れる方法はいくつかありますが、ほとんどの場合、これは外部の keytool アプリケーションで行われます。これは、keytool を使用して、自己署名証明書と秘密鍵で KeyStore を作成する良い例です。

この例では、bob によってエイリアス化されたキーと証明書を持つキーストアを使用しています。キーストアとキーのパスワードは letmein です

以下は、Fluent ビルダーを介してキーストアを使用する方法を示しています。また、キーストアをロードして初期化する方法も示しています。

再び Spring では、ref を使用して実際のキーストアインスタンスを検索します。

73.5.3. JCE プロバイダーとアルゴリズムの変更

署名アルゴリズムまたはセキュリティープロバイダーの変更は、それらの名前を指定するだけの簡単な作業です。選択したアルゴリズムと互換性のあるキーも使用する必要があります。

または

73.5.4. 署名メッセージヘッダーの変更

署名を格納するために使用されるメッセージヘッダーを変更することが望ましい場合があります。次のように、ルート定義で別のヘッダー名を指定できます。

または

73.5.5. バッファーサイズの変更

バッファーのサイズを更新する必要がある場合…

または

73.5.6. キーを動的に提供します。

受信者リストまたは同様の 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.6. 関連項目

  • Configuring Camel (Camel の設定)
  • コンポーネント
  • エンドポイント
  • スタートガイド

第74章 暗号 CMS コンポーネント

Camel バージョン 2.20 以降で利用可能

Cryptographic Message Syntax (CMS) は、メッセージの署名と暗号化の確立された標準です。Apache Crypto CMS コンポーネントは、この標準の次の部分をサポートしています。CMS エンベロープデータインスタンスの作成、CMS エンベロープデータインスタンスの復号化、CMS 署名データインスタンスの作成、および CMS 署名データインスタンスの検証を行うことができます。

コンポーネントは、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 個のオプションをサポートしています。

名前説明デフォルトタイプ

signedDataVerifier Configuration (advanced)

検証操作の uri パラメーターを決定する、共有の SignedDataVerifierConfiguration を設定します。

 

SignedDataVerifier Configuration

envelopedDataDecryptor Configuration (advanced)

暗号化解除操作の uri パラメーターを決定する共有 EnvelopedDataDecryptorConfiguration を設定する場合。

 

EnvelopedDataDecryptor Configuration

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

Crypto CMS エンドポイントは、URI 構文を使用して設定されます。

crypto-cms:cryptoOperation:name

パスおよびクエリーパラメーターを使用します。

74.1.1. パスパラメーター (2 個のパラメーター):

名前説明デフォルトタイプ

cryptoOperation

必須 エンドポイント URI の暗号スキームの後に指定された暗号操作を設定します。たとえば、crypto-cms:sign 操作として署名を設定します。可能な値: 署名、検証、暗号化、または復号化。

 

CryptoOperation

name

必須 URI の名前部分をユーザーが選択して、camel コンテキスト内の異なる署名者/検証者/暗号化者/復号化者エンドポイントを区別できます。

 

String

74.1.2. クエリーパラメーター(15 個のパラメーター):

名前説明デフォルトタイプ

keyStore (common)

操作に応じて、署名者の秘密鍵、検証者の公開鍵、暗号化者の公開鍵、復号化者の秘密鍵を含むキーストア。このパラメーターまたはパラメーター keyStoreParameters のいずれかを使用します。

 

KeyStore

keyStoreParameters (common)

操作に応じて、署名者の秘密鍵、検証者の公開鍵、暗号化者の公開鍵、復号化者の秘密鍵を含むキーストア。このパラメーターまたはパラメーター keystore のいずれかを使用します。

 

KeyStoreParameters

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

password (decrypt)

秘密鍵のパスワードを設定します。キーストア内のすべての秘密鍵のパスワードは同じであると想定されています。設定されていない場合、秘密鍵のパスワードは、KeyStoreParameters で指定されたキーストアパスワードによって指定されると想定されます。

 

Char[]

fromBase64 (decrypt_verify)

true の場合、CMS メッセージは Base 64 でエンコードされており、処理中にデコードする必要があります。デフォルト値は false です。

false

Boolean

contentEncryptionAlgorithm (encrypt)

DESede/CBC/PKCS5Padding などの暗号化アルゴリズム。さらに可能な値: DESede/CBC/PKCS5Padding、AES/CBC/PKCS5Padding、Camellia/CBC/PKCS5Padding、CAST5/CBC/PKCS5Padding。

 

String

originatorInformation Provider (encrypt)

発信者情報のプロバイダー。https://tools.ietf.org/html/rfc5652#section-6.1 を参照してください。デフォルト値は null です。

 

OriginatorInformation Provider

recipient (encrypt)

受信者情報: インターフェイス org.apache.camel.component.crypto.cms.api.TransRecipientInfo を実装する Bean への参照

 

List

secretKeyLength (encrypt)

コンテンツの暗号化に使用される秘密対称キーのキーの長さ。指定されたコンテンツ暗号化アルゴリズムが異なるサイズのキーを許可する場合にのみ使用されます。contentEncryptionAlgorithm=AES/CBC/PKCS5Padding または Camellia/CBC/PKCS5Padding の場合は 128。contentEncryptionAlgorithm=DESede/CBC/PKCS5Padding の場合、192、128。強力な暗号化が有効になっている場合、AES/CBC/PKCS5Padding と Camellia/CBC/PKCS5Padding では、キーの長さ 192 と 256 も可能です。

 

int

unprotectedAttributes GeneratorProvider (encrypt)

保護されていない属性のジェネレーターのプロバイダー。デフォルト値は null で、保護されていない属性がエンベロープデータオブジェクトに追加されないことを意味します。https://tools.ietf.org/html/rfc5652#section-6.1 を参照してください。

 

AttributesGenerator プロバイダー

toBase64 (encrypt_sign)

Signed Data または Enveloped Data インスタンスが base 64 エンコードされるかどうかを示します。デフォルト値は false です。

false

Boolean

includeContent (sign)

署名されたコンテンツを Signed Data インスタンスに含める必要があるかどうかを示します。false の場合、分離された署名付きデータインスタンスがヘッダー CamelCryptoCmsSignedData に作成されます。

true

Boolean

signer (sign)

署名者情報: org.apache.camel.component.crypto.cms.api.SignerInfo を実装する Bean への参照

 

List

signedDataHeaderBase64 (verify)

ヘッダー CamelCryptoCmsSignedData の値が base64 でエンコードされているかどうかを示します。デフォルト値は false です。デタッチされた署名にのみ関連します。デタッチされた署名の場合、ヘッダーには署名済みデータオブジェクトが含まれます。

false

Boolean

verifySignaturesOfAll Signers (verify)

true の場合、Signed Data オブジェクトに含まれるすべての署名者の署名が検証されます。false の場合、署名者情報が指定された証明書の 1 つと一致する 1 つの署名のみが検証されます。デフォルト値は true です。

true

Boolean

74.2. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 4 つのオプションをサポートします。

名前説明デフォルトタイプ

camel.component.crypto-cms.enabled

crypto-cms コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

Boolean

camel.component.crypto-cms.enveloped-data-decryptor-configuration

暗号化解除操作の uri パラメーターを決定する共有 EnvelopedDataDecryptorConfiguration を設定する場合。オプションは org.apache.camel.component.crypto.cms.crypt です。EnvelopedDataDecryptorConfiguration タイプ。

 

String

camel.component.crypto-cms.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

camel.component.crypto-cms.signed-data-verifier-configuration

検証操作の uri パラメーターを決定する、共有の SignedDataVerifierConfiguration を設定します。オプションは org.apache.camel.component.crypto.cms.sig.SignedDataVerifierConfiguration タイプです。

 

String

74.3. エンベロープデータ

通常、crypto-cms:encypt エンドポイントは 1 つのルートで定義され、補完的な crypto-cms:decrypt は別のルートで定義されることに注意してください。

次の例は、エンベロープデータメッセージを作成する方法と、エンベロープデータメッセージを復号化する方法を示しています。

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 の 2 つの受信者

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 の 2 つの受信者

   <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.4. 署名付きデータ

通常、crypto-cms:sign エンドポイントは 1 つのルートで定義され、補完的な 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 での 2 人の署名者の例

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 での 2 つの署名者の例

   <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章 Crypto (Java 暗号化拡張) DataFormat

Camel バージョン 2.3 以降で利用可能

Crypto Data Format は、Java Cryptographic Extension を Camel に統合し、Camel の使い慣れたマーシャルおよびアンマーシャルフォーマットメカニズムを使用して、メッセージのシンプルかつ柔軟な暗号化と復号化を可能にします。マーシャリングは暗号文への暗号化を意味し、アンマーシャリングは元の平文への復号化を意味すると想定しています。このデータ形式は、対称 (共有キー) 暗号化と復号化のみを実装します。

75.1. CryptoDataFormat オプション

Crypto (Java Cryptographic Extension) データ形式は、以下に示す 10 個のオプションをサポートしています。

名前デフォルトJava タイプ説明

algorithm

DES/CBC/PKCS5Padding

String

使用される暗号アルゴリズムを示す JCE アルゴリズム名。デフォルトでは DES/CBC/PKCS5Padding です。

cryptoProvider

 

String

使用する JCE セキュリティープロバイダーの名前。

keyRef

 

String

使用するレジスタから参照する秘密鍵を参照します。

initVectorRef

 

String

Cipher の初期化に使用される初期化ベクトルを含むバイト配列を参照します。

algorithmParameterRef

 

String

Cipher の初期化に使用される JCE AlgorithmParameterSpec。指定された名前を java.security.spec.AlgorithmParameterSpec タイプとして使用してタイプを検索します。

buffersize

 

Integer

署名プロセスで使用されるバッファーのサイズ。

macAlgorithm

HmacSHA1

String

メッセージ認証アルゴリズムを示す JCE アルゴリズム名。

shouldAppendHMAC

false

Boolean

メッセージ認証コードを計算して暗号化されたデータに追加する必要があることを示すフラグ。

inline

false

Boolean

設定された IV を暗号化されたデータストリームにインライン化する必要があることを示すフラグ。デフォルトでは false です。

contentTypeHeader

false

Boolean

データフォーマットがデータ形式を実行できる場合は、データフォーマットの型で Content-Type ヘッダーを設定するかどうか。たとえば、XML にマーシャリングするデータ形式の場合は application/xml、JSON にマーシャリングするデータ形式の場合は JSon です。

75.2. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 33 のオプションをサポートします。

名前説明デフォルトタイプ

camel.component.crypto.configuration.algorithm

署名者に使用するアルゴリズムの JCE 名を設定します。

SHA1WithDSA

String

camel.component.crypto.configuration.alias

エクスチェンジの署名と検証に使用される鍵とリンク java.security.cert.Certificate 証明書を KeyStore に照会するために使用される別名を設定します。この値は、実行時にメッセージヘッダー org.apache.camel.component.crypto.DigitalSignatureConstants #KEYSTORE_ALIAS を介して提供できます。

 

String

camel.component.crypto.configuration.buffer-size

Exchange ペイロードデータの読み込みに使用されるバッファーのサイズを設定します。

2048

Integer

camel.component.crypto.configuration.certificate

ペイロードに基づいてエクスチェンジで署名を検証するために使用する証明書を設定します。

 

証明書

camel.component.crypto.configuration.certificate-name

レジストリーで使用できる PrivateKey の参照名を設定します。

 

String

camel.component.crypto.configuration.clear-headers

署名と検証後に署名固有のヘッダーをクリアするかどうかを決定します。デフォルトは true ですが、設定を解除するとキーやパスワードなどの重要な個人情報が漏洩する可能性があるため、極度の危険がある場合にのみ設定する必要があります。

true

Boolean

camel.component.crypto.configuration.crypto-operation

エンドポイント URI の暗号スキームの後に指定されたものから暗号操作を設定します。たとえば、crypto:sign は操作として署名を設定します。

 

CryptoOperation

camel.component.crypto.configuration.key-store-parameters

指定された KeyStoreParameters に基づいて、エクスチェンジの署名と検証に使用するキーと証明書を格納できる KeyStore を設定します。KeyStore は通常、Route 定義で提供されるか、メッセージヘッダーの CamelSignatureKeyStoreAlias を介して動的に指定されるエイリアスと共に使用されます。エイリアスが指定されておらず、キーストアに 1 つのエントリーしかない場合は、この 1 つのエントリーが使用されます。

 

KeyStoreParameters

camel.component.crypto.configuration.keystore

エクスチェンジの署名と検証に使用するキーと証明書を格納できる KeyStore を設定します。KeyStore は通常、Route 定義で提供されるか、メッセージヘッダーの CamelSignatureKeyStoreAlias を介して動的に指定されるエイリアスと共に使用されます。エイリアスが指定されておらず、キーストアに 1 つのエントリーしかない場合は、この 1 つのエントリーが使用されます。

 

KeyStore

camel.component.crypto.configuration.keystore-name

レジストリーで使用できるキーストアの参照名を設定します。

 

String

camel.component.crypto.configuration.name

この操作の論理名。

 

String

camel.component.crypto.configuration.password

KeyStore でエイリアス化された PrivateKey にアクセスするために使用するパスワードを設定します。

 

Character[]

camel.component.crypto.configuration.private-key

エクスチェンジの署名に使用する PrivateKey を設定します

 

PrivateKey

camel.component.crypto.configuration.private-key-name

レジストリーで使用できる PrivateKey の参照名を設定します。

 

String

camel.component.crypto.configuration.provider

設定された署名アルゴリズムを提供するセキュリティープロバイダーの ID を設定します。

 

String

camel.component.crypto.configuration.public-key

エクスチェンジで署名を検証するために使用する PublicKey を設定します。

 

PublicKey

camel.component.crypto.configuration.public-key-name

コンテキストが変更されたときに解決する必要がある参照

 

String

camel.component.crypto.configuration.secure-random

Signature サービスの初期化に使用する SecureRandom を設定します

 

SecureRandom

camel.component.crypto.configuration.secure-random-name

レジストリーで使用できる SecureRandom の参照名を設定します。

 

String

camel.component.crypto.configuration.signature-header-name

base64 でエンコードされた署名を格納するために使用する必要があるメッセージヘッダーの名前を設定します。これはデフォルトで CamelDigitalSignature に設定されています

 

String

camel.component.crypto.enabled

暗号コンポーネントを有効にする

true

Boolean

camel.component.crypto.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

camel.dataformat.crypto.algorithm

使用される暗号アルゴリズムを示す JCE アルゴリズム名。デフォルトでは DES/CBC/PKCS5Padding です。

DES/CBC/PKCS5Padding

String

camel.dataformat.crypto.algorithm-parameter-ref

Cipher の初期化に使用される JCE AlgorithmParameterSpec。指定された名前を java.security.spec.AlgorithmParameterSpec タイプとして使用してタイプを検索します。

 

String

camel.dataformat.crypto.buffersize

署名プロセスで使用されるバッファーのサイズ。

 

Integer

camel.dataformat.crypto.content-type-header

データフォーマットがデータ形式を実行できる場合は、データフォーマットの型で Content-Type ヘッダーを設定するかどうか。たとえば、XML にマーシャリングするデータ形式の場合は application/xml、JSON にマーシャリングするデータ形式の場合は JSon です。

false

Boolean

camel.dataformat.crypto.crypto-provider

使用する JCE セキュリティープロバイダーの名前。

 

String

camel.dataformat.crypto.enabled

暗号データ形式を有効にする

true

Boolean

camel.dataformat.crypto.init-vector-ref

Cipher の初期化に使用される初期化ベクトルを含むバイト配列を参照します。

 

String

camel.dataformat.crypto.inline

設定された IV を暗号化されたデータストリームにインライン化する必要があることを示すフラグ。デフォルトでは false です。

false

Boolean

camel.dataformat.crypto.key-ref

使用するレジスタから参照する秘密鍵を参照します。

 

String

camel.dataformat.crypto.mac-algorithm

メッセージ認証アルゴリズムを示す JCE アルゴリズム名。

HmacSHA1

String

camel.dataformat.crypto.should-append-h-m-a-c

メッセージ認証コードを計算して暗号化されたデータに追加する必要があることを示すフラグ。

false

Boolean

ND

75.3. 基本的な使用方法

交換を暗号化/復号化するために必要な最も基本的なものは、共有秘密鍵だけです。Crypto データ形式の 1 つ以上のインスタンスがこのキーで設定されている場合、その形式を使用して、あるルート (またはルートの一部) でペイロードを暗号化し、別のルートで復号化できます。たとえば、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 では、データ形式が最初に設定され、次にルートで使用されます

<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.4. 暗号化アルゴリズムの指定

アルゴリズムを変更するには、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 暗号化アーキテクチャー標準アルゴリズム名のドキュメントから入手できます。

75.5. 初期化ベクトルの指定

一部の暗号化アルゴリズム、特にブロックアルゴリズムでは、初期化ベクトルと呼ばれるデータの初期ブロックを使用して設定する必要があります。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 を使用して、byte[] への参照を提供します

<crypto id="initvector" algorithm="DES/CBC/PKCS5Padding" keyRef="desKey" initVectorRef="initializationVector" />

暗号化フェーズと復号化フェーズの両方で同じベクトルが必要です。IV を秘密にしておく必要がないため、DataFormat を使用すると、IV を暗号化されたデータにインライン化し、その後復号化フェーズで読み取って Cipher を初期化できます。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");

または Spring 付き。

<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" />

初期化ベクトルの使用の詳細については、

75.6. ハッシュメッセージ認証コード (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");

または Spring 付き。

<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");

または Spring 付き。

<crypto id="hmac-algorithm" algorithm="DES" keyRef="desKey" macAlgorithm="HmacMD5" shouldAppendHMAC="true" />

75.7. キーを動的に提供する

受信者リストまたは同様の 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");

または Spring 付き。

<crypto id="nokey" algorithm="DES" />

75.8. 依存関係

camel ルートで Crypto データ形式を使用するには、次の依存関係を 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.9. 関連項目

第76章 CSV データ形式

Camel バージョン 1.3 以降で利用可能

CSV データ形式は、Apache Commons CSV を使用して、Excel によってエクスポート/インポートされたものなどの CSV ペイロード (コンマ区切り値) を処理します。

76.1. オプション

CSV データ形式は、次にリストされている 28 個のオプションをサポートしています。

名前デフォルトJava タイプ説明

formatRef

 

String

使用する参照形式。他の形式オプションで更新されます。デフォルト値は CSVFormat.DEFAULT です。

formatName

 

String

使用するフォーマットの名前。デフォルト値は CSVFormat.DEFAULT です。

commentMarkerDisabled

false

Boolean

参照形式のコメントマーカーを無効にします。

commentMarker

 

String

参照形式のコメントマーカーを設定します。

delimiter

 

String

使用する区切り文字を設定します。デフォルト値は、, (コンマ) です。

escapeDisabled

false

Boolean

エスケープ文字の使用を無効にするために使用します

escape

 

String

使用するエスケープ文字を設定します

headerDisabled

false

Boolean

ヘッダーを無効にするために使用します

header

 

List

CSV ヘッダーを設定するには

allowMissingColumnNames

false

Boolean

欠落している列名を許可するかどうか。

ignoreEmptyLines

false

Boolean

空行を無視するかどうか。

ignoreSurroundingSpaces

false

Boolean

周囲のスペースを無視するかどうか

nullStringDisabled

false

Boolean

null 文字列を無効にするために使用

nullString

 

String

空文字列を設定します

quoteDisabled

false

Boolean

引用符を無効にするために使用

quote

 

String

デフォルトで引用符を設定します

recordSeparatorDisabled

 

String

レコード区切りを無効にするために使用されます

recordSeparator

 

String

デフォルトでは改行文字 (CRLF) であるレコード区切り文字 (別名改行) を設定します

skipHeaderRecord

false

Boolean

出力でヘッダーレコードをスキップするかどうか

quoteMode

 

String

引用モードを設定します

ignoreHeaderCase

false

Boolean

ヘッダー名にアクセスするときに大文字と小文字を区別するかどうかを設定します

trim

false

Boolean

前後の空白を削除するかどうかを設定します

trailingDelimiter

false

Boolean

末尾の区切り文字を追加するかどうかを設定します

lazyLoad

false

Boolean

アンマーシャリングで、その場で行を読み取る反復子を生成するか、またはすべての行を一度に読み取る必要があるか。

useMaps

false

Boolean

アンマーシャリングで、リストではなく行の値のマップ (HashMap) を生成するかどうかヘッダー (定義または収集) が必要です。

useOrderedMaps

false

Boolean

アンマーシャリングで、リストの代わりに行の値の順序付きマップ (LinkedHashMap) を生成するかどうか。ヘッダー (定義または収集) が必要です。

recordConverterRef

 

String

使用するレジストリーから検索するカスタム CsvRecordConverter を参照します

contentTypeHeader

false

Boolean

データフォーマットがデータ形式を実行できる場合は、データフォーマットの型で Content-Type ヘッダーを設定するかどうか。たとえば、XML にマーシャリングするデータ形式の場合は application/xml、JSON にマーシャリングするデータ形式の場合は JSon です。

76.2. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 29 のオプションをサポートします。

名前説明デフォルトタイプ

camel.dataformat.csv.allow-missing-column-names

欠落している列名を許可するかどうか。

false

Boolean

camel.dataformat.csv.comment-marker

参照形式のコメントマーカーを設定します。

 

String

camel.dataformat.csv.comment-marker-disabled

参照形式のコメントマーカーを無効にします。

false

Boolean

camel.dataformat.csv.content-type-header

データフォーマットがデータ形式を実行できる場合は、データフォーマットの型で Content-Type ヘッダーを設定するかどうか。たとえば、XML にマーシャリングするデータ形式の場合は application/xml、JSON にマーシャリングするデータ形式の場合は JSon です。

false

Boolean

camel.dataformat.csv.delimiter

使用する区切り文字を設定します。デフォルト値は、, (コンマ) です。

 

String

camel.dataformat.csv.enabled

csv データ形式を有効にする

true

Boolean

camel.dataformat.csv.escape

使用するエスケープ文字を設定します

 

String

camel.dataformat.csv.escape-disabled

エスケープ文字の使用を無効にするために使用します

false

Boolean

camel.dataformat.csv.format-name

使用するフォーマットの名前。デフォルト値は CSVFormat.DEFAULT です。

 

String

camel.dataformat.csv.format-ref

使用する参照形式。他の形式オプションで更新されます。デフォルト値は CSVFormat.DEFAULT です。

 

String

camel.dataformat.csv.header

CSV ヘッダーを設定するには

 

List

camel.dataformat.csv.header-disabled

ヘッダーを無効にするために使用します

false

Boolean

camel.dataformat.csv.ignore-empty-lines

空行を無視するかどうか。

false

Boolean

camel.dataformat.csv.ignore-header-case

ヘッダー名にアクセスするときに大文字と小文字を区別するかどうかを設定します

false

Boolean

camel.dataformat.csv.ignore-surrounding-spaces

周囲のスペースを無視するかどうか

false

Boolean

camel.dataformat.csv.lazy-load

アンマーシャリングで、その場で行を読み取る反復子を生成するか、またはすべての行を一度に読み取る必要があるか。

false

Boolean

camel.dataformat.csv.null-string

空文字列を設定します

 

String

camel.dataformat.csv.null-string-disabled

null 文字列を無効にするために使用

false

Boolean

camel.dataformat.csv.quote

デフォルトで引用符を設定します

 

String

camel.dataformat.csv.quote-disabled

引用符を無効にするために使用

false

Boolean

camel.dataformat.csv.quote-mode

引用モードを設定します

 

String

camel.dataformat.csv.record-converter-ref

使用するレジストリーから検索するカスタム CsvRecordConverter を参照します

 

String

camel.dataformat.csv.record-separator

デフォルトでは改行文字 (CRLF) であるレコード区切り文字 (別名改行) を設定します

 

String

camel.dataformat.csv.record-separator-disabled

レコード区切りを無効にするために使用されます

 

String

camel.dataformat.csv.skip-header-record

出力でヘッダーレコードをスキップするかどうか

false

Boolean

camel.dataformat.csv.trailing-delimiter

末尾の区切り文字を追加するかどうかを設定します

false

Boolean

camel.dataformat.csv.trim

前後の空白を削除するかどうかを設定します

false

Boolean

camel.dataformat.csv.use-maps

アンマーシャリングで、リストではなく行の値のマップ (HashMap) を生成するかどうかヘッダー (定義または収集) が必要です。

false

Boolean

camel.dataformat.csv.use-ordered-maps

アンマーシャリングで、リストの代わりに行の値の順序付きマップ (LinkedHashMap) を生成するかどうか。ヘッダー (定義または収集) が必要です。

false

Boolean

ND

76.3. 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.4. CSV メッセージを Java リストにアンマーシャリングする

アンマーシャリングは、CSV メッセージを CSV ファイル行 (すべてのフィールド値を持つ別のリストを含む) を持つ Java リストに変換します。

例: 人の名前、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>> が含まれます。

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.5. List<Map> を CSV にマーシャリングする

Camel 2.1 以降で利用可能

複数行のデータを CSV 形式にマーシャリングする必要がある場合は、メッセージペイロードを List<Map<String, Object>> オブジェクトとして保存できるようになりました。このオブジェクトには、各行のマップがリストに含まれています。

76.6. CSV のファイルポーラー、アンマーシャリング

受信データを処理できる Bean が指定された場合…

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.7. パイプを区切り文字としてマーシャリングする

次のボディーを考慮します。

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 # DSL 内で autogenColumns、configRef、strategyRef 属性を使用します

Camel 2.9.2 / 2.10 以降で利用可能で、Camel 2.15 で削除される

CSV データ形式をカスタマイズして、独自の CSVConfigCSVStrategy を利用できます。また、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.8. アンマーシャリング中に 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.9. パイプを区切り文字としてアンマーシャリングする

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.10. 依存関係

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

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 オプションを参照)、Stream caching についてもお読みください。

Camel on EAP デプロイメント

このコンポーネントは、Red Hat JBoss Enterprise Application Platform (JBoss EAP) コンテナー上で簡素化されたデプロイメントモデルを提供する Camel on EAP (Wildfly Camel) フレームワークによってサポートされます。

CXF コンポーネントは、Apache CXF も使用する JBoss EAP Web サービス サブシステムと統合します。詳細については、JAX-WS を参照してください。

注記

現在、Camel on EAP サブシステムは CXF または Restlet コンシューマーをサポートしてい ません。ただし、CamelProxy を使用して、CXF コンシューマーの動作を模倣することは可能です。

URI 形式

cxf:bean:cxfEndpoint[?options]

cxfEndpoint は、Spring Bean レジストリー内の Bean を参照する Bean ID を表します。この URI 形式では、ほとんどのエンドポイントの詳細が Bean 定義で指定されます。

cxf://someAddress[?options]

someAddress は、CXF エンドポイントのアドレスを指定します。この URI 形式では、ほとんどのエンドポイントの詳細がオプションを使用して指定されます。

上記のどちらのスタイルでも、次のように URI にオプションを追加できます。

cxf:bean:cxfEndpoint?wsdlURL=wsdl/hello_world.wsdl&dataFormat=PAYLOAD

オプション

名前

必須

説明

wsdlURL

いいえ

WSDL のロケーション。デフォルトでは、WSDL はエンドポイントアドレスから取得されます。以下に例を示します。

file://local/wsdl/hello.wsdl or wsdl/hello.wsdl

serviceClass

SEI (Service Endpoint Interface) クラスの名前。このクラスには、JSR181 アノテーションを含めることができますが、必須ではありません。  2.0 以降、 このオプションは POJO モードでのみ必要です。wsdlURL オプションが指定されている場合、PAYLOAD および MESSAGE モードでは serviceClass は必要ありません。wsdlURL オプションが serviceClass なしで使用される場合、serviceName および portName (Spring 設定のエンドポイント名) オプションを指定する 必要があり ます。

2.0 以降、\# 表記を使用して、レジストリーから serviceClass オブジェクトインスタンスを参照できます。

非 Spring AOP プロキシーの Object.getClass().getName() メソッドに依存しているため、参照されるオブジェクトをプロキシーにすることはできません (Spring AOP プロキシーは問題ありません)

2.8 以降、 PAYLOAD および MESSAGE モードの wsdlURL および serviceClass オプションの両方を省略できます。それらを省略すると、任意の XML 要素を PAYLOAD モードで CxfPayload の本体に配置して、CXF ディスパッチモードを容易にすることができます。

例: org.apache.camel.Hello

serviceName

WSDL に複数の serviceName が 存在する場合のみ

このサービスが実装しているサービス名で、wsdl:service@name にマップされます。以下に例を示します。

{http://org.apache.camel}ServiceName

endpointName

serviceName の下に複数の portName が存在し、camel 2.2 以降の camel-cxf コンシューマーに必要な場合のみ

このサービスが実装しているポート名で、wsdl:port@name にマップされます。以下に例を示します。

{http://org.apache.camel}PortName

dataFormat

いいえ

CXF エンドポイントがサポートするメッセージデータ形式。可能な値は、POJO (デフォルト)PAYLOADMESSAGE です。

relayHeaders

いいえ

このオプションについては、relayHeadersオプションの説明 セクションを参照してください。CXF エンドポイントがルートに沿ってヘッダーをリレーする必要があります。現在、dataFormat=POJO の場合にのみ使用可能 デフォルト: true: truefalse

wrapped

いいえ

CXF エンドポイントプロデューサーが呼び出す操作の種類。設定可能な値は次のとおりです: truefalse (デフォルト)

wrappedStyle

いいえ

2.5.0 以降 パラメーターが SOAP ボディーでどのように表現されるかを記述する WSDL スタイル。値が false の場合、CXF は document-literal のラップされていないスタイルを選択します。値が true の場合、CXF は document-literal のラップされたスタイルを選択します

setDefaultBus

いいえ

非推奨: このエンドポイントにデフォルトの CXF バスを使用するかどうかを指定します。設定可能な値は次のとおりです: truefalse (デフォルト)。このオプションは非推奨であり、Camel 2.16 以降では defaultBus を使用する必要があります。

defaultBus

いいえ

非推奨: このエンドポイントにデフォルトの CXF バスを使用するかどうかを指定します。設定可能な値は次のとおりです: truefalse (デフォルト)。このオプションは非推奨であり、Camel 2.16 以降では defaultBus を使用する必要があります。

bus

いいえ

レジストリーからバスオブジェクトを参照するには、\# 表記を使用します (例: bus=\#busName)。参照されるオブジェクトは org.apache.cxf.Bus のインスタンスでなければなりません。

デフォルトでは、CXF Bus Factory によって作成されたデフォルトバスを使用します。

cxfBinding

いいえ

\# 表記を使用して、レジストリーから CXF バインディングオブジェクトを参照します (例: cxfBinding=\#bindingName)。参照されるオブジェクトは org.apache.camel.component.cxf.CxfBinding のインスタンスでなければなりません。

headerFilterStrategy

いいえ

\# 表記を使用して、レジストリーから header filter strategy オブジェクトを参照します (例: headerFilterStrategy=\#strategyName)。参照されるオブジェクトは org.apache.camel.spi.HeaderFilterStrategy のインスタンスでなければなりません。

loggingFeatureEnabled

いいえ

2.3 の新機能であるこのオプションは、インバウンドおよびアウトバウンドの SOAP メッセージをログに書き込む CXF ログ機能を有効にします。設定可能な値は次のとおりです: truefalse (デフォルト)

defaultOperationName

いいえ

2.4 の新機能であるこのオプションは、リモートサービスを呼び出す CxfProducer によって使用されるデフォルトの operationName を設定します。以下に例を示します。

defaultOperationName=greetMe

defaultOperationNamespace

いいえ

2.4 の新機能であるこのオプションは、リモートサービスを呼び出す CxfProducer によって使用されるデフォルトの operationNamespace を設定します。以下に例を示します。

defaultOperationNamespace=http://apache.org/hello_world_soap_http

同期

いいえ

2.5 の新機能であるこのオプションにより、CXF エンドポイントは同期または非同期 API を使用して基礎となる作業を行うことを決定できます。デフォルト値は false です。これは、camel-cxf エンドポイントがデフォルトで非同期 API を使用しようとすることを意味します。

publishedEndpointUrl

いいえ

2.5 の新機能であるこのオプションは、サービスアドレス URL と ?wsdl を使用してアクセスされる公開された WSDL に表示されるエンドポイント URL をオーバーライドします。以下に例を示します。

publshedEndpointUrl=http://example.com/service

properties.propName

いいえ

Camel 2.8: エンドポイント URI でカスタム CXF プロパティーを設定できます。たとえば、MTOM を有効にするには、properties.mtom-enabled=true を設定します。呼び出しの開始時に CXF がスレッドを切り替えないようにするには、properties.org.apache.cxf.interceptor.OneWayProcessorInterceptor.USE_ORIGINAL_THREAD=true を設定します。

allowStreaming

いいえ

2.8.2 の新機能。このオプションは、CXF コンポーネントが PAYLOAD モードで実行されている場合に (以下を参照してください)、着信メッセージを DOM 解析して DOM 要素にするか、場合によってはストリーミングを許可する javax.xml.transform.Source オブジェクトとしてペイロードを保持するかを制御します。

skipFaultLogging

いいえ

2.11 の新機能。このオプションは、PhaseInterceptorChain がキャッチした Fault のログ記録をスキップするかどうかを制御します。

cxfEndpointConfigurer

いいえ

Camel 2.11 の新機能。このオプションは、プログラムによる方法での CXF エンドポイントの設定をサポートする org.apache.camel.component.cxf.CxfEndpointConfigurer whichの実装を適用できます。Camel 2.15.0 以降、ユーザーは CxfEndpointConfigurer の configure{Server/Client} メソッドを実装することで、CXF サーバーとクライアントを設定できます。

username

いいえ

Camel 2.12.3 の新機能。このオプションは、CXF クライアントのユーザー名の基本認証情報を設定するために使用されます。

password

いいえ

Camel 2.12.3 の新機能。このオプションは、CXF クライアントのパスワードの基本認証情報を設定するために使用されます。

continuationTimeout

いいえ

Camel 2.14.0 の新機能。このオプションは、CXF サーバーが Jetty またはサーブレットトランスポートを使用している場合にデフォルトで CxfConsumer で使用できる CXF 継続タイムアウトを設定するために使用されます。(Camel 2.14.0 より前では、CxfConsumer は継続タイムアウトを 0 に設定するだけでした。これは、継続中断操作がタイムアウトしないことを意味します。)

デフォルト:30000 :continuation=80000

serviceNameportNameQNames であるため、これらを指定する場合は、上記の例に示すように {namespace} を前に付けてください。

データ形式の説明

DataFormat

説明

POJO

POJO (plain old Java objects) は、ターゲットサーバーで呼び出されるメソッドへの Java パラメーターです。プロトコル JAX-WS ハンドラーと論理 JAX-WS ハンドラーの両方がサポートされています。

PAYLOAD

PAYLOAD は、CXF エンドポイントのメッセージ設定が適用された後のメッセージペイロード (soap:body の内容) です。Protocol JAX-WS ハンドラーのみがサポートされています。論理 JAX-WS ハンドラーはサポートされていません。

MESSAGE

MESSAGE は、トランスポート層から受信した raw メッセージです。Stream に触れたり変更したりすることは想定されていません。この種の DataFormat を使用している場合、CXF インターセプターの一部が削除されるため、camel-cxf コンシューマーと JAX-WS ハンドラーがサポートされていない後の SOAP ヘッダーは表示されません。

CXF_MESSAGE

Camel 2.8.2 の新機能。CXF_MESSAGE を使用すると、トランスポート層からのメッセージを生の SOAP メッセージに変換することで、CXF インターセプターの全機能を呼び出すことができます。

交換プロパティー CamelCXFDataFormat を取得することで、交換のデータ形式モードを判別できます。エクスチェンジキー定数は org.apache.camel.component.cxf.CxfConstants.DATA_FORMAT_PROPERTY で定義されています。

Apache Aries ブループリントを使用した 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>

現在、エンドポイント要素は、サポートされている最初の CXF 名前空間ハンドラーです。

Spring と同じように Bean 参照を使用することもできます

<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>

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>

RelayHeaders オプションの説明

JAXWS WSDL ファーストの開発者の観点から見ると、帯域内 ヘッダーと 帯域外 ヘッダーがあります。

インバンド ヘッダーは、SOAP ヘッダーなどのエンドポイントの WSDL バインディングコントラクトの一部として明示的に定義されるヘッダーです。

アウトオブバンド ヘッダーは、ネットワーク経由でシリアル化されるヘッダーですが、明示的に WSDL バインディングコントラクトの一部ではありません。

ヘッダーの中継/フィルタリングは双方向です。

ルートに CXF エンドポイントがあり、開発者が SOAP ヘッダーなどのオンザワイヤヘッダーをルートに沿ってリレーして、たとえば別の JAXWS エンドポイントで消費する必要がある場合、relayHeaderstrue に設定する必要があります。デフォルト値。

POJO モードでのみ使用可能

relayHeaders=true 設定は、ヘッダーをリレーする意図を表します。特定のヘッダーが中継されるかどうかの実際の決定は、MessageHeadersRelay インターフェイスを実装するプラグ可能なインスタンスに委譲されます。MessageHeadersRelay の具体的な実装を調べて、ヘッダーを中継する必要があるかどうかを判断します。既知の SOAP 名前空間にバインドする SoapMessageHeadersRelay の実装がすでにあります。現在、帯域外ヘッダーのみがフィルタリングされ、relayHeaders=true の場合、帯域内ヘッダーは常に中継されます。ネームスペースがランタイムに不明なヘッダーがワイヤ上にある場合、フォールバック DefaultMessageHeadersRelay が使用されます。これにより、すべてのヘッダーの中継が単純に許可されます。

RelayHeaders=false 設定は、帯域内および帯域外のすべてのヘッダーがドロップされることを表明します。

独自の MessageHeadersRelay 実装をプラグインして、リレーのリストをオーバーライドまたは追加することができます。プリロードされたリレーインスタンスをオーバーライドするには、MessageHeadersRelay 実装がオーバーライドしようとしている名前空間と同じ名前空間を提供していることを確認してください。また、オーバーライドするリレーは、オーバーライドしようとしているすべての名前空間にサービスを提供する必要があることに注意してください。そうしないと、インスタンスマッピングをリレーする名前空間にあいまいさが生じるため、ルートの起動時に実行時例外が出力されます。

<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"/>

ここでヘッダーをリレー/ドロップする方法を示すテストを見てください。

link: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 ]

リリース 2.0 以降の変更点

  • POJO および PAYLOAD モードがサポートされています。POJO モードでは、CXF によってインバンドヘッダーが処理され、ヘッダーリストから削除されているため、フィルタリングに使用できるのはアウトオブバンドメッセージヘッダーのみです。インバンドヘッダーは、POJO モードで MessageContentList に組み込まれます。camel-cxf コンポーネントは、MessageContentList からインバンドヘッダーを削除しようとします。インバンドヘッダーのフィルタリングが必要な場合は、PAYLOAD モードを使用するか、(非常に簡単な) CXF インターセプター/JAXWS ハンドラーを CXF エンドポイントにプラグインしてください。
  • メッセージヘッダーリレーメカニズムは 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 で設定できる新しいプロパティーがあります。

名前

説明

type

必須 ?

デフォルト値

relayHeaders

すべてのメッセージヘッダーは、メッセージヘッダーフィルターによって処理されます。

boolean

いいえ

true (1.6.1 動作)

relayAllMessageHeaders

すべてのメッセージヘッダーが伝達されます (メッセージヘッダーフィルターによる処理なし)。

boolean

いいえ

false (1.6.1 の動作)

allowFilterNamespaceClash

アクティベーション名前空間で 2 つのフィルターが重複する場合、プロパティーはその処理方法を制御します。値が true の場合、最後のものが優先されます。値が false の場合、例外が出力されます

boolean

いいえ

false (1.6.1 の動作)

Spring で CXF エンドポイントを設定する

以下に示す Spring 設定ファイルを使用して CXF エンドポイントを設定できます。また、エンドポイントを camelContext タグに埋め込むこともできます。サービスエンドポイントを呼び出すときに、operationName ヘッダーと operationNamespace ヘッダーを設定して、呼び出す操作を明示的に指定できます。

注記 Camel 2.x では、CXF エンドポイントのターゲット名前空間として http://camel.apache.org/schema/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 に変更されました。

ルート Bean 要素で指定された JAX-WS schemaLocation 属性を必ず含めてください。これにより、CXF はファイルを検証できるようになります。これは必須です。<cxf:cxfEndpoint/> タグの末尾にある名前空間の宣言にも注意してください。これは、結合された {namespace} localName 構文が現在、このタグの属性値に対してサポートされていないため必要です。

cxf:cxfEndpoint 要素は、多くの追加属性をサポートしています。

名前

PortName

このサービスが実装しているエンドポイント名で、wsdl:port@name にマップされます。ns:PORT_NAME の形式で、ns はこのスコープで有効な名前空間接頭辞です。

serviceName

このサービスが実装しているサービス名で、wsdl:service@name にマップされます。ns:SERVICE_NAME の形式で、ns はこのスコープで有効な名前空間接頭辞です。

wsdlURL

WSDL のロケーション。クラスパス、ファイルシステム、またはリモートでホストできます。

bindingId

使用するサービスモデルの bindingId

address

サービス公開アドレス。

bus

JAX-WS エンドポイントで使用されるバス名。

serviceClass

JSR181 アノテーションを持つかどうかにかかわらず、SEI (Service Endpoint Interface) クラスのクラス名。

また、多くの子要素もサポートしています。

名前

cxf:inInterceptors

このエンドポイントの着信インターセプター。<bean> または <ref> のリスト。

cxf:inFaultInterceptors

このエンドポイントの着信障害インターセプター。<bean> または <ref> のリスト。

cxf:outInterceptors

このエンドポイントの発信インターセプター。<bean> または <ref> のリスト。

cxf:outFaultInterceptors

このエンドポイントの送信障害インターセプター。<bean> または <ref> のリスト。

cxf:properties

JAX-WS エンドポイントに提供する必要があるプロパティーマップ。以下を参照してください。

cxf:handlers

JAX-WS エンドポイントに提供する必要がある JAX-WS ハンドラーリスト。以下を参照してください。

cxf:dataBinding

エンドポイントで使用する DataBinding を指定できます。これは、Spring <bean class="MyDataBinding"/> 構文を使用して提供できます。

cxf:binding

このエンドポイントが使用する BindingFactory を指定できます。これは、Spring <bean class="MyBindingFactory"/> 構文を使用して提供できます。

cxf:features

このエンドポイントのインターセプターを保持する機能。<bean> または <ref> のリスト

cxf:schemaLocations

エンドポイントが使用するスキーマのロケーション。<schemaLocation> のリスト

cxf:serviceFactory

このエンドポイントが使用するサービスファクトリー。これは、Spring <bean class="MyServiceFactory"/> 構文を使用して提供できます

インターセプター、プロパティー、およびハンドラーを提供する方法を示すより高度な例をここで見つけることができます: http://cwiki.apache.org/CXF20DOC/jax-ws-configuration.html

注記

次のように、CXF:properties を使用して、Spring 設定ファイルから CXF エンドポイントの dataFormat および setDefaultBus プロパティーを設定できます。

<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>

camel-cxf コンポーネントで java.util.logging の代わりに log4j を使用する方法

CXF のデフォルトのロガーは java.util.logging です。log4j に変更する場合は、次の手順を実行します。クラスパスに META-INF/cxf/org.apache.cxf.logger という名前のファイルを作成します。このファイルには、クラスの完全修飾名 org.apache.cxf.common.logging.Log4jLogger がコメントなしで 1 行に含まれている必要があります。

xml で camel-cxf レスポンスメッセージを開始ドキュメントにする方法

PHP などの SOAP クライアントを使用している場合、CXF は XML 開始ドキュメント <?xml version="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 エンドポイントに設定できます。

<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);

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});
    }

}

POJO データ形式で camel-cxf エンドポイントのメッセージを準備する方法

camel-cxf エンドポイントプロデューサーは、cxf client API に基づいています。まず、メッセージヘッダーでオペレーション名を指定し、次にメソッドパラメーターをリストに追加し、このパラメーターリストでメッセージを初期化する必要があります。レスポンスメッセージボディーは messageContentsList であり、そのリストから結果を取得できます。

メッセージヘッダーで操作名を指定しない場合、CxfProducerCxfEndpointdefaultOperationName を使用しようとします。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));

PAYLOAD データ形式の camel-cxf エンドポイントのメッセージを処理する方法

Apache Camel 2.0 の場合: CxfMessage.getBody() は、org.apache.camel.component.cxf.CxfPayload オブジェクトを返します。このオブジェクトには、SOAP メッセージヘッダーと Body 要素の getter があります。この変更により、ネイティブ 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);
                }
            });
        }
    };
}

POJO モードで SOAP ヘッダーを取得および設定する方法

POJO は、camel-cxf エンドポイントが Camel エクスチェンジを生成または消費するときのデータ形式が Java オブジェクトのリスト であることを意味します。Apache Camel はこのモードでメッセージボディーを POJO として公開しますが、CXF コンポーネントは引き続き SOAP ヘッダーの読み取りと書き込みへのアクセスを提供します。ただし、CXF インターセプターはインバンド SOAP ヘッダーを処理後にヘッダーリストから削除するため、POJO モードではアウトオブバンド SOAP ヘッダーのみを使用できます。

次の例は、SOAP ヘッダーを取得/設定する方法を示しています。ある CXF エンドポイントから別のエンドポイントに転送するルートがあるとします。つまり、SOAP クライアント → Apache Camel → CXF サービスです。2 つのプロセッサーを接続して、(1) 要求が CXF サービスに送信される前と (2) 応答が SOAP クライアントに返される前に、SOAP ヘッダーを取得/挿入できます。この例のプロセッサー (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 メッセージヘッダー名は、CXF (org.apache.cxf.headers.Header.HEADER_LIST) で定義されている定数である org.apache.cxf.headers.Header.list です。ヘッダー値は、CXF SoapHeader オブジェクト (org.apache.cxf.binding.soap.SoapHeader) の List<> です。次のスニペットは、InsertResponseOutHeaderProcessor (応答メッセージに新しい SOAP ヘッダーを挿入する) です。InsertResponseOutHeaderProcessorInsertRequestOutHeaderProcessor の両方で SOAP ヘッダーにアクセスする方法は、実際には同じです。2 つのプロセッサーの唯一の違いは、挿入される 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);

    }

}

PAYLOAD モードで SOAP ヘッダーを取得および設定する方法

PAYLOAD モードで SOAP メッセージ (CxfPayload オブジェクト) にアクセスする方法はすでに示しました (「PAYLOAD データ形式の camel-cxf エンドポイントのメッセージを処理する方法」)。

CxfPayload オブジェクトを取得したら、DOM 要素 (SOAP ヘッダー) の List を返す CxfPayload.getHeaders() メソッドを呼び出すことができます。

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 以降では、「POJO モードで SOAP ヘッダーを取得および設定する方法」 で説明したのと同じ方法でSOAPヘッダを設定または取得することが可能です。org.apache.cxf.headers.Header.list ヘッダーを使用して、SOAP ヘッダーのリストを取得および設定できるようになりました。これは、ある Camel CXF エンドポイントから別のエンドポイント (SOAP クライアント → Camel → CXF サービス) に転送するルートがある場合、SOAP クライアントによって送信された SOAP ヘッダーも CXF サービスに転送されるようになったことを意味します。ヘッダーを転送したくない場合は、org.apache.cxf.headers.Header.list Camel ヘッダーからヘッダーを削除します。

SOAP ヘッダーは MESSAGE モードでは使用できません

SOAP 処理がスキップされるため、SOAP ヘッダーは MESSAGE モードでは使用できません。

Apache Camel から SOAP 障害を出力する方法

CXF エンドポイントを使用して SOAP リクエストを使用している場合は、camel コンテキストから SOAP Fault を出力する必要がある場合があります。基本的に、これを行うには throwFault DSL を使用できます。POJOPAYLOAD、および MESSAGE データ形式で機能します。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 障害メッセージを設定し、メッセージヘッダーにレスポンスコードを設定できます。

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 本文に SOAP 障害を設定し、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);

CXF エンドポイントのリクエストとレスポンスのコンテキストを伝播する方法

cxf client API は、要求と応答のコンテキストで操作を呼び出す方法を提供します。CXF エンドポイントプロデューサーを使用して外部 Web サービスを呼び出す場合は、次のコードを使用して、リクエストコンテキストを設定し、レスポンスコンテキストを取得できます。

        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());

アタッチメントサポート

POJO モード: SOAP with Attachment と MTOM の両方がサポートされています (MTOM を有効にするためのペイロードモードの例を参照してください)。 ただし、SOAP with Attachment はテストされていません。 添付は POJO にマーシャリングおよびアンマーシャリングされるため、通常、ユーザーは添付自体を処理する必要はありません。 2.1 以降、添付は Camel メッセージの添付に伝播されます。 そのため、Camel Message API で添付を取得することができます。

DataHandler Message.getAttachment(String id)

をクリックします。

ペイロードモード: MTOM は 2.1 以降でサポートされています。添付は、上記の Camel Message API によって取得できます。アタッチメント付きの SOAP は、このモードでは SOAP 処理がないため、サポートされていません。

MTOM を有効にするには、CXF エンドポイントプロパティー mtom_enabled を true に設定します。(Spring でしかできません。)

<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>

ペイロードモードで 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());

ペイロードモードで 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 から String へのコンバーターは、本文で完全なマルチパートペイロードを提供することに注意してください。String として SOAP XML だけが必要な場合は、message.getSOAPPart() でメッセージボディーを設定でき、Camel convert が残りの作業を実行できます。

スタックトレース情報を伝播させる方法

Java の例外がサーバー側で発生したときに、例外のスタックトレースがフォールトメッセージにマーシャリングされてクライアントに返されるように、CXF エンドポイントを設定することができます。この機能を有効にするには、以下のように cxfEndpoint 要素で、dataFormatPAYLOAD に設定し、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>

セキュリティー上の理由から、スタックトレースには原因となる例外 (つまりスタックトレースの Caused by 以降の部分) は含まれません。スタックトレースに原因となる例外を含めたい場合は、以下のように cxfEndpoint 要素の exceptionMessageCauseEnabled プロパティーを 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>
警告

exceptionMessageCauseEnabled フラグは、テストおよび診断目的でのみ有効にしてください。サーバーにおいて例外の元の原因を隠すことで、敵対的なユーザーがサーバーを調査しにくくするのが、通常の実践的なやり方です。

PAYLOAD モードでのストリーミングのサポート

2.8.2 では、camel-cxf コンポーネントは、PAYLOAD モードの使用時に受信メッセージのストリーミングをサポートするようになりました。以前は、着信メッセージは完全に DOM 解析されていました。大きなメッセージの場合、これには時間がかかり、大量のメモリーが使用されます。2.8.2 以降、着信メッセージは、ルーティング中に javax.xml.transform.Source のままにすることができ、何もペイロードを変更しない場合は、ターゲットの宛先に直接ストリーミングできます。一般的な単純なプロキシーの使用例 (例: from ("cxf:…").to ("cxf:…")) では、これによりパフォーマンスが大幅に向上するだけでなく、メモリー要件が大幅に削減されます。

ただし、ストリーミングが適切でない、または望ましくない場合があります。ストリーミングの性質上、無効な着信 XML は、処理チェーンの後半までキャッチされない場合があります。また、特定のアクションでは、とにかくメッセージを DOM 解析する必要がある場合があります (WS-Security やメッセージトレースなど)。この場合、ストリーミングの利点は制限されます。この時点で、ストリーミングを制御する方法は 2 つあります。

  • エンドポイントプロパティー: "allowStreaming=false" をエンドポイントプロパティーとして追加して、ストリーミングのオン/オフを切り替えることができます。
  • Component プロパティー: CxfComponent オブジェクトには、そのコンポーネントから作成されたエンドポイントのデフォルトを設定できる allowStreaming プロパティーもあります。
  • グローバルシステムプロパティー: org.apache.camel.component.cxf.streaming のシステムプロパティーを false に追加してオフにすることができます。これによりグローバルなデフォルトが設定されますが、上記のエンドポイントプロパティーを設定すると、そのエンドポイントのこの値がオーバーライドされます。

一般的な CXF ディスパッチモードの使用

2.8.0 から、camel-cxf コンポーネントは、任意の構造 (つまり、特定の XML スキーマにバインドされていない) のメッセージを転送できるジェネリック CXF ディスパッチモード をサポートしています。このモードを使用するには、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 ソケットバインディングで指定されたインターフェイス/ポートをリッスンするように設定されています。デフォルトでは、これは http の場合はポート 8080、https の場合は 8443 です。

たとえば、異なるホストまたはポートの組み合わせを使用してエンドポイントコンシューマーを設定すると、サーバーログファイル内に警告が表示されます。たとえば、次のホストとポートの設定は無視されます。

<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/ja-jp/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/ja-jp/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>

<http-authentication-factory> application-http-authentication は、Elytron サブシステム内で定義されています。application-http-authentication は、デフォルトで、standalone.xml および standalone-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>

サーブレット仕様で定義されている <url-pattern> は、Web アプリケーションのコンテキストパスに対して相対的であることに注意してください。アプリケーションが 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 では、ベースパスがホスト Web アプリケーションコンテキストパスの外部にある camel-cxf エンドポイントコンシューマーを作成できるため、これは重要です。たとえば、my-app.war 内に http://my-server/webservices/my-endpoint の camel-cxf コンシューマーを作成することができます。

このようなアウトオブコンテキストエンドポイントのセキュリティー制約を定義するために、WildFly-Camel はカスタム の非標準の<url-pattern> 規則をサポートします。この規則では、パターンの前に 3 つのスラッシュ /// を付けると、サーバーホスト名への絶対パスとして解釈されます。たとえば、http://my-server/webservices/my-endpointmy-app.war 内でセキュリティー保護するには、次の設定を 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 Bean コンポーネント を使用すると、RESTful または SOAP Web サービスとしての処理からメッセージペイロードを受信する方法を考慮することができます。これには、多数のトランスポートを使用して Web サービスを利用できる可能性があります。Bean コンポーネントの設定も単純であり、Camel および CXF を使用して Web サービスを実装する最速の方法を提供します。

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 Bean の名前を表します

上記のどちらのスタイルでも、次のように URI にオプションを追加できます。

cxfrs:bean:cxfEndpoint?resourceClasses=org.apache.camel.rs.Example

78.2. オプション

CXF-RS コンポーネントは、以下に示す 3 個のオプションをサポートしています。

名前説明デフォルトタイプ

useGlobalSslContext Parameters (security)

グローバル SSL コンテキストパラメーターの使用を有効にします。

false

boolean

headerFilterStrategy (filter)

カスタムの org.apache.camel.spi.HeaderFilterStrategy を使用して、Camel メッセージとの間でヘッダーをフィルターします。

 

HeaderFilterStrategy

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

CXF-RS エンドポイントは、URI 構文を使用して設定されます。

cxfrs:beanId:address

パスおよびクエリーパラメーターを使用します。

78.2.1. パスパラメーター (2 個のパラメーター):

名前説明デフォルトタイプ

beanId

既存の設定済み CxfRsEndpoint を検索する場合。bean: を接頭辞として使用する必要があります。

 

String

address

サービス公開アドレス。

 

String

78.2.2. クエリーパラメーター (30 パラメーター)

名前説明デフォルトタイプ

features (common)

機能リストを CxfRs エンドポイントに設定します。

 

List

loggingFeatureEnabled (common)

このオプションは、インバウンドおよびアウトバウンドの REST メッセージをログに書き込む CXF ロギング機能を有効にします。

false

boolean

loggingSizeLimit (common)

ロギング機能が有効になっているときにロガーが出力するバイト数の合計サイズを制限します。

 

int

modelRef (common)

このオプションは、アノテーションのないリソースクラスに役立つモデルファイルを指定するために使用されます。このオプションを使用する場合、サービスクラスを省略して、ドキュメントのみのエンドポイントをエミュレートできます。

 

String

providers (common)

カスタム JAX-RS プロバイダーリストを CxfRs エンドポイントに設定します。コンマで区切られたレジストリーで検索するプロバイダーのリストを含む文字列を指定できます。

 

String

resourceClasses (common)

REST サービスとしてエクスポートするリソースクラス。複数のクラスはコンマで区切ることができます。

 

List

schemaLocations (common)

着信 XML または JAXB 駆動型 JSON の検証に使用できるスキーマのロケーションを設定します。

 

List

skipFaultLogging (common)

このオプションは、PhaseInterceptorChain がキャッチした Fault のログ記録をスキップするかどうかを制御します。

false

boolean

bindingStyle (consumer)

リクエストとレスポンスが Camel との間でどのようにマッピングされるかを設定します。2 つの値が可能です: SimpleConsumer: このバインディングスタイルは、リクエストパラメーター、マルチパートなどを処理し、それらを IN ヘッダー、IN 添付、およびメッセージボディーにマップします。org.apache.cxf.message.MessageContentsList の低レベル処理を排除することを目的としています。また、レスポンスマッピングの柔軟性とシンプルさも向上します。一般コンシューマーのみご利用いただけます。デフォルト: デフォルトのスタイル。コンシューマーの場合、これにより MessageContentsList がルートに渡され、ルートで低レベルの処理が必要になります。これは従来のバインディングスタイルで、CXF スタックから入ってくる org.apache.cxf.message.MessageContentsList を IN メッセージボディーに単純にダンプします。ユーザーは、JAX-RS メソッド署名によって定義されたコントラクトに従ってそれを処理する責任があります。カスタム: バインディングオプションを介してカスタムバインディングを指定できます。

デフォルト

BindingStyle

bridgeErrorHandler (consumer)

コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

false

boolean

publishedEndpointUrl (consumer)

このオプションは、リソースアドレス URL と _wadl でアクセスできる WADL から発行された endpointUrl をオーバーライドできます。

 

String

exceptionHandler (consumer)

コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

 

ExceptionHandler

exchangePattern (consumer)

コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。

 

ExchangePattern

serviceBeans (consumer)

REST サービスとしてエクスポートするサービス Bean。複数の Bean はコンマで区切ることができます。

 

List

cookieHandler (producer)

HTTP セッションを維持するようにクッキーハンドラーを設定します。

 

CookieHandler

hostnameVerifier (producer)

使用するホスト名ベリファイア。# 表記を使用して、レジストリーから HostnameVerifier を参照します。

 

HostnameVerifier

sslContextParameters (producer)

Camel SSL 設定リファレンス。# 表記を使用して、SSL コンテキストを参照します。

 

SSLContextParameters

throwExceptionOnFailure (producer)

このオプションは、CxfRsProducer に戻りコードを検査するように指示し、戻りコードが 207 より大きい場合は例外を生成します。

true

boolean

httpClientAPI (producer)

true の場合、CxfRsProducer は HttpClientAPI を使用してサービスを呼び出します。false の場合、CxfRsProducer は ProxyClientAPI を使用してサービスを呼び出します。

true

boolean

ignoreDeleteMethodMessage Body (producer)

このオプションは、HTTP API の使用時に DELETE メソッドのメッセージ本文を無視するように CxfRsProducer に指示するために使用されます。

false

boolean

maxClientCacheSize (producer)

このオプションを使用すると、キャッシュの最大サイズを設定できます。実装は、CXF クライアントまたは ClientFactoryBean を CxfProvider および CxfRsProvider にキャッシュします。

10

int

binding (advanced)

カスタム CxfBinding を使用して、Camel メッセージと CXF メッセージ間のバインディングを制御します。

 

CxfRsBinding

bus (advanced)

カスタム設定の CXF バスを使用するには。

 

バス

continuationTimeout (advanced)

このオプションは、CXF サーバーが Jetty またはサーブレットトランスポートを使用している場合にデフォルトで CxfConsumer で使用できる CXF 継続タイムアウトを設定するために使用されます。

30000

long

cxfRsEndpointConfigurer (advanced)

このオプションは、プログラムによる方法での CXF エンドポイントの設定をサポートする org.apache.camel.component.cxf.jaxrs.CxfRsEndpointConfigurer の実装を適用できます。ユーザーは、CxfEndpointConfigurer の configureServer/Client メソッドを実装することで、CXF サーバーとクライアントを設定できます。

 

CxfRsEndpoint Configurer

defaultBus (advanced)

CXF エンドポイントが独自にバスを作成するときに、デフォルトのバスを設定します

false

boolean

headerFilterStrategy (advanced)

カスタムの HeaderFilterStrategy を使用して、Camel メッセージとの間でヘッダーをフィルタリングします。

 

HeaderFilterStrategy

performInvocation (advanced)

オプションが true の場合、Camel はリソースクラスインスタンスの呼び出しを実行し、さらに処理するために応答オブジェクトを交換に入れます。

false

boolean

propagateContexts (advanced)

このオプションが true の場合、JAXRS UriInfo、HttpHeaders、Request、および SecurityContext コンテキストは、型指定された Camel エクスチェンジプロパティーとしてカスタム CXFRS プロセッサーで使用できます。これらのコンテキストは、JAX-RS API を使用して現在のリクエストを分析するために使用できます。

false

boolean

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

78.3. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 4 つのオプションをサポートします。

名前説明デフォルトタイプ

camel.component.cxfrs.enabled

cxfrs コンポーネントを有効にする

true

Boolean

camel.component.cxfrs.header-filter-strategy

カスタムの org.apache.camel.spi.HeaderFilterStrategy を使用して、Camel メッセージとの間でヘッダーをフィルターします。このオプションは org.apache.camel.spi.HeaderFilterStrategy タイプです。

 

String

camel.component.cxfrs.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

camel.component.cxfrs.use-global-ssl-context-parameters

グローバル SSL コンテキストパラメーターの使用を有効にします。

false

Boolean

Spring 設定を使用して CXF REST エンドポイントを設定することもできます。CXF REST クライアントと CXF REST サーバーには多くの違いがあるため、それぞれに異なる設定を提供します。詳細については、スキーマファイルCXF JAX-RS のドキュメント を参照してください。

78.4. Camel で REST エンドポイントを設定する方法

camel-cxf スキーマファイル には、REST エンドポイント定義の 2 つの要素があります。REST コンシューマーの場合は cxf:rsServer、REST プロデューサーの場合は cxf:rsClient
Camel REST サービスのルート設定の例は、こちらにあります。

78.5. メッセージヘッダーから 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.6. REST リクエストの使用 - シンプルなバインディングスタイル

Camel 2.11 から利用可能

Default のバインディングスタイルはかなり低レベルであり、ユーザーはルートに入ってくる MessageContentsList オブジェクトを手動で処理する必要があります。したがって、ルートロジックを JAX-RS 操作のメソッドシグネチャーおよびパラメーターインデックスと緊密に結合します。やや洗練されておらず、難しく、エラーが発生しやすいです。

対照的に、SimpleConsumer バインディングスタイルは、キャメルメッセージ内で リクエストデータにアクセスしやすくする ために、次のマッピングを実行します。

  • JAX-RS パラメーター (@HeaderParam、@QueryParam など) は、IN メッセージヘッダーとして挿入されます。ヘッダー名は、アノテーションの値と一致します。
  • リクエストエンティティー (POJO またはその他のタイプ) は、IN メッセージの本文になります。単一のエンティティーが JAX-RS メソッド署名で識別できない場合、元の MessageContentsList にフォールバックします。
  • バイナリー @Multipart ボディパーツは IN メッセージの添付になり、DataHandlerInputStreamDataSource、および CXF の Attachment クラスをサポートします。
  • 非バイナリー @Multipart ボディパーツは、IN メッセージヘッダーとしてマップされます。ヘッダー名はボディパーツ名と一致します。

さらに、次のルールが Response マッピング に適用されます。

  • メッセージボディーのタイプが javax.ws.rs.core.Response (ユーザー作成のレスポンス) と異なる場合、新しい Response が作成され、メッセージボディーがエンティティーとして設定されます (null でない限り)。レスポンスステータスコードは、Exchange.HTTP_RESPONSE_CODE ヘッダーから取得されるか、存在しない場合はデフォルトで 200 OK になります。
  • メッセージボディーのタイプが javax.ws.rs.core.Response と等しい場合、ユーザーがカスタムレスポンスを作成したことを意味し、それが尊重されて最終的なレスポンスになります。
  • いずれの場合も、カスタムまたはデフォルトの HeaderFilterStrategy によって許可された Camel ヘッダーが HTTP 応答に追加されます。

78.6.1. Simple Binding Style の有効化

このバインディングスタイルは、コンシューマーエンドポイントの bindingStyle パラメーターを値 SimpleConsumer に設定することで有効化できます。

  from("cxfrs:bean:rsServer?bindingStyle=SimpleConsumer")
    .to("log:TEST?showAll=true");

78.6.2. 異なるメソッドシグネチャーを使用したリクエストバインディングの例

以下は、Simple バインディングから期待される結果と一緒にメソッドシグネチャーのリストです。

public Response doAction(BusinessObject request);
リクエストペイロードは、元の MessageContentsList を置き換えて、IN メッセージボディーに配置されます。

public Response doAction(BusinessObject request, @HeaderParam("abcd") String abcd, @QueryParam("defg") String defg); 元の MessageContentsList を置き換えて、IN メッセージボディーに配置されたリクエストペイロード。両方のリクエストパラメーターは、abcd および defg という名前の IN メッセージヘッダーとしてマップされます。

public Response doAction(@HeaderParam("abcd") String abcd, @QueryParam("defg") String defg); 両方のリクエストパラメーターは、abcd および defg という名前の IN メッセージヘッダーとしてマップされます。元の MessageContentsList は、2 個のパラメーターしか含まれていませんが、保持されます。

public Response doAction(@Multipart(value="body1") BusinessObject request, @Multipart(value="body2") BusinessObject request2); 最初のパラメーターは body1 という名前のヘッダーとして転送され、2 番目のパラメーターはヘッダー body2 としてマップされます。元の MessageContentsList は IN メッセージボディーとして保持されます。

public Response doAction(InputStream abcd); InputStream は MessageContentsList からアンラップされ、IN メッセージボディーとして保存されます。

public Response doAction (DataHandler abcd); DataHandler は MessageContentsList からアンラップされ、IN メッセージボディーとして保存されます。

78.6.3. Simple Binding Style のその他の例

このメソッドで 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 リクエスト (Customer DTO が JAXB アノテーション付きである場合):

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.7. REST リクエストの使用 - デフォルトのバインディングスタイル

CXF JAXRS フロントエンドはJAX-RS (JSR-311) API を実装しているため、リソースクラスを REST サービスとしてエクスポートできます。また、CXF Invoker API を利用して、REST 要求を通常の Java オブジェクトメソッド呼び出しに変換します。Camel Restlet コンポーネントとは異なり、エンドポイント内で URI テンプレートを指定する必要はありません。JSR-311 仕様に従って、CXF が 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);
        }
    };
}

そして、エンドポイントの設定に使用される対応するリソースクラス…

情報:*リソースクラスに関する注意*

デフォルトでは、JAX-RS リソースクラスは*JAX-RS プロパティーの設定にのみ使用されます。エンドポイントへのメッセージのルーティング中にメソッドが実行されることは*ありません。代わりに、すべての処理を行うのはルートの責任です。

Camel 2.15 以降では、デフォルトモードの no-op サービス実装クラスとは対照的に、インターフェイスのみを提供するだけでも十分であることに注意してください。

Camel 2.15 から、performInvocation オプションが有効になっている場合、サービス実装が最初に呼び出され、レスポンスが Camel エクスチェンジに設定され、ルートの実行が通常どおり続行されます。これは、既存の JAX-RS 実装を Camel ルートに統合する場合や、カスタムプロセッサーで JAX-RS レスポンスを後処理する場合に役立ちます。

@Path("/customerservice/")
public interface CustomerServiceResource {

    @GET
    @Path("/customers/{id}/")
    Customer getCustomer(@PathParam("id") String id);

    @PUT
    @Path("/customers/")
    Response updateCustomer(Customer customer);

    @Path("/{id}")
    @PUT()
    @Consumes({ "application/xml", "text/plain",
                    "application/json" })
    @Produces({ "application/xml", "text/plain",
                    "application/json" })
    Object invoke(@PathParam("id") String id,
                    String payload);
}

78.8. 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 も提供します。 この API を camel-cxfrs プロデューサーから呼び出すこともできます。HTTP_PATHHTTP_METHOD を指定し、URI オプション httpClientAPI を使用するか、メッセージヘッダー CxfConstants.CAMEL_CXF_RS_USING_HTTP_API を設定して、プロデューサーが http セントリッククライアント API を使用できるようにする必要があります。レスポンスオブジェクトを、メッセージヘッダー CxfConstants.CAMEL_CXF_RS_RESPONSE_CLASS で指定された型クラスに変換できます。

Exchange exchange = template.send("direct://http", new Processor() {
    public void process(Exchange exchange) throws Exception {
        exchange.setPattern(ExchangePattern.InOut)
        Message inMessage = exchange.getIn();
        // using the http central client API
        inMessage.setHeader(CxfConstants.CAMEL_CXF_RS_USING_HTTP_API, Boolean.TRUE);
        // set the Http method
        inMessage.setHeader(Exchange.HTTP_METHOD, "GET");
        // set the relative path
        inMessage.setHeader(Exchange.HTTP_PATH, "/customerservice/customers/123");
        // Specify the response class , cxfrs will use InputStream as the response object type
        inMessage.setHeader(CxfConstants.CAMEL_CXF_RS_RESPONSE_CLASS, Customer.class);
        // set a customer header
        inMessage.setHeader("key", "value");
        // since we use the Get method, so we don't need to set the message body
        inMessage.setBody(null);
    }
});

Camel 2.1 から、CXFRS http セントリッククライアントの cxfrs URI からクエリーパラメーターを指定することもサポートしています。

Exchange exchange = template.send("cxfrs://http://localhost:9003/testQuery?httpClientAPI=true&q1=12&q2=13"

動的ルーティングをサポートするには、CxfConstants.CAMEL_CXF_RS_QUERY_MAP ヘッダーを使用して URI のクエリーパラメーターをオーバーライドし、そのパラメーターマップを設定します。

Map<String, String> queryMap = new LinkedHashMap<>();
queryMap.put("q1", "new");
queryMap.put("q2", "world");
inMessage.setHeader(CxfConstants.CAMEL_CXF_RS_QUERY_MAP, queryMap);

78.9. CXF のキャメルトランスポートとは

CXF では、アドレスを定義することで Web サービスを提供または使用します。アドレスの最初の部分は、使用するプロトコルを指定します。たとえば、エンドポイント設定の address="http://localhost:9000" は、localhost のポート 9000 で http プロトコルを使用してサービスが提供されることを意味します。Camel Transport を CXF に統合すると、新しいトランスポート camel が得られます。したがって、address="camel://direct:MyEndpointName" を指定して、CXF サービスアドレスを camel ダイレクトエンドポイントにバインドできます。

技術的に言えば、CXF のキャメルトランスポートは、Camel コアライブラリーを使用して CXF トランスポート API を実装するコンポーネントです。これにより、Camel のルーティングエンジンと統合パターンサポートを CXF サービスと一緒に簡単に使用できます。

78.10. Camel を CXF トランスポート層に統合する

Camel Transport を CXF バスに含めるには、CamelTransportFactory を使用します。これは、Spring だけでなく Java でも実行できます。

78.10.1. Spring に Camel トランスポートをセットアップする

特別なものを設定したい場合は、ApplicationContext で次のスニペットを使用できます。camel トランスポートのみをアクティブ化する場合は、アプリケーションコンテキストで何もする必要はありません。アプリに camel-cxf-transport jar (camel バージョンが 2.7.x 未満の場合は camel-cxf.jar) を含めるとすぐに、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.10.2. プログラムによる Camel Transport の統合

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.11. Spring で宛先とコンジットを設定する

78.11.1. Namespace

Camel トランスポートエンドポイントの設定に使用される要素は、名前空間 http://cxf.apache.org/transports/camel で定義されています。通常、接頭辞 camel を使用して参照されます。Camel トランスポート設定要素を使用するには、以下に示す行をエンドポイントの設定ファイルの beans 要素に追加する必要があります。さらに、設定要素の名前空間を 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.11.2. destination 要素

camel:destination 要素とその子要素を使用して、Camel トランスポートサーバーエンドポイントを設定します。camel:destination 要素は、エンドポイントに対応する WSDL port 要素を指定する単一の属性 name を取ります。name 属性の値は、portQName`.camel-destination` の形式を取ります。以下の例では、エンドポイントのターゲット名前空間がhttp://widgets.widgetvendor.netの場合、WSDLフラグメント<port binding="widgetSOAPBinding" name="widgetSOAPPort"> によって指定されたエンドポイントの設定を追加するために使用する camel:destination 要素を示します。

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 コンテキスト ID

78.11.3. conduit 要素

camel:conduit 要素とその子要素を使用して、Camel トランスポートクライアントを設定します。camel:conduit 要素は、エンドポイントに対応する WSDL ポート要素を指定する単一の属性 name を取ります。name 属性の値は、portQName`.camel-conduit` の形式を取ります。たとえば、以下のコードは、エンドポイントのターゲット名前空間が 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 コンジットで camel コンテキストを指定できます。

camel:camelContextRef

camel コンジットに挿入する camel コンテキスト ID

78.12. ブループリントで宛先とコンジットを設定する

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
                          ...>

blueprint camel:conduit camel:destination には camelContextId 属性が 1 つしかないため、camel 宛先での camel コンテキストの指定はサポートされていません。

  <camel:conduit id="*.camel-conduit" camelContextId="camel1" />
  <camel:destination id="*.camel-destination" camelContextId="camel1" />

78.13. CXF のロードバランサーとして Camel を使用する例

この例では、CXF で camel ロードバランシング機能を使用する方法を示します。設定ファイルを CXF にロードし、アドレス camel://direct:EndpointA および camel://direct:EndpointB でエンドポイントを公開する必要があります。

78.14. Camel を CXF に接続するための完全なハウツーと例

Apache Camel を使用した CXF Web サービスの JMS トランスポートの改善 

第79章 Data Format コンポーネント

Camel バージョン 2.12 以降で利用可能

dataformat: コンポーネントを使用すると、Data Format を Camel コンポーネントとして使用できます。

79.1. URI 形式

dataformat:name:(marshal|unmarshal)[?options]

name はデータ形式の名前です。次に、marshal または unmarshal のいずれかでなければならない操作が続きます。オプションは、使用中の データ形式 を設定するために使用されます。どのオプションがサポートされているかについては、データ形式のドキュメントを参照してください。

79.2. データ形式オプション

Data Format コンポーネントにはオプションがありません。

Data Format エンドポイントは、URI 構文を使用して設定されます。

dataformat:name:operation

パスおよびクエリーパラメーターを使用します。

79.2.1. パスパラメーター (2 個のパラメーター):

名前説明デフォルトタイプ

name

必須 データ形式の名前

 

String

operation

マーシャリングまたはアンマーシャリングのいずれかを使用するために 必要な 操作

 

String

79.2.2. クエリーパラメーター(1 個のパラメーター):

名前説明デフォルトタイプ

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章 Dataset コンポーネント

Camel バージョン 1.3 以降で利用可能

分散処理と非同期処理のテストは、非常に難しいことで知られています。MockTest、および DataSet エンドポイントは Camel テストフレームワークとうまく連携し、エンタープライズ統合パターン と Camel の幅広いコンポーネントを強力な Bean 統合と共に使用して、ユニットと統合のテストを簡素化します。

DataSet コンポーネントは、システムの負荷テストとソークテストを簡単に実行するメカニズムを提供します。メッセージのソースとして、またデータセットが受信されたことをアサートする方法として、DataSet インスタンス を作成できるようにすることで機能します。

Camel は、データセットを送信するときに スループットロガー を使用します。

80.1. URI 形式

dataset:name[?options]

name は、レジストリーで DataSet インスタンス を検索するために使用されます

Camel には、独自の DataSet を実装するためのベースとして使用できる org.apache.camel.component.dataset.DataSetorg.apache.camel.component.dataset.DataSetSupport クラスのサポート実装が付属しています。Camel には、テストに使用できるいくつかの実装も同梱されています: org.apache.camel.component.dataset.SimpleDataSetorg.apache.camel.component.dataset.ListDataSet、および org.apache.camel.component.dataset.FileDataSet。これらはすべて DataSetSupport を拡張します。

80.2. オプション

Dataset コンポーネントにはオプションがありません。

Dataset エンドポイントは、URI 構文を使用して設定されます。

dataset:name

パスおよびクエリーパラメーターを使用します。

80.2.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

name

必須 レジストリーで検索する DataSet の名前。

 

DataSet

80.2.2. クエリーパラメーター (19 パラメーター)

名前説明デフォルトタイプ

dataSetIndex (Common)

CamelDataSetIndex ヘッダーの動作を制御します。コンシューマーの場合: - off = ヘッダーは設定されません - strict/lenient = ヘッダーは設定されますプロデューサーの場合: - off = ヘッダー値は検証されず、存在しない場合は設定されません = strict =ヘッダー値が存在する必要があり、検証されます = lenient = ヘッダー値が存在する場合は検証され、存在しない場合は設定されます

lenient

String

bridgeErrorHandler (consumer)

コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN/ERROR レベルでログに記録され、無視されます。

false

boolean

initialDelay (consumer)

メッセージの送信を開始する前に待機する時間 (ミリ単位)。

1000

long

minRate (consumer)

DataSet に少なくともこの数のメッセージが含まれるまで待ちます

0

int

preloadSize (consumer)

ルートが初期化を完了する前にプリロード (送信) するメッセージの数を設定します

0

long

produceDelay (consumer)

メッセージがコンシューマーによって送信されるときに遅延を引き起こす遅延を指定できるようにします (遅い処理をシミュレートするため)

3

long

exceptionHandler (consumer)

コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN/ERROR レベルでログに記録され、無視されます。

 

ExceptionHandler

exchangePattern (consumer)

エクスチェンジの作成時にデフォルトのエクスチェンジパターンを設定します。

 

ExchangePattern

assertPeriod (producer)

暫定的なアサーションがまだ有効であることを確認するために、モックエンドポイントが再アサートするまでの猶予期間を設定します。これは、たとえば、正確な数のメッセージが到着したことをアサートするために使用されます。たとえば、expectedMessageCount (int) が 5 に設定されている場合、5 つ以上のメッセージが到着するとアサーションが満たされます。正確に 5 つのメッセージが到着するようにするには、それ以上メッセージが到着しないように少し待つ必要があります。これが、この setAssertPeriod (long) メソッドを使用できる目的です。デフォルトでは、この期間は無効になっています。

0

long

consumeDelay (producer)

メッセージがプロデューサによって消費されるときに遅延を引き起こす遅延を指定できるようにします (遅い処理をシミュレートするため)

0

long

expectedCount (producer)

このエンドポイントが受信するメッセージ交換の予想数を指定します。注意: 0 のメッセージを期待したい場合は、特別な注意が必要です。0 はテストの開始時に一致するため、アサート期間を設定して、テストをしばらく実行し、まだメッセージが到着していないことを確認する必要があります。;そのためには setAssertPeriod (long) を使用します。別の方法として、NotifyBuilder を使用し、モックで assertIsSatisfied () メソッドを呼び出す前に、NotifyBuilder を使用して、Camel がいくつかのメッセージのルーティングを完了したことを知ることができます。これにより、固定アサート期間を使用せずにテスト時間を短縮できます。正確に n 番目のメッセージがこのモックエンドポイントに到着することをアサートする場合は、詳細について setAssertPeriod (long) メソッドも参照してください。

-1

int

reportGroup (producer)

サイズのグループに基づいてスループットログを有効にするために使用される数値。

 

int

resultMinimumWaitTime (producer)

ラッチが満たされるまで assertIsSatisfied () が待機する最小予想時間 (ミリ秒単位) を設定します

0

long

resultWaitTime (producer)

ラッチが満たされるまで assertIsSatisfied () が待機する最大時間 (ミリ秒単位) を設定します

0

long

retainFirst (producer)

受信した Exchange の最初の n 番目の数だけを保持するように指定します。これは、ビッグデータでテストするときに使用され、このモックエンドポイントが受信するすべての Exchange のコピーを保存しないことでメモリー消費を削減します。重要: この制限を使用する場合、getReceivedCounter() は受信した Exchange の実際の数を返します。たとえば、5000 の交換を受信し、最初の 10 の交換のみを保持するように設定した場合、getReceivedCounter () は引き続き 5000 を返しますが、getExchanges () および getReceivedExchanges () メソッドには最初の 10 の交換しかありません。このメソッドを使用する場合、他の期待値メソッドの一部はサポートされません。たとえば、expectedBodiesReceived(Object…) は、受信した最初の数のボディに期待値を設定します。setRetainFirst(int) メソッドと setRetainLast(int) メソッドの両方を設定して、最初と最後の受信の両方を制限できます。

-1

int

retainLast (producer)

受信した Exchange の最後の n 番目の数だけを保持するように指定します。これは、ビッグデータでテストするときに使用され、このモックエンドポイントが受信するすべての Exchange のコピーを保存しないことでメモリー消費を削減します。重要: この制限を使用する場合、getReceivedCounter() は受信した Exchange の実際の数を返します。たとえば、5000 の交換を受信し、最後の 20 の交換のみを保持するように設定した場合、getReceivedCounter () は引き続き 5000 を返しますが、getExchanges () および getReceivedExchanges () メソッドには最後の 20 の交換しかありません。このメソッドを使用する場合、他の期待値メソッドの一部はサポートされません。たとえば、expectedBodiesReceived(Object…) は、受信した最初の数のボディに期待値を設定します。setRetainFirst(int) メソッドと setRetainLast(int) メソッドの両方を設定して、最初と最後の受信の両方を制限できます。

-1

int

sleepForEmptyTest (producer)

expectedMessageCount (int) がゼロで呼び出されたときに、このエンドポイントが実際に空であることを確認するために待機するスリープを指定できるようにします

0

long

copyOnExchange (producer)

このモックエンドポイントで受信したときに受信 Exchange のディープコピーを作成するかどうかを設定します。デフォルトでは true です。

true

boolean

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

URI には、?option=value&option=value&…​ の形式でクエリーオプションを追加できます。

80.3. DataSet の設定

Camel は、DataSet インターフェイスを実装する Bean をレジストリーで検索します。したがって、独自の DataSet を次のように登録できます。

<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 実装を作成し、データセットの大きさやメッセージの外観などを設定します。   

80.5. DataSetSupport (抽象クラス)

DataSetSupport 抽象クラスは、新しい DataSet の出発点として最適であり、派生クラスにいくつかの便利な機能を提供します。

80.5.1. DataSetSupport のプロパティー

プロパティータイプデフォルト説明

defaultHeaders

Map<String,Object>

null

デフォルトのメッセージ本文を指定します。SimpleDataSet の場合、これは一定のペイロードです。ただし、メッセージごとにカスタムペイロードを作成する場合は、DataSetSupport の独自の派生を作成します。

outputTransformer

org.apache.camel.Processor

null

 

size

long

10

送信/消費するメッセージの数を指定します。

reportCount

long

-1

進行状況を報告する前に受信するメッセージの数を指定します。大規模な負荷テストの進行状況を表示するのに役立ちます。< 0 の場合は size/5、0 の場合は size、それ以外の場合は reportCount 値に設定されます。

80.6. SimpleDataSet

SimpleDataSetDataSetSupport を拡張し、デフォルトの本文を追加します。

80.6.1. SimpleDataSet の追加プロパティー

プロパティータイプデフォルト説明

defaultBody

Object

<hello>world!</hello>

デフォルトのメッセージ本文を指定します。デフォルトでは、SimpleDataSet は交換ごとに同じ一定のペイロードを生成します。交換ごとにペイロードをカスタマイズする場合は、キャメル プロセッサー を作成し、outputTransformer プロパティーを設定して、それを使用するように SimpleDataSet を設定します。

80.7. ListDataSet

Camel 2.17 以降で利用可能

List`DataSet` は DataSetSupport を拡張し、デフォルトボディーのリストを追加します。

80.7.1. ListDataSet の追加プロパティー

プロパティータイプデフォルト説明

defaultBodies

List<Object>

empty LinkedList<Object>

デフォルトのメッセージ本文を指定します。デフォルトでは、ListDataSetCamelDataSetIndex を使用して defaultBodies のリストから定数ペイロードを選択します。ペイロードをカスタマイズする場合は、キャメル プロセッサー を作成し、outputTransformer プロパティーを設定して、それを使用するように ListDataSet を設定します。

size

long

defaultBodies リストのサイズ

送信/消費するメッセージの数を指定します。この値は、defaultBodies リストのサイズとは異なる場合があります。値が defaultBodies リストのサイズより小さい場合、一部のリスト要素は使用されません。値が defaultBodies リストのサイズより大きい場合、交換のペイロードは CamelDataSetIndex の係数と defaultBodies リストのサイズを使用して選択されます (つまり、CamelDataSetIndex % defaultBodies.size ())。

80.8. FileDataSet

Camel 2.17 以降で利用可能

FileDataSetListDataSet を拡張し、ファイルから本文をロードするためのサポートを追加します。

80.8.1. FileDataSet の追加プロパティー

プロパティータイプデフォルト説明

sourceFile

File

null

ペイロードのソースファイルを指定します

delimiter

String

\z

ファイルを複数のペイロードに分割するために java.util.Scanner によって使用される区切り文字パターンを指定します。

第81章 DigitalOcean Component

Camel バージョン 2.19 以降で利用可能

DigitalOcean コンポーネントを使用すると、digitalocean-api-java (https://www.digitalocean.com/community/projects/api-client-in-java) をカプセル化することで、Camel を使用して DigitalOcean クラウド内のドロップレットとリソースを管理できます。DigitalOcean コントロールパネルで使い慣れたすべての機能は、この Camel コンポーネントからも利用できます。

81.1. 前提条件

有効な DigitalOcean アカウントと有効な OAuth トークンが必要です。アカウントの DigitalOcean コントロールパネルのアプリケーションと API(https://cloud.digitalocean.com/settings/applications) セクションにアクセスして、OAuth トークンを生成できます。

81.2. URI 形式

DigitalOcean コンポーネント は、次の 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 個のパラメーター):

名前説明デフォルトタイプ

operation

指定されたリソースに対して実行する操作。

 

DigitalOceanOperations

81.3.2. クエリーパラメーター (10 パラメーター)

名前説明デフォルトタイプ

page (producer)

ページネーションに使用します。ページ番号を強制します。

1

Integer

perPage (producer)

ページネーションに使用します。リクエストごとのアイテム数を設定します。1 ページあたりの結果の最大数は 200 です。

25

Integer

resource (producer)

必須 操作を実行する DigitalOcean リソースタイプ。

 

DigitalOceanResources

digitalOceanClient (advanced)

既存の設定済み DigitalOceanClient をクライアントとして使用するには

 

DigitalOceanClient

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

httpProxyHost (proxy)

必要に応じてプロキシーホストを設定する

 

String

httpProxyPassword (proxy)

必要に応じてプロキシーパスワードを設定します

 

String

httpProxyPort (proxy)

必要に応じてプロキシーポートを設定します

 

Integer

httpProxyUser (proxy)

必要に応じてプロキシーホストを設定します

 

String

oAuthToken (security)

DigitalOcean OAuth トークン

 

String

81.4. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 2 つのオプションをサポートします。

名前説明デフォルトタイプ

camel.component.digitalocean.enabled

digitalocean コンポーネントを有効にします

true

Boolean

camel.component.digitalocean.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

operation URI オプションまたは CamelDigitalOceanOperation メッセージヘッダーを使用して、エンドポイントごとに operation 値を指定する必要があります。

すべての operation 値は DigitalOceanOperations 列挙で定義されます。

コンポーネントによって使用されるすべての ヘッダー 名は、DigitalOceanHeaders 列挙で定義されます。

81.5. メッセージボディーの結果

返されるすべてのメッセージボディーは 、digitalocean-api-java ライブラリーによって提供されるオブジェクトを使用しています。

81.6. API レート制限

camel-digitalocean コンポーネントによってカプセル化された DigitalOcean REST API は、API レート制限の対象となります。API レート制限のドキュメント (https://developers.digitalocean.com/documentation/v2/#rate-limit) でメソッドごとの制限を確認できます。

81.7. アカウントエンドポイント

| operation | Description | Headers | Result | | ------ | ---- | ------- | ----------- | | get | get account info | | com.myjeeva.digitalocean.pojo.Account |

81.8. BlockStorages エンドポイント

| operation | Description | Headers | Result | | ------ | ---- | ------- | ----------- | | list | list all of the Block Storage volumes available on your account | | List<com.myjeeva.digitalocean.pojo.Volume> | | get | show information about a Block Storage volume| CamelDigitalOceanId Integer| com.myjeeva.digitalocean.pojo.Volume | | get | show information about a Block Storage volume by name| CamelDigitalOceanName String <br>`CamelDigitalOceanRegion` String| com.myjeeva.digitalocean.pojo.Volume | | listSnapshots | retrieve the snapshots that have been created from a volume | CamelDigitalOceanId Integer| List<com.myjeeva.digitalocean.pojo.Snapshot> | | create | create a new volume | CamelDigitalOceanVolumeSizeGigabytes Integer<br>`CamelDigitalOceanName` String<br>`CamelDigitalOceanDescription`* String<br>`CamelDigitalOceanRegion`* String| com.myjeeva.digitalocean.pojo.Volume | | delete | delete a Block Storage volume, destroying all data and removing it from your account| CamelDigitalOceanId Integer| com.myjeeva.digitalocean.pojo.Delete| | delete | delete a Block Storage volume by name| CamelDigitalOceanName String<br>`CamelDigitalOceanRegion` String| com.myjeeva.digitalocean.pojo.Delete | attach | attach a Block Storage volume to a Droplet| CamelDigitalOceanId Integer <br>`CamelDigitalOceanDropletId` Integer<br>`CamelDigitalOceanDropletRegion` String| com.myjeeva.digitalocean.pojo.Action | attach | attach a Block Storage volume to a Droplet by name| CamelDigitalOceanName String<br>`CamelDigitalOceanDropletId` Integer<br>`CamelDigitalOceanDropletRegion` String| com.myjeeva.digitalocean.pojo.Action | detach | detach a Block Storage volume from a Droplet| CamelDigitalOceanId Integer <br>`CamelDigitalOceanDropletId` Integer<br>`CamelDigitalOceanDropletRegion` String| com.myjeeva.digitalocean.pojo.Action | attach | detach a Block Storage volume from a Droplet by name| CamelDigitalOceanName String<br>`CamelDigitalOceanDropletId` Integer<br>`CamelDigitalOceanDropletRegion` String| com.myjeeva.digitalocean.pojo.Action | resize | resize a Block Storage volume | CamelDigitalOceanVolumeSizeGigabytes Integer<br>`CamelDigitalOceanRegion` String| com.myjeeva.digitalocean.pojo.Action | | listActions | retrieve all actions that have been executed on a volume | CamelDigitalOceanId Integer| List<com.myjeeva.digitalocean.pojo.Action> |

81.9. Droplets エンドポイント

| operation | Description | Headers | Result | | ------ | ---- | ------- | ----------- | | list | list all Droplets in your account | | List<com.myjeeva.digitalocean.pojo.Droplet> | | get | show an individual droplet | CamelDigitalOceanId Integer| com.myjeeva.digitalocean.pojo.Droplet | | create | create a new Droplet | CamelDigitalOceanName String <br>`CamelDigitalOceanDropletImage` String <br>`CamelDigitalOceanRegion` String <br>`CamelDigitalOceanDropletSize` String <br>`CamelDigitalOceanDropletSSHKeys`* List\<String\> <br>`CamelDigitalOceanDropletEnableBackups`* Boolean <br>`CamelDigitalOceanDropletEnableIpv6`* Boolean <br>`CamelDigitalOceanDropletEnablePrivateNetworking`* Boolean <br>`CamelDigitalOceanDropletUserData`* String <br>`CamelDigitalOceanDropletVolumes`* List\<String\> <br>`CamelDigitalOceanDropletTags` List\<String\>| com.myjeeva.digitalocean.pojo.Droplet | | create | create multiple Droplets | CamelDigitalOceanNames List\<String\> <br>`CamelDigitalOceanDropletImage` String <br>`CamelDigitalOceanRegion` String <br>`CamelDigitalOceanDropletSize` String <br>`CamelDigitalOceanDropletSSHKeys`* List\<String\> <br>`CamelDigitalOceanDropletEnableBackups`* Boolean <br>`CamelDigitalOceanDropletEnableIpv6`* Boolean <br>`CamelDigitalOceanDropletEnablePrivateNetworking`* Boolean <br>`CamelDigitalOceanDropletUserData`* String <br>`CamelDigitalOceanDropletVolumes`* List\<String\> <br>`CamelDigitalOceanDropletTags` List\<String\>| com.myjeeva.digitalocean.pojo.Droplet | | delete | delete a Droplet, | CamelDigitalOceanId Integer| com.myjeeva.digitalocean.pojo.Delete | | enableBackups | enable backups on an existing Droplet | CamelDigitalOceanId Integer| com.myjeeva.digitalocean.pojo.Action | | disableBackups | disable backups on an existing Droplet | CamelDigitalOceanId Integer| com.myjeeva.digitalocean.pojo.Action | | enableIpv6 | enable IPv6 networking on an existing Droplet | CamelDigitalOceanId Integer| com.myjeeva.digitalocean.pojo.Action | | enablePrivateNetworking | enable private networking on an existing Droplet | 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.digitalocean.pojo.Action | | shutdown | shutdown a Droplet | CamelDigitalOceanId Integer| com.myjeeva.digitalocean.pojo.Action | | powerOff | power off a Droplet | CamelDigitalOceanId Integer| com.myjeeva.digitalocean.pojo.Action | | powerOn | power on a Droplet | CamelDigitalOceanId Integer| com.myjeeva.digitalocean.pojo.Action | | restore | shutdown a Droplet | CamelDigitalOceanId Integer <br>`CamelDigitalOceanImageId` Integer| com.myjeeva.digitalocean.pojo.Action | | passwordReset | reset the password for a Droplet | CamelDigitalOceanId Integer| com.myjeeva.digitalocean.pojo.Action | | resize | resize a Droplet | CamelDigitalOceanId Integer <br>`CamelDigitalOceanDropletSize` String| com.myjeeva.digitalocean.pojo.Action | | rebuild | rebuild a Droplet | CamelDigitalOceanId Integer <br>`CamelDigitalOceanImageId` Integer| com.myjeeva.digitalocean.pojo.Action | | rename | rename a Droplet | CamelDigitalOceanId Integer <br>`CamelDigitalOceanName` String| com.myjeeva.digitalocean.pojo.Action | | changeKernel | change the kernel of a Droplet | CamelDigitalOceanId Integer <br>`CamelDigitalOceanKernelId` Integer| com.myjeeva.digitalocean.pojo.Action | | takeSnapshot | snapshot a Droplet | CamelDigitalOceanId Integer <br>`CamelDigitalOceanName`* String| com.myjeeva.digitalocean.pojo.Action | | tag | tag a Droplet | CamelDigitalOceanId Integer <br>`CamelDigitalOceanName` String| com.myjeeva.digitalocean.pojo.Response | | untag | untag a Droplet | CamelDigitalOceanId Integer <br>`CamelDigitalOceanName` String| com.myjeeva.digitalocean.pojo.Response | | listKernels | retrieve a list of all kernels available to a Droplet | CamelDigitalOceanId Integer | List<com.myjeeva.digitalocean.pojo.Kernel> | | listSnapshots | retrieve the snapshots that have been created from a Droplet | CamelDigitalOceanId Integer | List<com.myjeeva.digitalocean.pojo.Snapshot> | | listBackups | retrieve any backups associated with a Droplet | CamelDigitalOceanId Integer | List<com.myjeeva.digitalocean.pojo.Backup> | | listActions | retrieve all actions that have been executed on a Droplet | CamelDigitalOceanId Integer | List<com.myjeeva.digitalocean.pojo.Action> | | listNeighbors | retrieve a list of droplets that are running on the same physical server | CamelDigitalOceanId Integer | List<com.myjeeva.digitalocean.pojo.Droplet> | | listAllNeighbors | retrieve a list of any droplets that are running on the same physical hardware | | List<com.myjeeva.digitalocean.pojo.Droplet> |

81.10. イメージエンドポイント

| operation | Description | Headers | Result | | ------ | ---- | ------- | ----------- | | list | list images available on your account | CamelDigitalOceanType* DigitalOceanImageTypes | List<com.myjeeva.digitalocean.pojo.Image> | | ownList | retrieve only the private images of a user | | List<com.myjeeva.digitalocean.pojo.Image> | | listActions | retrieve all actions that have been executed on a Image | CamelDigitalOceanId Integer | List<com.myjeeva.digitalocean.pojo.Action> | | get | retrieve information about an image (public or private) by id| CamelDigitalOceanId Integer| com.myjeeva.digitalocean.pojo.Image | | get | retrieve information about an public image by slug| CamelDigitalOceanDropletImage String| com.myjeeva.digitalocean.pojo.Image | | update | update an image| CamelDigitalOceanId Integer <br>`CamelDigitalOceanName` String| com.myjeeva.digitalocean.pojo.Image | | delete | delete an image| CamelDigitalOceanId Integer | com.myjeeva.digitalocean.pojo.Delete | | transfer | transfer an image to another region| CamelDigitalOceanId Integer <br>`CamelDigitalOceanRegion` String| com.myjeeva.digitalocean.pojo.Action | | convert | convert an image, for example, a backup to a snapshot| CamelDigitalOceanId Integer | com.myjeeva.digitalocean.pojo.Action |

81.11. スナップショットエンドポイント

| operation | Description | Headers | Result | | ------ | ---- | ------- | ----------- | | list | list all of the snapshots available on your account | CamelDigitalOceanType* DigitalOceanSnapshotTypes | List<com.myjeeva.digitalocean.pojo.Snapshot> | | get | retrieve information about a snapshot| CamelDigitalOceanId Integer| com.myjeeva.digitalocean.pojo.Snapshot | | delete | delete an snapshot| CamelDigitalOceanId Integer | com.myjeeva.digitalocean.pojo.Delete |

81.12. キーエンドポイント

| operation | Description | Headers | Result | | ------ | ---- | ------- | ----------- | | list | list all of the keys in your account | | List<com.myjeeva.digitalocean.pojo.Key> | | get | retrieve information about a key by id| CamelDigitalOceanId Integer| com.myjeeva.digitalocean.pojo.Key | | get | retrieve information about a key by fingerprint| CamelDigitalOceanKeyFingerprint String| com.myjeeva.digitalocean.pojo.Key | | update | update a key by id| CamelDigitalOceanId Integer <br>`CamelDigitalOceanName` String| com.myjeeva.digitalocean.pojo.Key | | update | update a key by fingerprint| CamelDigitalOceanKeyFingerprint String <br>`CamelDigitalOceanName` String| com.myjeeva.digitalocean.pojo.Key | | delete | delete a key by id| CamelDigitalOceanId Integer | com.myjeeva.digitalocean.pojo.Delete | | delete | delete a key by fingerprint| CamelDigitalOceanKeyFingerprint String | com.myjeeva.digitalocean.pojo.Delete |

81.13. リージョンエンドポイント

| operation | Description | Headers | Result | | ------ | ---- | ------- | ----------- | | list | list all of the regions that are available | | List<com.myjeeva.digitalocean.pojo.Region> |

81.14. サイズエンドポイント

| operation | Description | Headers | Result | | ------ | ---- | ------- | ----------- | | list | list all of the sizes that are available | | List<com.myjeeva.digitalocean.pojo.Size> |

81.15. フローティング IP エンドポイント

| operation | Description | Headers | Result | | ------ | ---- | ------- | ----------- | | list | list all of the Floating IPs available on your account | | List<com.myjeeva.digitalocean.pojo.FloatingIP> | | create | create a new Floating IP assigned to a Droplet | CamelDigitalOceanId Integer | List<com.myjeeva.digitalocean.pojo.FloatingIP> | | create | create a new Floating IP assigned to a Region | CamelDigitalOceanRegion String | List<com.myjeeva.digitalocean.pojo.FloatingIP> | | get | retrieve information about a Floating IP| CamelDigitalOceanFloatingIPAddress String| com.myjeeva.digitalocean.pojo.Key | | delete | delete a Floating IP and remove it from your account| CamelDigitalOceanFloatingIPAddress String| com.myjeeva.digitalocean.pojo.Delete | | assign | assign a Floating IP to a Droplet| CamelDigitalOceanFloatingIPAddress String <br>`CamelDigitalOceanDropletId` Integer| com.myjeeva.digitalocean.pojo.Action | | unassign | unassign a Floating IP | CamelDigitalOceanFloatingIPAddress String | com.myjeeva.digitalocean.pojo.Action | | listActions | retrieve all actions that have been executed on a Floating IP | CamelDigitalOceanFloatingIPAddress String | List<com.myjeeva.digitalocean.pojo.Action> |

81.16. タグのエンドポイント

| operation | Description | Headers | Result | | ------ | ---- | ------- | ----------- | | list | list all of your tags | | List<com.myjeeva.digitalocean.pojo.Tag> | | create | create a Tag | CamelDigitalOceanName String | com.myjeeva.digitalocean.pojo.Tag | | get | retrieve an individual tag | CamelDigitalOceanName String | com.myjeeva.digitalocean.pojo.Tag | | delete | delete a tag | CamelDigitalOceanName String | com.myjeeva.digitalocean.pojo.Delete | | update | update a tag | CamelDigitalOceanName String <br>`CamelDigitalOceanNewName` String| com.myjeeva.digitalocean.pojo.Tag |

81.17. 例

アカウント情報を取得する

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")

Retrieve information for the 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章 Direct コンポーネント

Camel バージョン 1.0 以降で利用可能

direct: コンポーネントプロデューサーがメッセージエクスチェンジを送信する際に、コンポーネントはコンシューマーを直接、同期呼び出しを提供します。
このエンドポイントは、同じ Camel コンテキストの既存ルートを接続するために使用できます。

ヒント

Asynchronous SEDA コンポーネントは、プロデューサーがメッセージエクスチェンジを送信するときに、コンシューマーの非同期呼び出しを提供します。

ヒント

他の camel コンテキストへの接続仮想マシン コンポーネントは、Camel コンテキストが同じ JVM で実行されている限り、Camel コンテキスト間の接続を提供します。

82.1. URI 形式

direct:someName[?options]

someName は、エンドポイントを一意に識別する任意の文字列にすることができます。

82.2. オプション

Direct コンポーネントは、以下に示す 3 個のオプションをサポートします。

名前説明デフォルトタイプ

block (producer)

アクティブなコンシューマーを持たない direct エンドポイントにメッセージを送信する場合、ブロックしてコンシューマーがアクティブになるのを待つようプロデューサーに指示できます。

true

boolean

timeout (producer)

ブロックが有効な場合に使用するタイムアウト値。

30000

long

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

Direct エンドポイントは、URI 構文を使用して設定されます。

direct:name

パスおよびクエリーパラメーターを使用します。

82.2.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

name

必須: direct エンドポイントの名前

 

String

82.2.2. クエリーパラメーター (7 個のパラメーター):

名前説明デフォルトタイプ

bridgeErrorHandler (consumer)

コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN/ERROR レベルでログに記録され、無視されます。

false

boolean

exceptionHandler (consumer)

コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN/ERROR レベルでログに記録され、無視されます。

 

ExceptionHandler

exchangePattern (consumer)

エクスチェンジの作成時にデフォルトのエクスチェンジパターンを設定します。

 

ExchangePattern

block (producer)

アクティブなコンシューマーを持たない direct エンドポイントにメッセージを送信する場合、ブロックしてコンシューマーがアクティブになるのを待つようプロデューサーに指示できます。

true

boolean

failIfNoConsumers (producer)

アクティブなコンシューマーのない DIRECT エンドポイントに送信するときに、プロデューサーが例外を出力して失敗するかどうか。

false

boolean

timeout (producer)

ブロックが有効な場合に使用するタイムアウト値。

30000

long

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

82.3. サンプル

以下のルートでは、direct コンポーネントを使用して 2 つのルートをリンクします。

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");

Spring 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章 ダイレクト仮想マシンコンポーネント

Camel バージョン 2.10 以降で利用可能

direct-vm: コンポーネントは、プロデューサがメッセージエクスチェンジを送信するときに、JVM 内のすべてのコンシューマーの直接の同期呼び出しを提供します。
このエンドポイントを使用して、同じ camel コンテキスト内の既存のルートを接続したり、同じ JVM 内の他の camel コンテキストから接続したりできます。

このコンポーネントは、Direct-VM が CamelContext インスタンス間の通信をサポートするという点で Direct コンポーネントとは異なります。そのため、このメカニズムを使用して Web アプリケーション間で通信できます (camel-core.jar がシステム/ブートクラスパスにある場合)。

実行時に、既存のコンシューマーを停止して新しいコンシューマーを開始することにより、新しいコンシューマーをスワップできます。
ただし、任意の時点で、特定のエンドポイントに対して最大で 1 つのアクティブなコンシューマーしか存在できません。

このコンポーネントを使用すると、後でわかるように、異なる OSGI バンドルにデプロイされたルートを接続することもできます。それらが異なるバンドルで実行されている場合でも、キャメルルートは使用します
同じスレッド。これは、Transactions - Tx を使用してアプリケーションを開発するために自動化されます。

image

83.1. URI 形式

direct-vm:someName

someName は、エンドポイントを一意に識別する任意の文字列にすることができます。

83.2. オプション

Direct 仮想マシンコンポーネントは、以下に示す 5 個のオプションをサポートします。

名前説明デフォルトタイプ

block (producer)

アクティブなコンシューマーを持たない direct エンドポイントにメッセージを送信する場合、ブロックしてコンシューマーがアクティブになるのを待つようプロデューサーに指示できます。

true

boolean

timeout (producer)

ブロックが有効な場合に使用するタイムアウト値。

30000

long

headerFilterStrategy (advanced)

プロデューサーエンドポイントにのみ適用される HeaderFilterStrategy を設定します (両方向: リクエストとレスポンス)。デフォルト値: None

 

HeaderFilterStrategy

propagateProperties (advanced)

プロデューサ側からコンシューマー側に、またはその逆にプロパティーを伝播するかどうか。デフォルト値: true

true

boolean

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

Direct 仮想マシンエンドポイントは、URI 構文を使用して設定されます。

direct-vm:name

パスおよびクエリーパラメーターを使用します。

83.2.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

name

必須 direct-vm エンドポイントの名前

 

String

83.2.2. クエリーパラメーター(9 パラメーター):

名前説明デフォルトタイプ

bridgeErrorHandler (consumer)

コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN/ERROR レベルでログに記録され、無視されます。

false

boolean

exceptionHandler (consumer)

コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN/ERROR レベルでログに記録され、無視されます。

 

ExceptionHandler

exchangePattern (consumer)

エクスチェンジの作成時にデフォルトのエクスチェンジパターンを設定します。

 

ExchangePattern

block (producer)

アクティブなコンシューマーを持たない direct エンドポイントにメッセージを送信する場合、ブロックしてコンシューマーがアクティブになるのを待つようプロデューサーに指示できます。

true

boolean

failIfNoConsumers (producer)

アクティブなコンシューマーのない Direct 仮想マシンエンドポイントに送信するときに、プロデューサーが例外を出力して失敗するかどうか。

false

boolean

timeout (producer)

ブロックが有効な場合に使用するタイムアウト値。

30000

long

headerFilterStrategy (producer)

プロデューサーエンドポイントにのみ適用される HeaderFilterStrategy を設定します (両方向: リクエストとレスポンス)。デフォルト値: None

 

HeaderFilterStrategy

propagateProperties (advanced)

プロデューサ側からコンシューマー側に、またはその逆にプロパティーを伝播するかどうか。デフォルト値: true

true

boolean

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

83.3. サンプル

以下のルートでは、direct コンポーネントを使用して 2 つのルートをリンクします。

from("activemq:queue:order.in")
    .to("bean:orderServer?method=validate")
    .to("direct-vm:processOrder");

そして、別の OSGi バンドルなど、別の CamelContext で

from("direct-vm:processOrder")
    .to("bean:orderService?method=process")
    .to("activemq:queue:order.out");

Spring 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 コンポーネント

Camel バージョン 2.12 以降で利用可能

disruptor: コンポーネントは、標準の SEDA コンポーネントと同様に非同期 SEDA の動作を提供しますが、標準の SEDA で使用される BlockingQueue の代わりに Disruptor を使用します。または、次のようになります。

interruptor-vm: エンドポイントはこのコンポーネントでサポートされており、標準の 仮想マシン に代わるものを提供します。SEDA コンポーネントと同様に、ディスラプターのバッファー: エンドポイントは 単一の CamelContext 内でのみ表示され、永続性または回復のサポートは提供されません。また、disruptor-vm: エンドポイントのバッファーは、CamelContexts インスタンス間の通信をサポートするため、このメカニズムを使用して Web アプリケーション間で通信できます (camel-disruptor.jarシステム/ブート クラスパスにある場合)。

SEDA または仮想マシンコンポーネントよりも Disruptor コンポーネントを使用することを選択する主な利点は、プロデューサ間および/またはマルチキャストまたは同時コンシューマー間の競合が激しいユースケースでのパフォーマンスです。これらのケースでは、スループットの大幅な向上とレイテンシーの削減が観察されています。競合のないシナリオでのパフォーマンスは、SEDA および VM コンポーネントに匹敵します。

Disruptor は、SEDA および仮想マシンコンポーネントの動作とオプションを可能な限り模倣することを目的として実装されています。それらとの主な違いは次のとおりです。

  • 使用されるバッファーのサイズは常に制限されています (デフォルトでは 1024 エクスチェンジ)。
  • バッファーは常にバウンドしているため、Disruptor のデフォルトの動作は、例外を出力する代わりに、バッファーがいっぱいの間ブロックすることです。このデフォルトの動作は、コンポーネントで設定できます (オプションを参照)。
  • Disruptor エンドポイントは BrowsableEndpoint インターフェイスを実装しません。そのため、現在 Disruptor にあるエクスチェンジは取得できず、エクスチェンジの量のみが取得されます。
  • Disruptor は、そのコンシューマー (マルチキャストまたはその他) を静的に設定する必要があります。その場でコンシューマーを追加または削除するには、Disruptor で保留中のすべてのエクスチェンジを完全にフラッシュする必要があります。
  • 再設定の結果: Disruptor 経由で送信されたデータは直接処理され、少なくとも 1 つのコンシューマーが存在する場合はなくなります。遅れて参加したユーザーは、参加した後に公開された新しいエクスチェンジのみを取得します。
  • pollTimeout オプションは Disruptor コンポーネントではサポートされていません。
  • プロデューサーが完全な 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: および interruptor-vm: コンポーネントの両方で有効です。

Disruptor コンポーネントは、以下に示す 8 個のオプションをサポートしています。

名前説明デフォルトタイプ

defaultConcurrent Consumers (consumer)

同時コンシューマーのデフォルト数を設定するには

1

int

defaultMultiple Consumers (consumer)

複数のコンシューマーのデフォルト値を設定するには

false

boolean

defaultProducerType (producer)

DisruptorProducerType のデフォルト値を設定するにはデフォルト値は Multi です。

Multi

DisruptorProducerType

defaultWaitStrategy (consumer)

DisruptorWaitStrategy のデフォルト値を設定するにはデフォルト値は Blocking です。

Blocking

DisruptorWaitStrategy

defaultBlockWhenFull (producer)

フル時のブロックのデフォルト値を設定するにはデフォルト値は true です。

true

boolean

queueSize (Common)

非推奨 リングバッファーサイズを設定する場合

 

int

bufferSize (common)

リングバッファーサイズを設定する場合

1024

int

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

Disruptor エンドポイントは、URI 構文を使用して設定されます。

disruptor:name

パスおよびクエリーパラメーターを使用します。

84.2.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

name

必須 キューの名前

 

String

84.2.2. クエリーパラメーター (12 パラメーター)

名前説明デフォルトタイプ

size (common)

Disruptors リングバッファーの最大容量は、実質的に 2 の累乗に増加します。注意: このオプションを使用する場合は、サイズを決定するキュー名で作成される最初のエンドポイントに注意してください。すべてのエンドポイントが同じサイズを使用するようにするには、すべてのエンドポイント、または作成される最初のエンドポイントでサイズオプションを設定します。

1024

int

bridgeErrorHandler (consumer)

コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

false

boolean

concurrentConsumers (consumer)

エクスチェンジを処理する同時スレッドの数。

1

int

multipleConsumers (consumer)

複数のコンシューマーを許可するかどうかを指定します。有効にすると、Publish-Subscribe メッセージングに Disruptor を使用できます。つまり、メッセージをキューに送信し、各コンシューマーにメッセージのコピーを受信させることができます。有効にすると、このオプションはすべてのコンシューマーエンドポイントで指定する必要があります。

false

boolean

waitStrategy (consumer)

コンシューマースレッドが新しいエクスチェンジの公開を待機するために使用するストラテジーを定義します。許可されるオプションは次のとおりです:Blocking、Sleeping、BusySpin、および Yielding。

Blocking

DisruptorWaitStrategy

exceptionHandler (consumer)

コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

 

ExceptionHandler

exchangePattern (consumer)

コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。

 

ExchangePattern

blockWhenFull (producer)

フル Disruptorにメッセージを送信するスレッドが、リングバッファーの容量がなくなるまでブロックするかどうか。デフォルトでは、呼び出しスレッドはブロックされ、メッセージが受け入れられるまで待機します。このオプションを無効にすると、キューがいっぱいであることを示す例外が出力されます。

false

boolean

producerType (producer)

Disruptor で許可されるプロデューサーを定義します。使用できるオプションは次のとおりです。Multi は複数のプロデューサーを許可し、Single は特定の最適化を有効にします。これは、1 つの並行プロデューサー (1 つのスレッド上または同期されている) がアクティブな場合にのみ許可されます。

Multi

DisruptorProducerType

timeout (producer)

プロデューサーが非同期タスクの完了の待機を停止するまでのタイムアウト (ミリ秒単位)。0 または負の値を使用して、タイムアウトを無効にすることができます。

30000

long

waitForTaskToComplete (producer)

続行する前に呼び出し元が非同期タスクの完了を待つかどうかを指定するオプション。次の 3 つのオプションがサポートされています: Always、Never、または IfReplyExpected。最初の 2 つの値は一目瞭然です。最後の値 IfReplyExpected は、メッセージが Request Reply ベースの場合にのみ待機します。

IfReplyExpected

WaitForTaskToComplete

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

84.3. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 18 のオプションをサポートします。

名前説明デフォルトタイプ

camel.component.disruptor-vm.buffer-size

リングバッファーサイズを設定する場合

1024

Integer

camel.component.disruptor-vm.default-block-when-full

フル時のブロックのデフォルト値を設定するにはデフォルト値は true です。

true

Boolean

camel.component.disruptor-vm.default-concurrent-consumers

同時コンシューマーのデフォルト数を設定するには

1

Integer

camel.component.disruptor-vm.default-multiple-consumers

複数のコンシューマーのデフォルト値を設定するには

false

Boolean

camel.component.disruptor-vm.default-producer-type

DisruptorProducerType のデフォルト値を設定するにはデフォルト値は Multi です。

 

DisruptorProducerType

camel.component.disruptor-vm.default-wait-strategy

DisruptorWaitStrategy のデフォルト値を設定するにはデフォルト値は Blocking です。

 

DisruptorWaitStrategy

camel.component.disruptor-vm.enabled

disruptor-vm コンポーネントを有効にする

true

Boolean

camel.component.disruptor-vm.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

camel.component.disruptor.buffer-size

リングバッファーサイズを設定する場合

1024

Integer

camel.component.disruptor.default-block-when-full

フル時のブロックのデフォルト値を設定するにはデフォルト値は true です。

true

Boolean

camel.component.disruptor.default-concurrent-consumers

同時コンシューマーのデフォルト数を設定するには

1

Integer

camel.component.disruptor.default-multiple-consumers

複数のコンシューマーのデフォルト値を設定するには

false

Boolean

camel.component.disruptor.default-producer-type

DisruptorProducerType のデフォルト値を設定するにはデフォルト値は Multi です。

 

DisruptorProducerType

camel.component.disruptor.default-wait-strategy

DisruptorWaitStrategy のデフォルト値を設定するにはデフォルト値は Blocking です。

 

DisruptorWaitStrategy

camel.component.disruptor.enabled

disruptor コンポーネントを有効にする

true

Boolean

camel.component.disruptor.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

camel.component.disruptor-vm.queue-size

リングバッファーサイズを設定する場合

 

Integer

camel.component.disruptor.queue-size

リングバッファーサイズを設定する場合

 

Integer

84.4. 待機戦略

待機戦略は、次のエクスチェンジが発行されるのを現在待機しているコンシューマースレッドによって実行される待機のタイプに影響します。次の戦略を選択できます。

名前説明アドバイス

Blocking

バリアで待機しているコンシューマーにロックと条件変数を使用するブロックストラテジー。

このストラテジーは、スループットと低レイテンシーが CPU リソースほど重要でない場合に使用できます。

スリープ状態

最初にスピンし、次に Thread.yield() を使用し、最終的にコンシューマーがバリアで待機している間に OS と JVM が許可する最小数のナノ秒を使用するスリープ戦略。

このストラテジーは、パフォーマンスと CPU リソースの間の適切な妥協点です。待機時間のスパイクは、静かな期間の後に発生する可能性があります。

BusySpin

バリアで待機しているコンシューマーにビジースピンループを使用するビジースピン戦略。

この戦略では、CPU リソースを使用して、遅延ジッターを引き起こす可能性のあるシステムコールを回避します。スレッドを特定の CPU コアにバインドできる場合に最適です。

Yielding

最初のスピン後にバリアで待機しているコンシューマーに Thread.yield() を使用する譲歩ストラテジー。

このストラテジーは、大幅なレイテンシースパイクを発生させることなく、パフォーマンスと CPU リソースの間の適切な妥協点です。

84.5. Request Reply (リクエストリプライ) の利用

Disruptor コンポーネントは、発信者が非同期ルートの完了を待機する Request 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 メッセージなので、レスポンスを待ちます。interruptor:input バッファーのコンシューマーが完了すると、レスポンスを元のメッセージレスポンスにコピーします。

84.6. 同時利用者

デフォルトでは、Disruptor エンドポイントは単一のコンシューマースレッドを使用しますが、コンシューマースレッドを同時に使用するように設定できます。したがって、スレッドプールの代わりに次を使用できます。

from("disruptor:stageName?concurrentConsumers=5").process(...)

2 つの違いについては、スレッドプールは負荷に応じて実行時に動的に増減できることに注意してください。一方、同時コンシューマーの数は常に固定されており、Disruptor によって内部的にサポートされているため、パフォーマンスが高くなります。

84.7. Thread pools

次のような方法でスレッドプールを Disruptor エンドポイントに追加することに注意してください。

from("disruptor:stageName").thread(5).process(...)

Disruptor と組み合わせて使用する通常の BlockingQueue を追加することで、Disruptor を使用することによって達成されるパフォーマンスの向上の一部を効果的に無効にすることができます。代わりに、concurrentConsumers オプションを使用して、Disruptor エンドポイントでメッセージを処理するスレッドの数を直接設定することをお勧めします。

84.8. 例

以下のルートでは、Disruptor を使用してこの非同期キューにリクエストを送信し、別のスレッドでさらに処理するためにファイアアンドフォーゲットメッセージを送信し、このスレッドで一定の応答を元の呼び出し元に返すことができるようにします。

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);

Hello World メッセージは、さらに処理するために別のスレッドの Disruptor から消費されます。これは単体テストからのものであるため、単体テストでアサーションを実行できる mock エンドポイントに送信されます。

84.9. multipleConsumers の使用

この例では、2 つのコンシューマーを定義し、Spring Bean として登録しました。

<!-- 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 エンドポイントで multipleConsumers=true を指定したので、これら 2 つ以上のコンシューマーに、一種の pub-sub スタイルメッセージングとしてメッセージの独自のコピーを受信させることができます。Bean は単体テストの一部であるため、メッセージをモックエンドポイントに送信するだけですが、@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.10. disruptor 情報の展開

必要に応じて、次の方法で JMX を使用せずにバッファーサイズなどの情報を取得できます。

DisruptorEndpoint disruptor = context.getEndpoint("disruptor:xxxx");
int size = disruptor.getBufferSize();

第85章 DNS コンポーネント

Camel バージョン 2.7 以降で利用可能

これは、DNSJava を使用して DNS クエリーを実行するための Camel の追加コンポーネントです。コンポーネントは、DNSJava の上の薄いレイヤーです。
このコンポーネントは、次の操作を提供します。

  • ip、IP でドメインを解決する
  • lookup、ドメインに関する情報を検索する
  • dig、DNS クエリーを実行する

情報:*SUN JVM が必要です* DNSJava ライブラリーは、SUN JVM で実行する必要があります。
Apache ServiceMix または Apache Karaf を使用する場合は、etc/jre.properties ファイルを調整して、エクスポートされた Java プラットフォームパッケージのリストに sun.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 個のパラメーター):

名前説明デフォルトタイプ

dnsType

必須 ルックアップのタイプ。

 

DnsType

85.2.2. クエリーパラメーター(1 個のパラメーター):

名前説明デフォルトタイプ

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

85.3. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 2 つのオプションをサポートします。

名前説明デフォルトタイプ

camel.component.dns.enabled

DNS コンポーネントを有効にする

true

Boolean

camel.component.dns.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

85.4. ヘッダー

ヘッダータイプ操作説明

dns.domain

String

ip

ドメイン名。必須。

dns.name

String

lookup

検索する名前。必須。

dns.type

 

lookup、dig

ルックアップのタイプ。org.xbill.dns.Type の値と一致する必要があります。オプション。

dns.class

 

lookup、dig

ルックアップの DNS クラス。org.xbill.dns.DClass の値と一致する必要があります。オプション。

dns.query

String

dig

クエリー自体。必須。

dns.server

String

dig

特にクエリー用のサーバー。何も指定されていない場合は、OS によって指定されたデフォルトのものが使用されます。オプション。

85.5. 例

85.5.1. IP ルックアップ

        <route id="IPCheck">
            <from uri="direct:start"/>
            <to uri="dns:ip"/>
        </route>

これにより、ドメインの IP が検索されます。たとえば、www.example.com は 192.0.32.10 に解決されます。
検索する IP アドレスは、キー "dns.domain" を含むヘッダーで指定する必要があります。

85.5.2. DNS ルックアップ

        <route id="IPCheck">
            <from uri="direct:start"/>
            <to uri="dns:lookup"/>
        </route>

これは、ドメインに関連付けられた一連の DNS レコードを返します。
検索する名前は、キー "dns.name" を使用してヘッダーに指定する必要があります。

85.5.3. DNS Dig

Dig は、DNS クエリーを実行する Unix コマンドラインユーティリティーです。

        <route id="IPCheck">
            <from uri="direct:start"/>
            <to uri="dns:dig"/>
        </route>

クエリーは、キー "dns.query" を使用してヘッダーに指定する必要があります。

85.6. DNS アクティベーションポリシー

DnsActivationPolicy を使用して、dns の状態に基づいてルートを動的に開始および停止できます。

異なるリージョンで実行されている同じコンポーネントのインスタンスがある場合、各リージョンでルートを設定して、dns がそのリージョンを指している場合にのみ有効化できます。

つまり、NYC にインスタンスがあり、SFO にインスタンスがあるとします。サービス CNAME service.example.com を nyc-service.example.com を指すように設定して、NYC インスタンスを起動し、SFO インスタンスを停止します。CNAME service.example.com を sfo-service.example.com を指すように変更すると、nyc インスタンスはそのルートを停止し、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" />
		<property name="stopRoutesOnException" value="false" />
	</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]

operation は、Docker で実行する特定のアクションです。

86.2. 一般的なオプション

Docker コンポーネントは、以下に示す 2 個のオプションをサポートします。

名前説明デフォルトタイプ

configuration (advanced)

共有 docker 設定を使用するには

 

DockerConfiguration

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

Docker エンドポイントは、URI 構文を使用して設定されます。

docker:operation

パスおよびクエリーパラメーターを使用します。

86.2.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

operation

必須 使用する操作

 

Docker 操作

86.2.2. クエリーパラメーター (20 パラメーター)

名前説明デフォルトタイプ

email (Common)

ユーザーに関連付けられたメールアドレス。

 

String

host (Common)

必要な Docker ホスト

localhost

String

port (Common)

必要な Docker ポート

2375

Integer

requestTimeout (Common)

レスポンスのリクエストタイムアウト (秒単位)

 

Integer

bridgeErrorHandler (consumer)

コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

false

boolean

exceptionHandler (consumer)

コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

 

ExceptionHandler

exchangePattern (consumer)

コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。

 

ExchangePattern

cmdExecFactory (advanced)

使用する DockerCmdExecFactory 実装の完全修飾クラス名

com.github.dockerjava.netty.NettyDockerCmdExecFactory

String

followRedirectFilter (advanced)

リダイレクトフィルターに従うかどうか

false

boolean

loggingFilter (advanced)

ロギングフィルターを使用するかどうか

false

boolean

maxPerRouteConnections (advanced)

最大ルート接続

100

Integer

maxTotalConnections (advanced)

最大合計接続数

100

Integer

serverAddress (advanced)

docker レジストリーのサーバーアドレス。

https://index.docker.io/v1/

String

socket (advanced)

ソケット接続モード

true

boolean

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

certPath (security)

SSL 証明書チェーンを含むロケーション

 

String

password (security)

認証に使用するパスワード

 

String

secure (security)

HTTPS 通信を利用する

false

boolean

tlsVerify (security)

TLS を確認する

false

boolean

username (security)

認証するユーザー名

 

String

86.3. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 20 のオプションをサポートします。

名前説明デフォルトタイプ

camel.component.docker.configuration.cert-path

SSL 証明書チェーンを含むロケーション

 

String

camel.component.docker.configuration.cmd-exec-factory

使用する DockerCmdExecFactory 実装の完全修飾クラス名

com.github.dockerjava.netty.NettyDockerCmdExecFactory

String

camel.component.docker.configuration.email

ユーザーに関連付けられたメールアドレス。

 

String

camel.component.docker.configuration.follow-redirect-filter

リダイレクトフィルターに従うかどうか

false

Boolean

camel.component.docker.configuration.host

Docker host

localhost

String

camel.component.docker.configuration.logging-filter

ロギングフィルターを使用するかどうか

false

Boolean

camel.component.docker.configuration.max-per-route-connections

最大ルート接続

100

Integer

camel.component.docker.configuration.max-total-connections

最大合計接続数

100

Integer

camel.component.docker.configuration.operation

どの操作を使用するか

 

Docker 操作

camel.component.docker.configuration.parameters

キーと値のペアとしての追加の設定パラメーター

 

Map

camel.component.docker.configuration.password

認証に使用するパスワード

 

String

camel.component.docker.configuration.port

Docker ポート

2375

Integer

camel.component.docker.configuration.request-timeout

レスポンスのリクエストタイムアウト (秒単位)

 

Integer

camel.component.docker.configuration.secure

HTTPS 通信を利用する

false

Boolean

camel.component.docker.configuration.server-address

docker レジストリーのサーバーアドレス。

https://index.docker.io/v1/

String

camel.component.docker.configuration.socket

ソケット接続モード

true

Boolean

camel.component.docker.configuration.tls-verify

TLS を確認する

false

Boolean

camel.component.docker.configuration.username

認証するユーザー名

 

String

camel.component.docker.enabled

Docker コンポーネントを有効にする

true

Boolean

camel.component.docker.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

86.4. ヘッダーストラテジー

すべての URI オプションは、ヘッダープロパティーとして渡すことができます。メッセージヘッダーにある値は、URI パラメーターよりも優先されます。ヘッダープロパティーは、以下に示すように、CamelDocker で始まる URI オプションの形式を取ります

URI オプションヘッダープロパティー

containerId

CamelDockerContainerId

86.5. 例

次の例では、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.6. 依存関係

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 Bean 間をマッピングする機能を提供します。 Camel は、タイプコンバーターとして Dozer マッピングをトリガーする機能もサポートしています。 Dozer エンドポイントと Dozer コンバーターの使用の主な違いは次のとおりです。

  • エンドポイントごとに Dozer マッピング設定を管理する機能と、コンバーターレジストリーを介したグローバル設定を管理する機能。
  • Dozer エンドポイントは、Camel データ形式を使用して入出力データをマーシャリング/アンマーシャリングするように設定して、単一の any-to-any 変換エンドポイントをサポートできます。
  • 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 個のパラメーター):

名前説明デフォルトタイプ

name

必須 人が読める形式のマッピング名。

 

String

87.2.2. クエリーパラメーター (7 個のパラメーター):

名前説明デフォルトタイプ

mappingConfiguration (producer)

Dozer マッピングの設定に使用する必要がある、Camel レジストリー内の DozerBeanMapperConfiguration Bean の名前。これは、Dozer の設定方法をきめ細かく制御するために使用できる mappingFile オプションの代替です。値に # 接頭辞を使用して、Bean が Camel レジストリーにあることを示すことを忘れないでください (例: #myDozerConfig)。

 

DozerBeanMapper 設定

mappingFile (producer)

Dozer 設定ファイルのロケーション。デフォルトでは、ファイルはクラスパスからロードされますが、file:、classpath:、または http: を使用して、特定のロケーションから設定をロードできます。

dozerBeanMapping.xml

String

marshalId (producer)

マッピング出力を非 Java タイプにマーシャリングするために使用する Camel コンテキスト内で定義された dataFormat の ID。

 

String

sourceModel (producer)

マッピングで使用されるソースタイプの完全修飾クラス名。指定されている場合、マッピングへの入力は Dozer でマッピングされる前に指定された型に変換されます。

 

String

targetModel (producer)

必須 マッピングで使用されるターゲットタイプの完全修飾クラス名。

 

String

unmarshalId (producer)

Java 以外の型からのマッピング入力をアンマーシャリングするために使用する Camel コンテキスト内で定義された dataFormat の ID。

 

String

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

87.3. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 2 つのオプションをサポートします。

名前説明デフォルトタイプ

camel.component.dozer.enabled

dozer コンポーネントを有効にする

true

Boolean

camel.component.dozer.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

87.4. Dozer でのデータ形式の使用

Dozer は、Java 以外のソースとマッピングのターゲットをサポートしていないため、たとえば、XML ドキュメントを単独で Java オブジェクトにマッピングすることはできません。 幸いなことに、Camel は Java と データフォーマット を使用したさまざまなフォーマットとの間のマーシャリングを幅広くサポートしています。 Dozer コンポーネントは、このサポートを利用して、入力および出力データを Dozer 経由で処理する前にデータ形式で渡す必要があることを指定できるようにします。 これは、Dozer への呼び出しの外でいつでも自分で行うことができますが、Dozer コンポーネントで直接サポートすることで、単一のエンドポイントを使用して Camel 内でエニーツーエニー変換を設定できます。

例として、Dozer コンポーネントを使用して、XML データ構造と JSON データ構造の間をマッピングしたいとします。 Camel コンテキストで次のデータ形式が定義されているとします。

<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.5. Dozer の設定

すべての Dozer エンドポイントには、ソースオブジェクトとターゲットオブジェクト間のマッピングを定義する Dozer マッピング設定ファイルが必要です。 エンドポイントで mappingFile または mappingConfiguration オプションが指定されていない場合、コンポーネントはデフォルトで META-INF/dozerBeanMapping.xml のロケーションになります。 単一のエンドポイントに複数のマッピング設定ファイルを提供するか、追加の設定オプション (イベントリスナー、カスタムコンバーターなど) を指定する必要がある場合は、org.apache.camel.converter.dozer.DozerBeanMapperConfiguration のインスタンスを使用できます。

<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.6. 拡張機能のマッピング

Dozer コンポーネントは、カスタムコンバーターとして Dozer マッピングフレームワークに多数の拡張機能を実装します。 これらのコンバーターは、Dozer 自体によって直接サポートされていないマッピング機能を実装します。

87.6.1. 変数のマッピング

変数マッピングを使用すると、ソースフィールドの値を使用する代わりに、Dozer 設定内の変数定義の値をターゲットフィールドにマッピングできます。 これは、ターゲットフィールドにリテラル値を割り当てることができる他のマッピングフレームワークでの定数マッピングと同等です。 変数マッピングを使用するには、マッピング設定内で変数を定義し、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.6.2. カスタムマッピング

カスタムマッピングを使用すると、ソースフィールドをターゲットフィールドにマップする方法について独自のロジックを定義できます。 これらは Dozer のカスタマーコンバーターと機能が似ていますが、次の 2 つの顕著な違いがあります。

  • カスタムマッピングを使用して、1 つのクラスに複数のコンバーターメソッドを含めることができます。
  • カスタムマッピングを使用して 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.6.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章 Drill コンポーネント

Camel バージョン 2.19 以降で利用可能

drill: コンポーネントを使用する と、Apache Drill Cluster にクエリーを実行できます

Drill は、ビッグデータ探索用の Apache オープンソース SQL クエリーエンジンです。Drill は、業界標準のクエリー言語である 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]

URI には、?option=value&option=value&…​ の形式でクエリーオプションを追加できます。

88.2. Drill プロデューサー

プロデューサーは CamelDrillQuery ヘッダーを使用してクエリーを実行し、結果をボディーに入れます。

88.3. オプション

Drill コンポーネントにはオプションがありません。

Drill エンドポイントは、URI 構文を使用して設定されます。

drill:host

パスおよびクエリーパラメーターを使用します。

88.3.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

host

必須 ZooKeeper ホスト名または IP アドレス。ホスト名または IP アドレスの代わりに local を使用して、ローカルの Drillbit に接続します

 

String

88.3.2. クエリーパラメーター (5 つのパラメーター):

名前説明デフォルトタイプ

clusterId (producer)

クラスター ID https://drill.apache.org/docs/using-the-jdbc-driver/#determining-the-cluster-id

 

String

directory (producer)

ZooKeeper のドリルディレクトリー

 

String

mode (producer)

接続モード: zk: Zookeeper drillbit: Drillbit 直接接続 https://drill.apache.org/docs/using-the-jdbc-driver/

ZK

DrillConnectionMode

port (producer)

ZooKeeper ポート番号

 

Integer

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

88.4. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 2 つのオプションをサポートします。

名前説明デフォルトタイプ

camel.component.drill.enabled

ドリルコンポーネントを有効にする

true

Boolean

camel.component.drill.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

88.5. 関連項目

  • Configuring Camel (Camel の設定)
  • コンポーネント
  • エンドポイント
  • スタートガイド

第89章 Dropbox コンポーネント

Camel バージョン 2.14 以降で利用可能

dropbox: コンポーネントを使用すると、Dropbox リモートフォルダーをメッセージのプロデューサーまたはコンシューマーとして扱うことができます。Dropbox Java Core API (このコンポーネントのリファレンスバージョンは 1.7.x) を使用すると、この camel コンポーネントには次の機能があります。

  • コンシューマーとして、ファイルをダウンロードし、クエリーでファイルを検索します
  • プロデューサーとして、ファイルのダウンロード、リモートディレクトリー間でのファイルの移動、ファイル/ディレクトリーの削除、ファイルのアップロード、およびクエリーによるファイルの検索

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]

operation は、Dropbox リモートフォルダーで実行する特定のアクション (通常は CRUD アクション) です。

89.2. 操作

操作説明

del

Dropbox 上のファイルまたはディレクトリーを削除します

get

Dropbox からファイルをダウンロードする

move

Dropbox のフォルダーからファイルを移動する

put

Dropbox にファイルをアップロードする

search

文字列クエリーに基づいて Dropbox のファイルを検索する

操作 には追加のオプションが必要です。特定の操作には必須のオプションもあります。

89.3. オプション

Dropbox API を使用するには、accessTokenclientIdentifier を取得する必要があります。
それらを取得する方法を説明している Dropbox のドキュメント を参照できます。  

Dropbox コンポーネントにはオプションがありません。

Dropbox エンドポイントは、URI 構文を使用して設定されます。

dropbox:operation

パスおよびクエリーパラメーターを使用します。

89.3.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

operation

必須 Dropbox リモートフォルダーで実行する特定のアクション (通常は CRUD アクション)。

 

Dropbox の操作

89.3.2. クエリーパラメーター (12 パラメーター)

名前説明デフォルトタイプ

accessToken (common)

必須 特定の Dropbox ユーザーに対して API リクエストを行うためのアクセストークン

 

String

client (common)

既存の DbxClient インスタンスを DropBox クライアントとして使用する場合。

 

DbxClientV2

clientIdentifier (common)

API リクエストを行うために登録されたアプリケーションの名前

 

String

localPath (common)

ローカルファイルシステムから Dropbox にアップロードするオプションのフォルダーまたはファイル。このオプションが設定されていない場合、メッセージボディーがアップロードするコンテンツとして使用されます。

 

String

newRemotePath (common)

宛先ファイルまたはフォルダー

 

String

query (common)

検索するサブストリングのスペース区切りのリスト。ファイルは、すべての部分文字列が含まれている場合にのみ一致します。このオプションが設定されていない場合、すべてのファイルが一致します。

 

String

remotePath (common)

移動する元のファイルまたはフォルダー

 

String

uploadMode (common)

アップロードするモード。同じ名前のファイルが dropbox にすでに存在する場合、新しいファイルを追加する場合は名前が変更されます。dropbox に同じ名前のファイルがすでに存在する場合、これは上書きされます。

 

DropboxUploadMode

bridgeErrorHandler (consumer)

コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

false

boolean

exceptionHandler (consumer)

コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

 

ExceptionHandler

exchangePattern (consumer)

コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。

 

ExchangePattern

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

89.4. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 2 つのオプションをサポートします。

名前説明デフォルトタイプ

camel.component.dropbox.enabled

Dropbox コンポーネントを有効にする

true

Boolean

camel.component.dropbox.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

89.5. Del 操作

Dropbox 上のファイルを削除します。

Camel プロデューサーとしてのみ機能します。

以下に、この操作のオプションを示します。

プロパティー必須説明

remotePath

true

Dropbox で削除するフォルダーまたはファイル

89.5.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.5.2. 結果メッセージのヘッダー

メッセージの結果には、次のヘッダーが設定されます。

プロパティー

DELETED_PATH

dropbox で削除されたパスの名前

89.5.3. 結果メッセージボディー

メッセージボディーの結果には、次のオブジェクトが設定されます。

オブジェクトタイプ説明

String

dropbox で削除されたパスの名前

89.6. Get (ダウンロード) 操作

Dropbox からファイルをダウンロードします。

Camel プロデューサーまたは Camel コンシューマーとして機能します。

以下に、この操作のオプションを示します。

プロパティー必須説明

remotePath

true

Dropbox からダウンロードするフォルダーまたはファイル

89.6.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.6.2. 結果メッセージのヘッダー

メッセージの結果には、次のヘッダーが設定されます。

プロパティー

DOWNLOADED_FILE

単一ファイルのダウンロードの場合、ダウンロードされたリモートファイルのパス

DOWNLOADED_FILES

複数のファイルをダウンロードする場合、ダウンロードされたリモートファイルのパス

89.6.3. 結果メッセージボディー

メッセージボディーの結果には、次のオブジェクトが設定されます。

オブジェクトタイプ説明

ByteArrayOutputStream

単一ファイルのダウンロードの場合、ダウンロードされたファイルを表すストリーム

Map<String, ByteArrayOutputStream>

複数のファイルをダウンロードする場合は、ダウンロードされたリモートファイルのパスをキーとして、ダウンロードされたファイルを表すストリームを値として持つマップ

89.7. Move 操作

Dropbox 上のファイルを 1 つのフォルダー間で別のフォルダーに移動します。

Camel プロデューサーとしてのみ機能します。

以下に、この操作のオプションを示します。

プロパティー必須説明

remotePath

true

移動する元のファイルまたはフォルダー

newRemotePath

true

宛先ファイルまたはフォルダー

89.7.1. サンプル

from("direct:start")
  .to("dropbox://move?accessToken=XXX&clientIdentifier=XXX&remotePath=/root/folder1&newRemotePath=/root/folder2")
  .to("mock:result");

89.7.2. 結果メッセージのヘッダー

メッセージの結果には、次のヘッダーが設定されます。

プロパティー

MOVED_PATH

ドロップボックスに移動したパスの名前

89.7.3. 結果メッセージボディー

メッセージボディーの結果には、次のオブジェクトが設定されます。

オブジェクトタイプ説明

String

ドロップボックスに移動したパスの名前

89.8. Put (アップロード) 操作

Dropbox にファイルをアップロードします。

キャメルプロデューサーとして活動。

以下に、この操作のオプションを示します。

プロパティー必須説明

uploadMode

true

add または force このオプションは、ドロップボックスにファイルを保存する方法を指定します。追加の場合、同じ名前のファイルがドロップボックスにすでに存在する場合、新しいファイルの名前が変更されます。強制の場合、ドロップボックスに同名のファイルがすでに存在する場合、上書きされます。

localPath

false

ローカルファイルシステムから Dropbox にアップロードするフォルダーまたはファイル。このオプションが設定されている場合、Camel メッセージ本文のコンテンツを含む単一のファイルとしてアップロードするよりも優先されます (メッセージ本文はバイト配列に変換されます)。

remotePath

false

Dropbox 上のフォルダーの宛先。プロパティーが設定されていない場合、コンポーネントはローカルパスと同じリモートパスにファイルをアップロードします。Windows を使用する場合、または絶対 localPath を使用しない場合、次のような例外が発生する可能性があります。

Caused by: java.lang.IllegalArgumentException: 'path': bad path: must start with "/": "C:/My/File"
OR
Caused by: java.lang.IllegalArgumentException: 'path': bad path: must start with "/": "MyFile"

89.8.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_FILE_NAME または Exchange.FILE_NAME に指定できます。ヘッダーが指定されていない場合、メッセージ ID (uuid) がファイル名として使用されます。

89.8.2. 結果メッセージのヘッダー

メッセージの結果には、次のヘッダーが設定されます。

プロパティー

UPLOADED_FILE

単一ファイルのアップロードの場合、アップロードされたリモートパスのパス

UPLOADED_FILES

複数のファイルをアップロードする場合は、アップロードされたリモートパスを含む文字列

89.8.3. 結果メッセージボディー

メッセージボディーの結果には、次のオブジェクトが設定されます。

オブジェクトタイプ説明

String

単一ファイルのアップロードの場合、アップロード操作の結果、OK または KO

Map<String, DropboxResultCode>

複数のファイルをアップロードする場合は、アップロードされたリモートファイルのパスをキーとして、アップロード操作の結果を値として持つマップ、OK または KO

89.9. 検索操作

サブディレクトリーを含むリモート Dropbox フォルダー内を検索します。

Camel プロデューサーおよび Camel コンシューマーとして機能します。

以下に、この操作のオプションを示します。

プロパティー必須説明

remotePath

true

検索する Dropbox のフォルダー。

query

true

検索するサブストリングのスペース区切りのリスト。ファイルは、すべての部分文字列が含まれている場合にのみ一致します。このオプションが設定されていない場合、すべてのファイルが一致します。クエリーは、エンドポイント設定で、または Camel メッセージの CamelDropboxQuery ヘッダーとして提供する必要があります。

89.9.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.9.2. 結果メッセージのヘッダー

メッセージの結果には、次のヘッダーが設定されます。

プロパティー

FOUNDED_FILES

作成されたファイルパスのリスト

89.9.3. 結果メッセージボディー

メッセージボディーの結果には、次のオブジェクトが設定されます。

オブジェクトタイプ説明

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]

次の形式でクエリーオプションを URI に追加できます: ?option=value&option=#beanRef&…

90.2. オプション

Ehcache コンポーネントは、以下に示す 7個のオプションをサポートしています。

名前説明デフォルトタイプ

configuration (advanced)

グローバルコンポーネント設定を設定します

 

EhcacheConfiguration

cacheManager (common)

キャッシュマネージャー

 

CacheManager

cacheManager Configuration (common)

キャッシュマネージャーの設定

 

設定

cacheConfiguration (common)

キャッシュの作成に使用されるデフォルトのキャッシュ設定。

 

CacheConfiguration

cachesConfigurations (common)

キャッシュの作成に使用されるキャッシュ設定のマップ。

 

Map

cacheConfigurationUri (common)

Ehcache XML 設定ファイルのロケーションを指す URI

 

String

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

Ehcache エンドポイントは、URI 構文を使用して設定されます。

ehcache:cacheName

パスおよびクエリーパラメーターを使用します。

90.2.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

cacheName

必須 キャッシュ名

 

String

90.2.2. クエリーパラメーター (17 パラメーター)

名前説明デフォルトタイプ

cacheManager (common)

キャッシュマネージャー

 

CacheManager

cacheManagerConfiguration (common)

キャッシュマネージャーの設定

 

設定

configurationUri (common)

Ehcache XML 設定ファイルのロケーションを指す URI

 

String

createCacheIfNotExist (common)

キャッシュが存在する場合、または事前設定できない場合にキャッシュを作成する必要があるかどうかを設定します。

true

boolean

bridgeErrorHandler (consumer)

コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

false

boolean

eventFiring (consumer)

配信モードの設定 (同期、非同期)

ASYNCHRONOUS

EventFiring

eventOrdering (consumer)

配信モードを設定する (順序あり、順序なし)

ORDERED

EventOrdering

eventTypes (consumer)

リッスンするイベントのタイプを設定する

EVICTED,EXPIRED,REMOVED,CREATED,UPDATED

Set

exceptionHandler (consumer)

コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

 

ExceptionHandler

exchangePattern (consumer)

コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。

 

ExchangePattern

action (producer)

デフォルトのキャッシュアクションを設定します。メッセージヘッダーにアクションが設定されている場合は、ヘッダーからの操作が優先されます。

 

String

key (producer)

デフォルトのアクションキーを設定します。メッセージヘッダーにキーが設定されている場合は、ヘッダーのキーが優先されます。

 

Object

configuration (advanced)

キャッシュの作成に使用されるデフォルトのキャッシュ設定。

 

CacheConfiguration

configurations (advanced)

キャッシュの作成に使用されるキャッシュ設定のマップ。

 

Map

keyType (advanced)

キャッシュキータイプ、デフォルトの java.lang.Object

java.lang.Object

String

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

valueType (advanced)

キャッシュ値の型、デフォルトは java.lang.Object

java.lang.Object

String

90.3. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 25 のオプションをサポートします。

名前説明デフォルトタイプ

camel.component.ehcache.cache-configuration

キャッシュの作成に使用されるデフォルトのキャッシュ設定。オプションは org.ehcache.config.CacheConfiguration<?,?> タイプです。

 

String

camel.component.ehcache.cache-configuration-uri

Ehcache XML 設定ファイルのロケーションを指す URI

 

String

camel.component.ehcache.cache-manager

キャッシュマネージャー。オプションは org.ehcache.CacheManager タイプです。

 

String

camel.component.ehcache.cache-manager-configuration

キャッシュマネージャーの設定。オプションは org.ehcache.config.Configuration タイプです。

 

String

camel.component.ehcache.caches-configurations

キャッシュの作成に使用されるキャッシュ設定のマップ。

 

Map

camel.component.ehcache.configuration.action

デフォルトのキャッシュアクションを設定します。メッセージヘッダーにアクションが設定されている場合は、ヘッダーからの操作が優先されます。

 

String

camel.component.ehcache.configuration.cache-manager

キャッシュマネージャー

 

CacheManager

camel.component.ehcache.configuration.cache-manager-configuration

キャッシュマネージャーの設定

 

設定

camel.component.ehcache.configuration.configuration

キャッシュの作成に使用されるデフォルトのキャッシュ設定。

 

CacheConfiguration

camel.component.ehcache.configuration.configuration-uri

Ehcache XML 設定ファイルのロケーションを指す URI

 

String

camel.component.ehcache.configuration.configurations

キャッシュの作成に使用されるキャッシュ設定のマップ。

 

Map

camel.component.ehcache.configuration.create-cache-if-not-exist

キャッシュが存在する場合、または事前設定できない場合にキャッシュを作成する必要があるかどうかを設定します。

true

Boolean

camel.component.ehcache.configuration.event-firing

配信モードの設定 (同期、非同期)

 

EventFiring

camel.component.ehcache.configuration.event-ordering

配信モードを設定する (順序あり、順序なし)

 

EventOrdering

camel.component.ehcache.configuration.event-types

リッスンするイベントのタイプを設定する

 

Set

camel.component.ehcache.configuration.key

デフォルトのアクションキーを設定します。メッセージヘッダーにキーが設定されている場合は、ヘッダーのキーが優先されます。

 

Object

camel.component.ehcache.configuration.key-type

キャッシュキータイプ、デフォルトの java.lang.Object

java.lang.Object

String

camel.component.ehcache.configuration.value-type

キャッシュ値の型、デフォルトは java.lang.Object

java.lang.Object

String

camel.component.ehcache.customizer.cache-configuration.enabled

キャッシュ設定カスタマイザを有効または無効にします。

true

Boolean

camel.component.ehcache.customizer.cache-configuration.mode

キャッシュ設定が追加されたかどうか、またはコンポーネントですでに設定されているものを置き換える必要があるかどうかを設定します。

 

CacheConfiguration CustomizerConfiguration$ Mode

camel.component.ehcache.customizer.cache-manager.enabled

cache-manager カスタマイザーを有効または無効にします。

true

Boolean

camel.component.ehcache.customizer.cache-manager.override

コンポーネントに最終的に設定されたキャッシュマネージャーがカスタマイザーによってオーバーライドされるかどうかを設定します。

false

Boolean

camel.component.ehcache.enabled

ehcache コンポーネントを有効にする

true

Boolean

camel.component.ehcache.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

camel.component.ehcache.configuration.config-uri

Ehcache XML 設定ファイルのロケーションを指す URI。@deprecated。代わりに {@link #setConfigurationUri (String)} を使用する。

 

String

90.3.1. Message Headers Camel 

 

ヘッダータイプ説明

CamelEhcacheAction

String

キャッシュに対して実行される操作。有効なオプションは次のとおりです。

* CLEAR * PUT * PUT_ALL * PUT_IF_ABSENT * GET * GET_ALL * REMOVE * REMOVE_ALL * REPLACE

CamelEhcacheActionHasResult

Boolean

アクションに結果がある場合は true に設定します

CamelEhcacheActionSucceeded

Boolean

アクションが成功した場合は true に設定します

CamelEhcacheKey

Object

アクションに使用されるキャッシュキー

CamelEhcacheKeys

Set<Object>

以下で使用されるキーのリスト

* PUT_ALL * GET_ALL * REMOVE_ALL

CamelEhcacheValue

Object

キャッシュに入れる値または操作の結果

CamelEhcacheOldValue

Object

PUT_IF_ABSENT などのアクションのキーに関連付けられた古い値、または REPLACE などのアクションの比較に使用されるオブジェクト

CamelEhcacheEventType

EventType

受け取ったイベントの種類

90.4. 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.5. 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: コンポーネント BIND EJB から Camel へのメッセージエクスチェンジ。

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 は、アプリケーションサーバー JNDI レジストリーで EJB をルックアップするために使用される任意の文字列です。

91.2. オプション

EJB コンポーネントは、以下に示す 4 個のオプションをサポートしています。

名前説明デフォルトタイプ

context (producer)

EJB のルックアップに使用する Context

 

コンテキスト

properties (producer)

コンテキストが設定されていない場合に javax.naming.Context を作成するためのプロパティー。

 

Properties

cache (advanced)

有効にすると、Camel は最初のレジストリールックアップの結果をキャッシュします。レジストリー内の Bean がシングルトンスコープとして定義されている場合、キャッシュを有効にできます。

 

Boolean

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

EJB エンドポイントは、URI 構文を使用して設定されます。

ejb:beanName

パスおよびクエリーパラメーターを使用します。

91.2.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

beanName

必須: 呼び出す Bean の名前を設定します。

 

String

91.2.2. クエリーパラメーター (5 つのパラメーター):

名前説明デフォルトタイプ

method (producer)

Bean で呼び出すメソッドの名前を設定します。

 

String

cache (advanced)

有効にすると、Camel は最初のレジストリールックアップの結果をキャッシュします。レジストリー内の Bean がシングルトンスコープとして定義されている場合、キャッシュを有効にできます。

 

Boolean

multiParameterArray (advanced)

非推奨 メッセージボディーから渡されるパラメータをどのように扱うか。true はメッセージボディーがパラメータの配列であることを意味します。非推奨の注記: このオプションは Camel によって内部的に使用され、エンドユーザーが使用することを意図したものではありません。非推奨の注記: このオプションは Camel によって内部的に使用され、エンドユーザーが使用することを意図したものではありません。

false

boolean

parameters (advanced)

Bean の追加プロパティーの設定に使用します

 

Map

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

91.3. Bean バインディング

呼び出される Bean メソッドの選択方法 (method パラメーターで明示的に指定されていない場合) と、メッセージからパラメーター値が構築される方法は、Camel 内のさまざまな Bean 統合メカニズム全体で使用される Bean バインディングメカニズムによりすべて定義されます。

91.4. 例

次の例では、次のように定義された Greater EJB を使用します。

GreaterLocal.java

public interface GreaterLocal {

    String hello(String name);

    String bye(String name);

}

そして実装

GreaterImpl.java

@Stateless
public class GreaterImpl implements GreaterLocal {

    public String hello(String name) {
        return "Hello " + name;
    }

    public String bye(String name) {
        return "Bye " + name;
    }

}

91.4.1. Java DSL の使用

この例では、EJB で hello メソッドを呼び出します。この例は Apache OpenEJB を使用した単体テストに基づいているため、OpenEJB 設定を使用して EJB コンポーネントに JndiContext を設定する必要があります。

@Override
protected CamelContext createCamelContext() throws Exception {
    CamelContext answer = new DefaultCamelContext();

    // enlist EJB component using the JndiContext
    EjbComponent ejb = answer.getComponent("ejb", EjbComponent.class);
    ejb.setContext(createEjbContext());

    return answer;
}

private static Context createEjbContext() throws NamingException {
    // here we need to define our context factory to use OpenEJB for our testing
    Properties properties = new Properties();
    properties.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.LocalInitialContextFactory");

    return new InitialContext(properties);
}

これで、Camel ルートで EJB を使用する準備が整いました。

from("direct:start")
    // invoke the greeter EJB using the local interface and invoke the hello method
    .to("ejb:GreaterImplLocal?method=hello")
    .to("mock:result");

実際のアプリケーションサーバーで

実際のアプリケーションサーバーでは、ほとんどの場合、EJB コンポーネントに JndiContext をセットアップする必要はありません。これは、アプリケーションサーバーと同じ JVM にデフォルトの JndiContext を作成するためです。これにより、通常、JNDI レジストリーにアクセスして EJB をルックアップできます。ただし、リモート JVM などのアプリケーションサーバーにアクセスする必要がある場合は、事前にプロパティーを準備する必要があります。

91.4.2. Spring XML の使用

これは、代わりに Spring XML を使用した同じ例です。

これも単体テストに基づいているため、EJB コンポーネントをセットアップする必要があります。

<!-- setup Camel EJB component -->
<bean id="ejb" class="org.apache.camel.component.ejb.EjbComponent">
    <property name="properties" ref="jndiProperties"/>
</bean>

<!-- use OpenEJB context factory -->
<p:properties id="jndiProperties">
    <prop key="java.naming.factory.initial">org.apache.openejb.client.LocalInitialContextFactory</prop>
</p:properties>

Camel ルートで EJB を使用する準備が整う前に:

<camelContext xmlns="http://camel.apache.org/schema/spring">
    <route>
        <from uri="direct:start"/>
        <to uri="ejb:GreaterImplLocal?method=hello"/>
        <to uri="mock:result"/>
    </route>
</camelContext>

91.5. 関連項目

  • Configuring Camel (Camel の設定)
  • コンポーネント
  • エンドポイント
  • スタートガイド
  • Bean
  • Bean バインディング
  • Bean インテグレーション

第92章 Elasticsearch コンポーネント (非推奨)

Camel バージョン 2.11 以降で利用可能

ElasticSearch コンポーネントを使用すると、ElasticSearch サーバーとやり取りできます。

Maven ユーザーは、このコンポーネントの pom.xml に以下の依存関係を追加する必要があります。

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

92.1. URI 形式

elasticsearch://clusterName[?options]

92.2. エンドポイントオプション

Elasticsearch コンポーネントは、以下にリストされている 2 個のオプションをサポートしています。

名前説明デフォルトタイプ

client (advanced)

エンドポイントごとにクライアントを作成する代わりに、既存の設定済み Elasticsearch クライアントを使用するには。

 

クライアント

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

Elasticsearch エンドポイントは、URI 構文を使用して設定されます。

elasticsearch:clusterName

パスおよびクエリーパラメーターを使用します。

92.2.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

clusterName

必須 クラスターの名前、またはローカルモードに local を使用

 

String

92.2.2. クエリーパラメーター (11 パラメーター)

名前説明デフォルトタイプ

clientTransportSniff (producer)

クライアントがクラスターの残りをスニッフィングできるかどうか (デフォルトは true)。この設定は client.transport.sniff 設定にマップされます。

true

Boolean

consistencyLevel (producer)

INDEX および BULK 操作で使用する書き込み整合性レベル (ONE、QUORUM、ALL、または DEFAULT のいずれか)

DEFAULT

WriteConsistencyLevel

data (producer)

ノードにデータ (シャード) の割り当てを許可するかどうか。この設定は node.data 設定にマップされます。

 

Boolean

indexName (producer)

動作させるインデックスの名前。

 

String

indexType (producer)

作用するインデックスのタイプ

 

String

ip (producer)

使用する TransportClient リモートホスト IP

 

String

operation (producer)

実行する操作

 

String

pathHome (producer)

ElasticSearch 設定の path.home プロパティー。有効なパスを指定する必要があります。そうしないと、デフォルトの $user.home/.elasticsearch が使用されます。

${user.home}/.elasticsearch

String

port (producer)

使用する TransportClient リモートポート (デフォルトは 9300)

9300

int

transportAddresses (producer)

使用する ip:port 形式のリモートトランスポートアドレスを含むコンマ区切りのリスト。transportAddresses が代わりに考慮されるようにするには、ip オプションと port オプションを空白のままにする必要があります。

 

String

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

92.3. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 3 つのオプションをサポートします。

名前説明デフォルトタイプ

camel.component.elasticsearch.client

エンドポイントごとにクライアントを作成する代わりに、既存の設定済み Elasticsearch クライアントを使用するには。オプションは org.elasticsearch.client.Client タイプです。

 

String

camel.component.elasticsearch.enabled

Elasticsearch コンポーネントを有効にする

true

Boolean

camel.component.elasticsearch.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

92.4. ローカルテスト

ローカル (JVM/クラスローダー) の ElasticSearch サーバーに対して実行する場合は、URI の clusterName 値を local に設定するだけです。詳細については、クライアントガイド を参照してください。

92.5. メッセージ操作

現在、次の ElasticSearch 操作がサポートされています。操作のキーと次のいずれかに設定された値を使用して、エンドポイント URI オプションまたはエクスチェンジヘッダーを設定するだけです。一部の操作では、他のパラメーターまたはメッセージ本文を設定する必要もあります。

operationメッセージボディーdescription

INDEX

Map、String、byte、または XContentBuilder コンテンツをインデックスに登録する

コンテンツをインデックスに追加し、ボディーでコンテンツの indexId を返します。Camel 2.15 では、メッセージヘッダーにキー "indexId" を設定することで、indexId を設定できます。

GET_BY_ID

取得するコンテンツのインデックス ID

指定されたインデックスを取得し、本体で GetResult オブジェクトを返します

DELETE

削除するコンテンツのインデックス ID

指定された indexId を削除し、本体で DeleteResult オブジェクトを返します

BULK_INDEX

すでに受け入れられている任意のタイプの リスト または コレクション (XContentBuilder、Map、byte、String)

*Camel 2.14、* コンテンツをインデックスに追加し、ボディー内のインデックスに成功したドキュメントの ID のリストを返します

BULK

すでに受け入れられている任意のタイプの リスト または コレクション (XContentBuilder、Map、byte、String)

Camel 2.15: コンテンツをインデックスに追加し、本体で BulkResponse オブジェクトを返します

SEARCH

Map または SearchRequest オブジェクト

Camel 2.15: クエリー文字列のマップでコンテンツを検索します。

MULTIGET

MultigetRequest.Item オブジェクトのリスト

Camel 2.17: MultigetRequest で指定されたインデックス、タイプなどを取得し、本文で MultigetResponse オブジェクトを返します。

MULTISEARCH

SearchRequest オブジェクトのリスト

Camel 2.17: MultiSearchRequest で指定されたパラメーターを検索し、ボディーで MultiSearchResponse オブジェクトを返します。

EXISTS

ヘッダーとしてのインデックス名

Camel 2.17: 本体に Boolean オブジェクトを返します。

UPDATE

更新する Map、String、byte、または XContentBuilder コンテンツ

Camel 2.17: コンテンツをインデックスに更新し、本文でコンテンツの indexId を返します。

92.6. インデックスの例

以下は単純な INDEX の例です

from("direct:index")
.to("elasticsearch://local?operation=INDEX&indexName=twitter&indexType=tweet");
<route>
    <from uri="direct:index" />
    <to uri="elasticsearch://local?operation=INDEX&indexName=twitter&indexType=tweet"/>
</route>

クライアントは、Map を含む本文メッセージをルートに渡すだけで済みます。結果の本文には、作成された indexId が含まれます。

Map<String, String> map = new HashMap<String, String>();
map.put("content", "test");
String indexId = template.requestBody("direct:index", map, String.class);

92.7. 詳細については、これらのリソースを参照してください

ElasticSearch メインサイト

ElasticSearch Java API

92.8. 関連項目

  • Configuring Camel (Camel の設定)
  • コンポーネント
  • エンドポイント
  • スタートガイド

第93章 Elasticsearch5 コンポーネント (非推奨)

Camel バージョン 2.19 以降で利用可能

ElasticSearch コンポーネントを使用すると、ElasticSearch 5.x API と連携できます。

Maven ユーザーは、このコンポーネントの pom.xml に以下の依存関係を追加する必要があります。

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

93.1. URI 形式

elasticsearch5://clusterName[?options]

93.2. エンドポイントオプション

Elasticsearch5 コンポーネントは、以下にリストされている 2 個のオプションをサポートしています。

名前説明デフォルトタイプ

client (advanced)

エンドポイントごとにクライアントを作成する代わりに、既存の設定済み Elasticsearch クライアントを使用する場合。これにより、特定の設定でクライアントをカスタマイズできます。

 

TransportClient

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

Elasticsearch5 エンドポイントは、URI 構文を使用して設定されます。

elasticsearch5:clusterName

パスおよびクエリーパラメーターを使用します。

93.2.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

clusterName

必須 クラスターの名前

 

String

93.2.2. クエリーパラメーター (16 個のパラメーター):

名前説明デフォルトタイプ

clientTransportSniff (producer)

クライアントがクラスターの残りをスニッフィングできるかどうか。この設定は client.transport.sniff 設定にマップされます。

false

boolean

indexName (producer)

動作させるインデックスの名前。

 

String

indexType (producer)

作用するインデックスのタイプ

 

String

ip (producer)

使用する TransportClient リモートホスト IP

 

String

operation (producer)

実行する操作

 

ElasticsearchOperation

pingSchedule (producer)

クライアントがクラスターに ping を実行した時間 (単位)。

5s

String

pingTimeout (producer)

ノードから返ってくる ping レスポンスを待つ時間 (単位)。

5s

String

port (producer)

使用する TransportClient リモートポート (デフォルトは 9300)

9300

int

tcpCompress (producer)

すべてのノード間で圧縮 (LZF) が有効な場合は true。

false

boolean

tcpConnectTimeout (producer)

接続タイムアウトを待機する時間 (単位)。

30s

String

transportAddresses (producer)

使用する ip:port 形式のリモートトランスポートアドレスを含むコンマ区切りのリスト。transportAddresses が代わりに考慮されるようにするには、ip オプションと port オプションを空白のままにする必要があります。

 

String

waitForActiveShards (producer)

インデックスの作成は、シャードの書き込み整合性数が使用可能になるまで待機します

1

int

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

enableSSL (security)

SSL の有効化。クラスパスに XPack クライアント jar を要求します

false

boolean

password (authentication)

クラスターに対して認証するためのパスワード。クラスパスに XPack クライアント jar を要求します

 

String

user (authentication)

クラスターに対して認証するためのユーザー。クラスターにアクセスするには transport_client ロールが必要です。クラスパスに XPack クライアント jar を要求します

 

String

93.3. Spring Boot Auto-Configuration

コンポーネントは、以下に記載される 3 つのオプションをサポートします。

名前説明デフォルトタイプ

camel.component.elasticsearch5.client

エンドポイントごとにクライアントを作成する代わりに、既存の設定済み Elasticsearch クライアントを使用する場合。これにより、特定の設定でクライアントをカスタマイズできます。オプションは org.elasticsearch.client.transport.TransportClient タイプです。

 

String

camel.component.elasticsearch5.enabled

elasticsearch5 コンポーネントを有効にします

true

Boolean

camel.component.elasticsearch5.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

93.4. メッセージ操作

現在、次の ElasticSearch 操作がサポートされています。操作のキーと次のいずれかに設定された値を使用して、エンドポイント URI オプションまたはエクスチェンジヘッダーを設定するだけです。一部の操作では、他のパラメーターまたはメッセージ本文を設定する必要もあります。

operationメッセージボディーdescription

INDEX

Map、String、byte、または XContentBuilder コンテンツをインデックスに登録する

コンテンツをインデックスに追加し、本文でコンテンツの indexId を返します。メッセージヘッダーにキー "indexId" を設定することで、indexId を設定できます。

GET_BY_ID

取得するコンテンツのインデックス ID

指定されたインデックスを取得し、本体で GetResult オブジェクトを返します

DELETE

削除するコンテンツのインデックス名とタイプ

指定された indexName と indexType を削除し、ボディーで DeleteResponse オブジェクトを返します

DELETE_INDEX

削除するコンテンツのインデックス名

指定された indexName を削除し、本体で DeleteIndexResponse オブジェクトを返します

BULK_INDEX

すでに受け入れられている任意のタイプの リスト または コレクション (XContentBuilder、Map、byte、String)

コンテンツをインデックスに追加し、本文で正常にインデックス付けされたドキュメントの ID のリストを返します

BULK

すでに受け入れられている任意のタイプの リスト または コレクション (XContentBuilder、Map、byte、String)

コンテンツをインデックスに追加し、本文で BulkResponse オブジェクトを返します

SEARCH

マップ、文字列、または SearchRequest オブジェクト

クエリー文字列のマップでコンテンツを検索します

MULTIGET

MultigetRequest.Item オブジェクトのリスト

MultigetRequest で指定されたインデックス、タイプなどを取得し、ボディーで MultigetResponse オブジェクトを返します

MULTISEARCH

SearchRequest オブジェクトのリスト

MultiSearchRequest で指定されたパラメーターを検索し、ボディーで MultiSearchResponse オブジェクトを返します

EXISTS

ヘッダーとしてのインデックス名

インデックスが存在するかどうかを確認し、ボディーにブール値のフラグを返します

UPDATE

更新する Map、String、byte、または XContentBuilder コンテンツ

コンテンツをインデックスに更新し、本文でコンテンツの indexId を返します。

93.5. インデックスの例

以下は単純な INDEX の例です

from("direct:index")
.to("elasticsearch5://elasticsearch?operation=INDEX&indexName=twitter&indexType=tweet");
<route>
    <from uri="direct:index" />
    <to uri="elasticsearch5://elasticsearch?operation=INDEX&indexName=twitter&indexType=tweet"/>
</route>

クライアントは、Map を含む本文メッセージをルートに渡すだけで済みます。結果の本文には、作成された indexId が含まれます。

Map<String, String> map = new HashMap<String, String>();
map.put("content", "test");
String indexId = template.requestBody("direct:index", map, String.class);

93.6. 詳細については、これらのリソースを参照してください

Elastic メインサイト

ElasticSearch Java API

93.7. 関連項目

  • Configuring Camel (Camel の設定)
  • コンポーネント
  • エンドポイント
  • スタートガイド

第94章 Elastichsearch Rest コンポーネント

Camel バージョン 2.21 以降で利用可能

ElasticSearch コンポーネントを使用すると、REST クライアントライブラリーを使用して ElasticSearch 6.x API とやり取りできます。

Maven ユーザーは、このコンポーネントの pom.xml に以下の依存関係を追加する必要があります。

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

94.1. URI 形式

elasticsearch-rest://clusterName[?options]

94.2. エンドポイントオプション

Elastichsearch Rest コンポーネントは、以下にリストされている 12 個のオプションをサポートしています。

名前説明デフォルトタイプ

client (advanced)

エンドポイントごとにクライアントを作成する代わりに、既存の設定済み Elasticsearch クライアントを使用する場合。これにより、特定の設定でクライアントをカスタマイズできます。

 

RestClient

hostAddresses (advanced)

使用する ip:port 形式のリモートトランスポートアドレスを含むコンマ区切りのリスト。代わりに hostAddresses が考慮されるようにするには、ip オプションと port オプションを空白のままにする必要があります。

 

String

socketTimeout (advanced)

ソケットがタイムアウトする前に待機するミリ秒単位のタイムアウト。

30000

int

connectionTimeout (advanced)

接続がタイムアウトするまでのミリ秒単位の待機時間。

30000

int

ユーザー (security)

基本認証ユーザー

 

String

password (security)

認証用パスワード

 

String

enableSSL (security)

SSL の有効化

false

Boolean

maxRetryTimeout (advanced)

再試行までの時間 (ミリ秒)

30000

int

enableSniffer (advanced)

実行中の Elasticsearch クラスターからのノードの自動検出を有効にする

false

Boolean

snifferInterval (advanced)

通常のスニファを連続して実行する間隔 (ミリ秒単位)。sniffOnFailure が無効になっている場合、または連続するスニファ実行の間に失敗がない場合に受け入れられます

300000

int

sniffAfterFailureDelay (advanced)

失敗後にスケジュールされたスニファ実行の遅延 (ミリ秒単位)

60000

int

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

Elastichsearch Rest エンドポイントは、URI 構文を使用して設定されます。

elasticsearch-rest:clusterName

パスおよびクエリーパラメーターを使用します。

94.2.1. パスパラメーター (1 個のパラメーター):

名前説明デフォルトタイプ

clusterName

必須 クラスターの名前

 

String

94.2.2. クエリーパラメーター (11 パラメーター)

名前説明デフォルトタイプ

connectionTimeout (producer)

接続がタイムアウトするまでのミリ秒単位の待機時間。

30000

int

disconnect (producer)

プロデューサーの呼び出しが終了したら切断します

false

boolean

enableSSL (producer)

SSL の有効化

false

boolean

hostAddresses (producer)

必須 使用する ip:port 形式のリモートトランスポートアドレスを含むコンマ区切りのリスト。

 

String

indexName (producer)

動作させるインデックスの名前。

 

String

indexType (producer)

作用するインデックスのタイプ

 

String

maxRetryTimeout (producer)

再試行までの時間 (ミリ秒)

30000

int

operation (producer)

実行する操作

 

ElasticsearchOperation

socketTimeout (producer)

ソケットがタイムアウトする前に待機するミリ秒単位のタイムアウト。

30000

int

waitForActiveShards (producer)

インデックスの作成は、シャードの書き込み整合性数が使用可能になるまで待機します

1

int

synchronous (advanced)

同期処理を厳密に使用するか、Camel が非同期処理を使用できるかどうかを設定します (サポートされている場合)。

false

boolean

94.3. Spring Boot Auto-Configuration

このコンポーネントは、以下に示す 13 のオプションをサポートします。

名前説明デフォルトタイプ

camel.component.elasticsearch-rest.client

エンドポイントごとにクライアントを作成する代わりに、既存の設定済み Elasticsearch クライアントを使用する場合。これにより、特定の設定でクライアントをカスタマイズできます。オプションは org.elasticsearch.client.RestClient タイプです。

 

String

camel.component.elasticsearch-rest.connection-timeout

接続がタイムアウトするまでのミリ秒単位の待機時間。

30000

Integer

camel.component.elasticsearch-rest.enable-s-s-l

SSL の有効化

false

Boolean

camel.component.elasticsearch-rest.enable-sniffer

実行中の Elasticsearch クラスターからのノードの自動検出を有効にする

false

Boolean

camel.component.elasticsearch-rest.enabled

elasticsearch-rest コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

Boolean

camel.component.elasticsearch-rest.host-addresses

使用する ip:port 形式のリモートトランスポートアドレスを含むコンマ区切りのリスト。代わりに hostAddresses が考慮されるようにするには、ip オプションと port オプションを空白のままにする必要があります。

 

String

camel.component.elasticsearch-rest.max-retry-timeout

再試行までの時間 (ミリ秒)

30000

Integer

camel.component.elasticsearch-rest.password

認証用パスワード

 

String

camel.component.elasticsearch-rest.resolve-property-placeholders

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

Boolean

camel.component.elasticsearch-rest.sniff-after-failure-delay

失敗後にスケジュールされたスニファ実行の遅延 (ミリ秒単位)

60000

Integer

camel.component.elasticsearch-rest.sniffer-interval

通常のスニファを連続して実行する間隔 (ミリ秒単位)。sniffOnFailure が無効になっている場合、または連続するスニファ実行の間に失敗がない場合に受け入れられます

300000

Integer

camel.component.elasticsearch-rest.socket-timeout

ソケットがタイムアウトする前に待機するミリ秒単位のタイムアウト。

30000

Integer

camel.component.elasticsearch-rest.user

基本認証ユーザー

 

String

94.4. メッセージ操作

現在、次の ElasticSearch 操作がサポートされています。操作のキーと次のいずれかに設定された値を使用して、エンドポイント URI オプションまたはエクスチェンジヘッダーを設定するだけです。一部の操作では、他のパラメーターまたはメッセージ本文を設定する必要もあります。

operationメッセージボディーdescription

Index

MapStringbyteXContentBuilder または IndexRequest コンテンツをインデックスに登録する

コンテンツをインデックスに追加し、本文でコンテンツの indexId を返します。メッセージヘッダーにキー "indexId" を設定することで、indexId を設定できます。

GetById

取得するコンテンツの 文字列 または GetRequest インデックス ID

指定されたインデックスを取得し、本体で GetResult オブジェクトを返します

Delete

削除するコンテンツの 文字列 または DeleteRequest インデックス名とタイプ

指定された indexName と indexType を削除し、ボディーで DeleteResponse オブジェクトを返します

DeleteIndex

削除するインデックスの 文字列 または DeleteRequest インデックス名

指定された indexName を削除し、ボディーのステータスコードを返します。

BulkIndex

すでに受け入れられている任意のタイプの ListBulkRequest、または Collection (XContentBuilder、Map、byte、String)

コンテンツをインデックスに追加し、本文で正常にインデックス付けされたドキュメントの ID のリストを返します

バルク

すでに受け入れられている任意のタイプの ListBulkRequest、または Collection (XContentBuilder、Map、byte、String)

コンテンツをインデックスに追加し、本文で BulkItemResponse オブジェクトを返します

Search

MapString または SearchRequest

クエリー文字列のマップでコンテンツを検索します

MultiSearch

MultiSearchRequest

一度に複数の検索

Exists

ヘッダーとしてのインデックス名 (indexName)

インデックスが存在するかどうかを確認し、ボディーにブール値のフラグを返します

Update

更新する MapUpdateRequestStringbyte[] または XContentBuilder コンテンツ

コンテンツをインデックスに更新し、本文でコンテンツの indexId を返します。

Ping

なし

リモート Elasticsearch クラスターに ping を実行し、ping が成功した場合は true、それ以外の場合は false を返します。

Info

なし

Elasticsearch クラスターの情報を取得し、MainResponse クラスのインスタンスとして返します

94.5. コンポーネントを設定して基本認証を有効にする

Elasticsearch コンポーネントを使用するには、最小構成で設定する必要があります。

ElasticsearchComponent elasticsearchComponent = new ElasticsearchComponent();
elasticsearchComponent.setHostAddresses("myelkhost:9200");
camelContext.addComponent("elasticsearch-rest", elasticsearchComponent);

Elasticsearch を使用した基本認証、または Elasticsearch クラスターの前でリバース HTTP プロキシーを使用する場合は、以下の例のようにコンポーネントで基本認証と SSL をセットアップするだけです。

ElasticsearchComponent elasticsearchComponent = new ElasticsearchComponent();
elasticsearchComponent.setHostAddresses("myelkhost:9200");
elasticsearchComponent.setUser("elkuser");
elasticsearchComponent.setPassword("secure!!");
elasticsearchComponent.setEnableSSL(true);

camelContext.addComponent("elasticsearch-rest", elasticsearchComponent);

94.6. インデックスの例

以下は単純な INDEX の例です

from("direct:index")
  .to("elasticsearch-rest://elasticsearch?operation=Index&indexName=twitter&indexType=tweet");
<route>
    <from uri="direct:index" />
    <to uri="elasticsearch-rest://elasticsearch?operation=Index&indexName=twitter&indexType=tweet"/>
</route>

この操作では、indexId ヘッダーを指定する必要があります。

クライアントは、Map を含む本文メッセージをルートに渡すだけで済みます。結果の本文には、作成された indexId が含まれます。

Map<String, String> map = new HashMap<String, String>();
map.put("content", "test");
String indexId = template.requestBody("direct:index", map, String.class);

94.7. 検索例

特定のフィールドと値を検索するには、検索操作を使用します。クエリーの JSON 文字列またはマップを渡します

from("direct:search")
  .to("elasticsearch-rest://elasticsearch?operation=Search&indexName=twitter&indexType=tweet");
<route>
    <from uri="direct:search" />
    <to uri="elasticsearch-rest://elasticsearch?operation=Search&indexName=twitter&indexType=tweet"/>
</route>
String query = "{\"query\":{\"match\":{\"content\":\"new release of ApacheCamel\"}}}";
SearchHits response = template.requestBody("direct:search", query, SearchHits.class);

マップを使用して特定のフィールドを検索します。

Map<String, Object> actualQuery = new HashMap<>();
actualQuery.put("content", "new release of ApacheCamel");

Map<String, Object> match = new HashMap<>();
match.put("match", actualQuery);

Map<String, Object> query = new HashMap<>();
query.put("query", match);
SearchHits response = template.requestBody("direct:search", query, SearchHits.class);

94.8. マルチサーチの例

特定のフィールドと値に対する MultiSearching は、Operation 'MultiSearch' を使用します。MultiSearchRequest インスタンスを渡す

from("direct:multiSearch")
  .to("elasticsearch-rest://elasticsearch?operation=MultiSearch");
<route>
    <from uri="direct:multiSearch" />
    <to uri="elasticsearch-rest://elasticsearch?operation=MultiSearch"/>
</route>

特定のフィールドでの MultiSearch

SearchRequest req = new SearchRequest();
req.indices("twitter");
req.types("tweet");
SearchRequest req1 = new SearchRequest();
req.indices("twitter");
req.types("tweets");
MultiSearchRequest request = new MultiSearchRequest().add(req1).add(req);
Item[] response = template.requestBody("direct:search", request, Item[].class);

第95章 ElSQL コンポーネント

Camel バージョン 2.16 以降で利用可能

elsql: コンポーネントは、ElSql を使用して SQL クエリーを定義する既存の SQL コンポーネント の拡張です。 

このコンポーネントは、実際の SQL 処理のために舞台裏で spring-jdbc を使用します。

このコンポーネントは、Transactional Client として使用できます。

Maven ユーザーは、このコンポーネントの pom.xml に以下の依存関係を追加する必要があります。

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

SQL コンポーネントは、次のエンドポイント URI 表記を使用します。

sql:elSqlName:resourceUri[?options]

URI には、?option=value&option=value&…​ の形式でクエリーオプションを追加できます。

SQL クエリーへのパラメーターは、elsql マッピングファイル内の名前付きパラメーターであり、指定された優先順位で Camel メッセージから対応するキーにマップされます。

  1. Camel 2.16.1: Simple 式の場合はメッセージボディーから。
  2. `java.util.Map` の場合はメッセージ本文から 3.メッセージヘッダーから

名前付きパラメーターを解決できない場合は、例外が出力されます。

95.1. オプション

ElSQL コンポーネントは、以下に示す 5 個のオプションをサポートしています。

名前説明デフォルトタイプ

databaseVendor (Common)

ベンダー固有の com.opengamma.elsql.ElSqlConfig を使用する場合

 

ElSqlDatabaseVendor

dataSource (Common)

データベースとの通信に使用する DataSource を設定します。

 

DataSource

elSqlConfig (advanced)

特定の設定済み ElSqlConfig を使用する場合。代わりに、databaseVendor オプションを使用することをお勧めします。

 

ElSqlConfig

resourceUri (common)

使用する elsql SQL ステートメントを含むリソースファイル。複数のリソースをコンマで区切って指定できます。リソースはデフォルトでクラスパスにロードされます。file: を前に付けて、ファイルシステムからロードできます。このオプションはコンポーネントで設定でき、エンドポイントでこれを設定する必要がないことに注意してください。

 

String

resolveProperty Placeholders (advanced)

起動時にコンポーネントがプロパティープレースホルダーを解決するかどうか。String タイプのプロパティーのみがプロパティープレースホルダーを使用できます。

true

boolean

ElSQL エンドポイントは、URI 構文を使用して設定されます。

elsql:elsqlName:resourceUri

パスおよびクエリーパラメーターを使用します。

95.1.1. パスパラメーター (2 個のパラメーター):

名前説明デフォルトタイプ

elsqlName

必須 使用する elsql の名前 (elsql ファイルでは NAMED です)

 

String

resourceUri

使用する elsql SQL ステートメントを含むリソースファイル。複数のリソースをコンマで区切って指定できます。リソースはデフォルトでクラスパスにロードされます。file: を前に付けて、ファイルシステムからロードできます。このオプションはコンポーネントで設定でき、エンドポイントでこれを設定する必要がないことに注意してください。

 

String

95.1.2. クエリーパラメーター(47 個のパラメーター):

名前説明デフォルトタイプ

allowNamedParameters (common)

クエリーで名前付きパラメーターの使用を許可するかどうか。

true

boolean

databaseVendor (Common)

ベンダー固有の com.opengamma.elsql.ElSqlConfig を使用する場合

 

ElSqlDatabaseVendor

dataSource (Common)

データベースとの通信に使用する DataSource を設定します。

 

DataSource

dataSourceRef (common)

非推奨 データベースとの通信に使用するために、レジストリーから参照する DataSource への参照を設定します。

 

String

outputClass (common)

outputType=SelectOne の場合、変換として使用する完全なパッケージとクラ