Чтение из RabbitMQ, роутинг по jsonPath и переотправка в Citeck Event
Пример демонстрирует типичный сценарий интеграции через RabbitMQ:
Подключение к очереди RabbitMQ с использованием credentials из ECOS Endpoint.
Логирование входящего сообщения.
Роутинг сообщения по значению поля
operationв JSON-теле:CREATE→ публикация событияtest-data-create,UPDATE→ публикация событияtest-data-update,прочие значения → выброс исключения (сообщение уходит в Dead Letter Queue).
Примечание
Для работы примера необходимо создать ECOS Endpoint с именем my-rabbitmq-endpoint, содержащий url, credentials/username и credentials/password.
- beans:
# Бин подключения к RabbitMQ на основе данных из ECOS Endpoint
- name: myRabbitConnectionFactory
type: org.springframework.amqp.rabbit.connection.CachingConnectionFactory
properties:
uri: '{{ecos-endpoint:my-rabbitmq-endpoint/url}}'
username: '{{ecos-endpoint:my-rabbitmq-endpoint/credentials/username}}'
password: '{{ecos-endpoint:my-rabbitmq-endpoint/credentials/password}}'
- route:
from:
uri: "spring-rabbitmq:income-test-data"
parameters:
connectionFactory: '#bean:myRabbitConnectionFactory'
queues: test-data-queue
autoDeclare: true
# Dead Letter Queue — принимает сообщения, которые не удалось обработать
deadLetterExchange: income-test-data
deadLetterQueue: test-data-queue-dlq
deadLetterRoutingKey: deadLetterTestData
# Задержка перед повторной попыткой обработки (мс)
retryDelay: 5000
arg.queue.durable: true
arg.queue.autoDelete: false
steps:
# Логирование входящего сообщения
- to:
uri: "log:income?level=INFO&showAll=true"
# Роутинг по полю operation в JSON
- choice:
when:
- jsonpath:
expression: "$.[?(@.operation == 'CREATE')]"
steps:
- to: "ecos-event:test-data-create"
- jsonpath:
expression: "$.[?(@.operation == 'UPDATE')]"
steps:
- to: "ecos-event:test-data-update"
otherwise:
steps:
# Неизвестное значение operation — исключение отправит сообщение в DLQ
- throwException:
exceptionType: "java.lang.IllegalArgumentException"
message: "Unsupported operation. Only CREATE and UPDATE are supported."