Магазины Lamborghini Key-Value
Camel — лучшая инфраструктура интеграции хлеба, и в этой статье я покажу вам, как сделать ее еще более мощной, используя еще один замечательный проект — Redis .

Скоро выйдет Camel 2.11 с множеством новых функций, исправлений ошибок и компонентов. Я создал пару этих новых компонентов, мой любимый — redis-component . Redis — хранилище ключей и ценностей — это удивительное итальянское программное обеспечение, разработанное для скорости (так же, как Lamborghini — двухместная итальянская машина, разработанная для
скорость). Написанная на С и имеющая память, близкую к металлической природе, Redis очень хорошо работает (девиз Ламборджини — «Ближе к дороге»). Redis часто называют сервером структуры данных, поскольку ключи могут содержать строки, хэши, списки и отсортированные наборы. Быстрая и легкая структура данных сервера, как супер спортивные машины для разработчиков программного обеспечения — она просто летает. Если вы хотите узнать больше об уникальных характеристиках производительности Redis и Lamborghini, поищите в Google, и вы убедитесь сами.
Начать работать с Redis очень просто: скачайте, создайте и запустите redis-сервер. После этих шагов вы готовы использовать его из вашего приложения Camel. Компонент использует внутренне Spring Data, который, в свою очередь, использует драйвер Jedis, но с возможностью переключения на другие драйверы Redis. Вот несколько случаев, когда компонент camel-redis хорошо подходит:
Идемпотентный репозиторий
Термин идемпотент используется в математике для описания функции, которая дает тот же результат, если он применяется к самому себе. В обмене сообщениями это понятие переводится в сообщение, которое имеет одинаковый эффект, независимо от того, получено ли оно один или несколько раз. В Camel этот шаблон реализован с использованием класса IdempotentConsumer, который использует выражение для вычисления уникальной строки идентификатора сообщения для данного обмена сообщениями; затем этот идентификатор можно найти в IdempotentRepository, чтобы увидеть, был ли он виден ранее; если оно имеет сообщение потребляется; если нет, то сообщение обрабатывается и идентификатор добавляется в хранилище. RedisIdempotentRepository использует заданную структуру для хранения и проверки существующих идентификаторов.
|
01
02
03
04
05
06
07
08
09
10
11
|
<bean id="idempotentRepository" class="org.apache.camel.component.redis.processor.idempotent.RedisIdempotentRepository"><constructor-arg value="test-repo"/></bean> <route><from uri="direct:start"/><idempotentConsumer messageIdRepositoryRef="idempotentRepository"><simple>${in.body.id}</simple><to uri="mock:result"/></idempotentConsumer></route> |
Кэширование
Одним из основных применений Redis является LRU-кеш . Он может хранить данные памяти в виде Memcached или может быть настроен на долговременную очистку данных в файл журнала, который может быть воспроизведен при перезапуске узла. Различные политики при достижении maxmemory позволяют создавать кэши для определенных потребностей:
- volatile-lru удаляет ключ из числа с установленным сроком действия, пытаясь удалить ключи, которые недавно не использовались.
- volatile-ttl удаляет ключ из числа с установленным сроком действия, пытаясь удалить ключи с коротким оставшимся временем жизни.
- volatile-random удалить случайный ключ из тех, у которых установлен срок действия.
- allkeys-lru похож на volatile-lru, но удалит все виды ключей, как обычных, так и ключей с установленным сроком действия.
- allkeys-random, как volatile-random, но удалит все виды ключей, как обычные, так и ключи с установленным сроком действия.
Как только ваш сервер Redis настроен с правильными политиками и запущен, вам нужно выполнить следующие действия: SET и GET:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
<?xml version="1.0" encoding="UTF-8"?><route><from uri="direct:start"/><setHeader headerName="CamelRedis.Command"><constant>SET</constant></setHeader><setHeader headerName="CamelRedis.Key"><constant>keyOne</constant></setHeader><setHeader headerName="CamelRedis.Value"><constant>valueOne</constant></setHeader><to uri="redis://localhost:6379"/></route> |
Интерап паб / саб с Redis
Верблюд имеет различные компоненты для взаимодействия между маршрутами:
прямой : обеспечивает прямой, синхронный вызов в том же контексте верблюда.
seda : асинхронное поведение, при котором сообщения обмениваются в BlockingQueue, снова в том же контексте верблюда.
vm : асинхронное поведение, подобное seda, но также поддерживает связь через CamelContext, если они находятся в одной JVM. Сложные приложения обычно состоят из нескольких отдельных экземпляров Camel, работающих на разных компьютерах. Для таких сценариев Camel предоставляет jms, activemq , комбинацию AWS SNS и SQS для обмена сообщениями между экземплярами.
Redis предлагает более простое решение для парадигмы обмена сообщениями публикации / подписки. Подписчики подписываются на один или несколько каналов, указав названия каналов или используя сопоставление с образцом для получения сообщений из нескольких каналов. Затем издатель публикует сообщения на канал, а Redis следит за тем, чтобы он достиг всех соответствующих подписчиков.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
|
<?xml version="1.0" encoding="UTF-8"?><route startupOrder="1"><from uri="redis://localhost:6379?command=SUBSCRIBE&channels=testChannel"/><to uri="mock:result"/></route> <route startupOrder="2"><from uri="direct:start"/><setHeader headerName="CamelRedis.Command"><constant>PUBLISH</constant></setHeader><setHeader headerName="CamelRedis.CHANNEL"><constant>testChannel</constant></setHeader><setHeader headerName="CamelRedis.MESSAGE"><constant>Test Message</constant></setHeader><to uri="redis://localhost:6379"/></route></camelContext> |
Другие использования
Гарантированная доставка : Camel поддерживает этот EIP с использованием JMS, File, JPA и нескольких других компонентов. Здесь Redis можно использовать в качестве облегченного постоянного хранилища значений ключей с поддержкой транзакций.
Проверка утверждений из шаблонов EIP позволяет заменить содержимое сообщения проверкой утверждений (уникальным ключом), которую можно использовать для получения содержимого сообщения позднее. Содержимое сообщения может быть временно сохранено в Redis.
Redis также очень популярен для реализации счетчиков, списков лидеров, систем тегов и многих других функций. Теперь, когда под вашим поясом находятся два швейцарских армейских ножа, интеграция, которую можно сделать, ограничена только вашим воображением.
Ссылка: Apache Camel встречает Redis от нашего партнера по JCG Билгина Ибряма в блоге OFBIZian .

