Интеграционная среда 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®ion=eu-west-1″); // Transfer data from the AWS S3 service to your file outbox from(“aws-s3://camel-integration-bucket-mwea-kw?amazonS3Client=#amazonS3Client®ion=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 ]