Статьи

Облачная интеграция с Apache Camel и Amazon Web Services (AWS): S3, SQS и SNS

Интеграционная среда Apache Camel уже поддерживает несколько важных облачных сервисов (см. Мою обзорную статью на http://www.kai-waehner.de/blog/2011/07/09/cloud-computing-heterogeneity-will-require-cloud-integration -apache-верблюд уже готов для более подробной информации). В этой статье описывается сочетание интерфейсов Apache Camel и Amazon Web Services (AWS) с Simple Storage Service (S3), Simple Queue Service (SQS) и Simple Notification Service (SNS). Таким образом, концепция «Инфраструктура как услуга» (IaaS) используется для доступа к системам обмена сообщениями и хранения данных без необходимости настройки.

 

Регистрация в AWS и настройка Camel

Во-первых, вам нужно зарегистрироваться на веб-сервисах Amazon (бесплатно). Большинство сервисов AWS включают бесплатную месячную квоту, которой абсолютно достаточно для игры и разработки простых приложений. Как следует из названия, AWS использует независимые от технологии веб-сервисы. Кроме того, API для нескольких различных языков программирования доступны для облегчения разработки. Кстати, Camel , конечно же , использует AWS SDK для Java ( http://aws.amazon.com/sdkforjava ). Документация подробная и простая для понимания, включая учебные пособия, снимки экрана и примеры кода.

Подсказка 1:

Вам следует ознакомиться с введениями в S3, SQS и SNS (перейдите по адресу http://aws.amazon.com и нажмите «Продукты») и поиграть с Консолью управления AWS ( http://aws.amazon.com/console). ) прежде чем продолжить. Этот шаг очень прост и занимает менее одного часа. Тогда у вас будет намного лучшее понимание AWS и того, где Camel может вам помочь!

Подсказка 2:

Это действительно помогает взглянуть на исходный код компонента camel-aws. Это помогает понять, как Camel использует API-интерфейс AWS для внутреннего использования. Если вы хотите написать тесты, вы можете сделать это так же. Раньше я боялся смотреть на «сложный» исходный код фреймворков с открытым исходным кодом. Но не нужно бояться! Компонент camel-aws (и большинство других компонентов camel) содержит только несколько классов. Все легко понять. Это поможет вам понять внутреннее устройство Camel, API AWS, а также выявлять и устранять ошибки из-за исключений в вашем коде.

Между тем, текущая версия Camel 2.8 поддерживает три сервиса AWS: S3, SQS и SNS. Все они используют сходные понятия. Поэтому они включены в один верблюжий компонент: «camel-aws». Вы должны добавить библиотеки в существующий проект Camel. Как всегда, самый простой способ — использовать Maven и добавить следующую зависимость в pom.xml:

<dependency>

<groupId>org.apache.camel</groupId>

<artifactId>camel-aws</artifactId>

<version>${camel-version}</version>

</dependency>

Конфигурация конечной точки Camel

Реализация и настройка всех трех сервисов очень похожи. URI выглядит следующим образом (код показывает сервис SQS):

AWS-SQS: [? опция] // очередь имя

Есть две альтернативы для настройки вашей конечной точки.

Использование параметров

Самый простой способ — использовать два параметра в URI вашей конечной точки: «accessKey» и «secretKey» (вы получаете оба после регистрации в AWS).

«AWS-SQS: // уникальный-очереди имя Accesskey =«INSERT_ME „& SecretKey = INSERT_ME“

Помните о следующей проблеме, которая может привести к странному, не говорящему исключению (спасибо Брендану Лонгу):

Вам нужно будет URL кодировать любые + в вашем секретном ключе (в противном случае они
будут рассматриваться как пробелы). + =% 2B, поэтому, если ваш секретный ключ был
«мой + секретный ключ», ваш URL-адрес Camel должен иметь «secretKey = мой% 2Bsecret \ ключ».

«В строке запроса знак плюс зарезервирован как сокращенная
запись для пробела. Следовательно, реальные знаки плюс должны быть закодированы. Этот
метод использовался для упрощения передачи URI запросов в системах, где не
было пробелов ».

Источник: рекомендации URI WC3
< http://www.w3.org/Addressing/URL/4_URI_Recommentations.html#z5 >

Добавление настроенного AmazonClient в реестр

Если вам нужно выполнить дополнительную настройку (например, потому что ваша система находится за брандмауэром), вы должны добавить объект AmazonClient в свой реестр. В следующем коде показан пример использования SQS, но SNS и S3 используют точно такую ​​же концепцию.

@Override

protected JndiRegistry createRegistry() throws Exception {

JndiRegistry registry = super.createRegistry();

AWSCredentials awsCredentials = new BasicAWSCredentials(“INSERT_ME”, “INSERT_ME”);

ClientConfiguration clientConfiguration = new ClientConfiguration();

clientConfiguration.setProxyHost(“http://myProxyHost”);

clientConfiguration.setProxyPort(8080);

AmazonSQSClient client = new AmazonSQSClient(awsCredentials, clientConfiguration);

registry.bind(“amazonSQSClient”, client);

return registry;

}

В этом примере перезаписывается метод createRegistry () теста JUnit (расширяющий CamelTestSupport). Конечно, вы также можете добавить эту информацию в ваше приложение Camel.

 

Apache Camel и простой сервис хранения (S3)

Simple Storage Service (S3) — это хранилище ключей-значений. Вы можете хранить маленькие или очень большие данные. Использование очень просто. Вы создаете сегменты и помещаете данные значения ключа в эти сегменты. Вы также можете создавать папки в корзинах для организации ваших данных. Вот и все. Вы можете контролировать свои сегменты, используя Консоль управления AWS — интуитивно понятный графический интерфейс, поддерживающий большинство сервисов AWS.

В следующем примере показаны обе альтернативы для доступа к сервисам Amazon (как описано выше): Paramenters и AmazonClient.

// Transfer data from your file inbox to the AWS S3 service

from(“file:files/inbox”)

// This is the key of your key-value data

.setHeader(S3Constants.KEY, simple(“This is a static key”))

// Using parameters for accessing the AWS service

.to(“aws-s3://camel-integration-bucket-mwea-kw?accessKey=INSERT_ME&secretKey=INSERT_ME&region=eu-west-1″);

// Transfer data from the AWS S3 service to your file outbox

from(“aws-s3://camel-integration-bucket-mwea-kw?amazonS3Client=#amazonS3Client&region=eu-wes”)

.to(“file:files/outbox”);


Существуют некоторые дополнительные параметры, например, вы можете отправить желаемый регион AWS или удалить данные после их получения (см. Http://camel.apache.org/aws-s3.html и соответствующие сайты SQS и SNS для получения дополнительной информации о параметрах). и заголовки сообщений).

Как видно из кода, вы можете использовать конечную точку AWS-S3 для создания и потребления сообщений. Каждое ведро должно быть уникальным, поэтому к его названию необходимо добавить определенную информацию, такую ​​как ваша компания.

Подсказка:

Если корзина не существует, Camel создает ее автоматически (как AWS API). Эта концепция также используется для очередей SQS и тем SNS.

 

Apache Camel и служба простой очереди (SQS)

Служба простой очереди (SQS) похожа на JMS-провайдера, такого как WebSphere MQ или ActiveMQ (но с некоторыми отличиями). Вы создаете очереди и отправляете им сообщения. Потребители получают сообщения. В отличие от большинства других сервисов AWS, вы не можете отслеживать очереди, используя консоль управления AWS напрямую. Вы должны использовать сервис «Cloudwatch» ( http://aws.amazon.com/cloudwatch ) и запустить экземпляр EC2 для мониторинга очередей и их содержимого.

Как вы можете видеть в следующем примере кода, синтаксис и концепции почти такие же, как для службы S3:

from(“file:inbox”)

.to(“aws-sqs://camel-integration-queue-mwea-kw?accessKey=INSERT_ME&secretKey=INSERT_ME”);

from(“aws-sqs://camel-integration-queue-mwea-kw?amazonSQSClient=#amazonSQSClient”)

.to(“file:outbox?fileName=sqs-${date:now:yyyy.MM.dd-hh:mm:ss:SS}”);


Опять же, вы можете использовать конечную точку AWS-SQS для создания и потребления сообщений. Каждое имя очереди должно быть уникальным.

Существует два важных отличия от JMS (скопируйте и вставьте из документации AWS):

Q: Сколько раз я получу каждое сообщение?

Amazon SQS разработан для обеспечения «хотя бы раз» доставки всех сообщений в своих очередях. Хотя большую часть времени каждое сообщение будет доставлено в ваше приложение ровно один раз, вы должны спроектировать свою систему так, чтобы обработка сообщения более одного раза не создавала ошибок или несоответствий.

Q: Почему существуют отдельные операции ReceiveMessage и DeleteMessage?

Когда Amazon SQS возвращает вам сообщение, оно остается в очереди независимо от того, получили ли вы сообщение или нет. Вы несете ответственность за удаление сообщения; запрос на удаление подтверждает, что вы закончили обработку сообщения. Если вы не удалите сообщение, Amazon SQS доставит его снова по другому запросу на получение.

 

Apache Camel и служба простого оповещения (SNS)

Служба простого уведомления (SNS) действует как темы JMS. Вы создаете тему, потребители подписываются на эту тему, а затем получают уведомления. Поддерживаются несколько транспортных протоколов: HTTP (S), электронная почта и SQS. В будущем будут добавлены дополнительные интерфейсы, например, служба коротких сообщений (SMS) для мобильных телефонов.

В отличие от S3 и SQS, компания Camel предлагает только конечную точку производителя для этой услуги AWS. Вы можете создавать только темы и отправлять сообщения через Camel. Причина проста: Camel уже предлагает конечные точки для использования этих сообщений: HTTP, Email и SQS уже доступны.

Есть один компромисс: потребитель не может подписаться на темы с использованием Camel — в настоящее время. Консоль управления AWS должна использоваться. Очень интересная дискуссия может быть прочитана по проблеме Camel JIRA по следующим вопросам: должен ли Camel подписаться на темы? Должен ли производитель содержать эту функцию или должен быть потребитель? На мой взгляд, должен быть потребитель, который сможет подписаться на темы, иначе у Camel отсутствует ключевая часть сервиса AWS SNS! Пожалуйста, прочитайте обсуждение и выскажите свое мнение: https://issues.apache.org/jira/browse/CAMEL-3476 .

 

Apache Camel уже готов к эре облачных вычислений

AWS предлагает гораздо больше сервисов для облака. Возможно, нет смысла интегрировать всех в Camel, но в будущем будет поддерживаться больше сервисов AWS. Например, SimpleDB и служба реляционных баз данных (RDS) уже запланированы и тоже отправлены: http://camel.apache.org/aws.html .

Вывод прост: Apache Camel уже готов к эре облачных вычислений. Несколько важных облачных сервисов уже поддерживаются. Облачная интеграция станет очень важной в будущем. Таким образом, верблюд находится на очень хорошем пути. Надеемся, что скоро мы увидим больше облачных компонентов.

Я буду продолжать писать статьи о других облачных компонентах Camel (и новых дополнениях AWS, конечно же). Например, компонент для продукта Платформа как услуга (PaaS) Google App Engine (GAE) уже доступен.

Если у вас есть дополнительная важная информация, вопросы или другие отзывы, пожалуйста, напишите комментарий. Заранее спасибо…

 

С наилучшими пожеланиями,

[Содержимое моего блога: Облачная интеграция с Apache Camel и Amazon Web Services (AWS): S3, SQS и SNS ]