Référence des Composants
Vue d’ensemble
Référence complète de tous les composants GoCamel disponibles. Les composants fournissent la connectivité à divers systèmes et services.
Composants Principaux
Direct
Routage synchrone en mémoire entre routes dans le même contexte.
Les endpoints sont identifiés par leur nom uniquement — les paramètres de requête sont ignorés pour l’identité, donc
direct:start et direct:start?x=1 correspondent au même endpoint. Un seul consumer par
endpoint est autorisé.
Timer
Déclenchement périodique simple.
| Option | Type | Défaut | Description |
|---|---|---|---|
period | Duration | 1s | Période entre les déclenchements |
repeatCount | int | 0 | Nombre de répétitions (0=infini) |
fixedRate | bool | false | Mode à fréquence fixe vs délai fixe |
Composants de Transfert de Fichiers
File
Opérations sur le système de fichiers local.
| Option | Type | Défaut | Description |
|---|---|---|---|
delete | bool | false | Supprimer après traitement |
noop | bool | false | Ne pas déplacer/supprimer le fichier |
include | string | "" | Motif d’inclusion de fichiers |
exclude | string | "" | Motif d’exclusion de fichiers |
preMove | string | "" | Déplacer le fichier avant traitement |
move | string | "" | Déplacer le fichier après traitement |
moveFailed | string | "" | Déplacer le fichier en cas d’échec |
Verrou de lecture
Lorsqu’il surveille un répertoire, le consumer attend qu’un fichier nouvellement
créé cesse de changer avant de le lire. fsnotify signale Create dès que
l’inode existe — bien avant que l’écrivain ait terminé — si bien qu’une lecture
immédiate livrait un corps tronqué (souvent vide) pour tout fichier non écrit
de façon atomique : une redirection shell, une copie, un upload.
Le consumer échantillonne la taille et la date de modification toutes les
100 ms et lit dès que deux échantillons consécutifs coïncident, en abandonnant
au bout de 10 secondes (le fichier est ignoré et un avertissement journalisé).
C’est l’équivalent du readLock=changed de Camel.
Préférez un passage de relais atomique
Le verrou de lecture est une heuristique : un écrivain qui s’interrompt plus
longtemps que l’intervalle d’échantillonnage en cours d’écriture peut encore
être observé comme stable. Pour un passage de relais garanti, faites écrire
le producteur sous un nom temporaire puis effectuez un rename vers le
répertoire surveillé — le rename est atomique.
FTP / FTPS
Transfert de fichiers via le protocole FTP.
Variables d’environnement :
FTP_USERNAME- Nom d’utilisateurFTP_PASSWORD- Mot de passe
| Option | Type | Défaut | Description |
|---|---|---|---|
username | string | "" | Nom d’utilisateur FTP |
password | string | "" | Mot de passe FTP |
binary | bool | true | Mode de transfert binaire |
passiveMode | bool | true | Utiliser le mode passif |
SFTP
Transfert de fichiers sécurisé via SSH.
Méthodes d’authentification :
- Par mot de passe : via le paramètre
passwordou la variable d’environnementSFTP_PASSWORD - Par clé : via le paramètre
privateKeyFileouSFTP_PRIVATE_KEY_FILE
| Option | Type | Défaut | Description |
|---|---|---|---|
username | string | "" | Nom d’utilisateur SSH |
password | string | "" | Mot de passe SSH |
privateKeyFile | string | "" | Chemin vers la clé privée |
privateKeyPassphrase | string | "" | Phrase secrète de la clé privée |
SMB
Accès aux partages Windows/Samba.
| Option | Type | Défaut | Description |
|---|---|---|---|
username | string | "" | Nom d’utilisateur du domaine |
password | string | "" | Mot de passe du domaine |
share | string | requis | Nom du partage |
Composants Réseau
HTTP
Support serveur et client HTTP.
| Option | Type | Défaut | Description |
|---|---|---|---|
httpMethod | string | GET | Méthode HTTP pour le producer |
bridgeEndpoint | bool | false | Bridge l’endpoint consumer |
Authentification, TLS, limitation de débit (middleware consumer)
Le consumer HTTP est livré sans authentification. Ne l’exposez à un réseau non fiable
que derrière un middleware qui applique le modèle de sécurité dont vous avez besoin
(vérification de token, mTLS, OAuth, allowlist d’IP, rate limit, …). Installez le
middleware sur le HTTPComponent avant le démarrage de la route :
Le middleware enveloppe chaque handler installé par un consumer http:// dans ce
contexte.
Sanitisation des headers sortants
Le producer HTTP (To) et le chemin de réponse du consumer rejettent les noms et
valeurs de header contenant \r ou \n (CRLF) pour empêcher le HTTP response
splitting (CWE-113). Un exchange qui tente de définir un tel header reçoit une
erreur de la part de Send().
Headers de réponse
Le corps de la réponse provient de Out (ou de In si aucun Out n’a été
défini, selon la sémantique InOut de Camel). Les corps []byte et string
sont écrits tels quels ; tout autre corps non nil est écrit en utilisant sa
représentation %v.
Comme le consumer copie tous les headers de la requête entrante sur l’exchange,
une route qui ne définit pas Out répondrait avec les headers de la requête
elle-même. Deux filtres l’en empêchent :
- Les headers entrants inchangés ne sont pas renvoyés. Un header qui
revient identique à celui reçu est écarté :
CookieetAuthorizationne sont donc jamais réfléchis vers le client. Un header posé ou modifié par la route est toujours émis. - Les headers hop-by-hop et de cadrage ne sont jamais émis (
Connection,Keep-Alive,Transfer-Encoding,Content-Length,Host, …). Renvoyer leContent-Lengthde la requête corrompait le cadrage de la réponse.
Le même filtre s’applique au producer : un pont From(http://...) →
To(http://...) ne transmet donc pas le Content-Length ni le Host entrants
au service amont.
Statut de la réponse
Une route fixe le code de statut via le header CamelHttpResponseCode sur le
message de réponse (l’ancien header Status-Code reste accepté). Les valeurs
hors de 100–599 sont ignorées :
Gestion des erreurs du producer
Une réponse amont de statut ≥ 300 est une erreur (comportement par défaut
d’Apache Camel). L’erreur enveloppe gocamel.ErrHTTPStatus, et le corps ainsi
que les headers de la réponse restent publiés sur Out pour inspection :
Pour considérer toute réponse comme un succès et traiter le statut soi-même :
Le producer renseigne également CamelHttpResponseCode (int) et
CamelHttpResponseText (ex. "500 Internal Server Error") sur Out.
Durcissement
Le serveur embarqué définit un
ReadHeaderTimeoutde 10 secondes pour limiter les attaques de type slowloris.Les corps de requête et de réponse sont lus au travers d’une limite de taille —
DefaultMaxBodySize(32 Mio) — afin qu’une charge utile surdimensionnée ne puisse pas épuiser la mémoire du processus (CWE-400). Une requête trop volumineuse reçoit un413 Request Entity Too Large. Ajustez ou désactivez la limite par composant :Les erreurs de route ne sont pas renvoyées au client : le handler répond par un
500 internal server errorgénérique et journalise le détail, qui peut contenir du texte SQL, des chemins de fichiers ou des messages de driver.
Arrêt
La goroutine du consumer est suivie par un WaitGroup interne et Stop()
attend que http.Server.Shutdown se termine (borné par un délai interne de
30 secondes) avant de retourner. Stop() est idempotent.
Net (TCP/UDP)
Sockets TCP et UDP bruts, construits sur la bibliothèque standard — l’équivalent
Go des composants netty/mina d’Apache Camel. Le consumer écoute et alimente
la route avec les messages entrants ; le producer se connecte et envoie le
corps du message.
| Option | Type | Défaut | Description |
|---|---|---|---|
sync | bool | true | Requête-réponse : le consumer renvoie la réponse de la route au pair ; le producer attend une réponse |
textline | bool | true | Messages délimités par saut de ligne (TCP uniquement). false = un message par lecture |
bufferSize | int | 8192 | Taille maximale d’un message/datagramme en octets |
timeout | int | 30000 | Délai d’attente de connexion/réponse du producer en ms (0 = aucun) |
keepAlive | bool | false | Keepalive TCP sur les connexions |
Formes d’URI — net:tcp://hôte:port et net:tcp:hôte:port sont acceptées ;
idem pour udp. Un hôte omis prend la valeur localhost. Le port 0 demande
un port éphémère à l’OS : lisez l’adresse réellement liée via
NetConsumer.Address().
Cadrage. TCP est un flux d’octets : le composant a donc besoin d’une limite
de message. Avec textline=true (défaut), chaque ligne terminée par un saut
de ligne est un message (le \r\n ou \n final est retiré). Avec
textline=false, chaque lecture est un message. Les datagrammes UDP n’ont
pas besoin de cadrage : chaque datagramme est un message.
Headers. Le consumer définit CamelNetRemoteAddress et
CamelNetLocalAddress (hôte:port) sur le message In.
Durcissement
- Les lectures de messages sont bornées par
bufferSize. Un message textline plus long que la limite est une erreur de protocole : la connexion est fermée plutôt que de mettre en tampon des données illimitées (CWE-400). Les datagrammes UDP plus grands que la limite sont tronqués. - La lecture de la réponse du producer en mode sync est bornée par
bufferSizeet par le délaitimeout, afin qu’un pair muet ne puisse pas bloquer la route indéfiniment. - Les paniques dans les processeurs de route sont contenues
(
ProcessSafely) : une route défectueuse échoue son exchange, jamais le consumer.
Composants de Messagerie
Telegram
Intégration de l’API Telegram Bot pour la réception et l’envoi de messages.
Variables d’environnement :
TELEGRAM_AUTHORIZATIONTOKEN- Token de l’API Bot
| Option | Type | Défaut | Description |
|---|---|---|---|
authorizationToken | string | env var | Token de l’API Bot |
NATS
Messagerie asynchrone orientée événements avec NATS. Publisher et subscriber haute performance avec le client Go NATS.
Avertissement
Lors de l’écriture des URIs, utilisez toujours des doubles barres obliques (ex. nats://orders) au lieu de nats:orders, sinon url.Parse traite l’URI comme une URI opaque, ce qui contamine la chaîne du sujet avec les paramètres de requête.
| Option | Type | Défaut | Description |
|---|---|---|---|
servers | string | nats://127.0.0.1:4222 | Adresses des serveurs NATS (séparées par virgules) |
subject | string | parsé depuis le chemin | Sujet NATS pour la subscription/publication |
Headers d’Exchange :
CamelNATSSubject- Sujet du message reçu ou sujet cible pour la publication.
Redis
Envoi de commandes (SET, GET, DEL, PUBLISH) ou abonnement aux canaux Redis Pub/Sub.
Commandes supportées :
SET: Enregistre le corps de l’exchange comme valeur dekey.GET: Récupère la valeur dekeyet l’écrit dansOut.Body.DEL: Supprimekeyet écrit le nombre de clés affectées dansOut.Body.PUBLISH: Publie le corps de l’exchange vers le canal/clé spécifié.
Headers d’Exchange (surcharge des paramètres URI) :
CamelRedisCommand- La commande Redis à exécuter (ex."GET").CamelRedisKey- La clé Redis cible.CamelRedisChannel- Canal Pub/Sub cible pour la publication ou canal source pour l’abonnement.
| Option | Type | Défaut | Description |
|---|---|---|---|
command | string | SET | Commande Redis pour le producer |
key | string | "" | Clé Redis sur laquelle opérer |
channel | string | "" | Canal Redis Pub/Sub |
subscribe | bool | false | Si true, agit comme un consumer Pub/Sub |
Dépôt Idempotent Redis
Le Dépôt Idempotent Redis fournit une implémentation distribuée de l’interface IdempotentRepository, permettant à plusieurs instances GoCamel dans un cluster de se coordonner et d’éviter le traitement de messages dupliqués.
Go Channel
Composant d’intégration intra-processus natif et ultra-rapide utilisant les canaux Go natifs. Il permet de découpler les segments de route de manière asynchrone au sein du même processus.
| Option | Type | Défaut | Description |
|---|---|---|---|
bufferSize | int | 100 | Capacité du canal interne bufferisé |
Notes :
- Les endpoints sont mis en cache par nom de canal : chaque producer et consumer
utilisant le même nom partage un endpoint, et un seul consumer par canal est
autorisé (un second
From("chan:orders")échoue au démarrage). - Les options URI sont appliquées lorsque l’endpoint est créé pour la première fois ; les références ultérieures avec des options différentes émettent un avertissement et réutilisent l’endpoint existant.
Composants IA
OpenAI
Intégration de l’API OpenAI pour ChatGPT/GPT-4.
Variables d’environnement :
OPENAI_AUTHORIZATIONTOKENouOPENAI_API_KEY- Clé API
| Option | Type | Défaut | Description |
|---|---|---|---|
model | string | gpt-3.5-turbo | Modèle à utiliser |
authorizationToken | string | env var | Clé API |
Composants d’Ordonnancement
Cron
Ordonnancement avancé avec expressions cron ou intervalles simples.
Format d’expression cron (6 champs) :
| Option | Type | Défaut | Description |
|---|---|---|---|
cron | string | "" | Expression cron à 6 champs |
trigger.repeatInterval | int | "" | Intervalle en ms (déclencheur simple) |
trigger.repeatCount | int | -1 | Nombre maximum de répétitions |
triggerStartDelay | int | 500 | Délai initial en ms |
stateful | bool | false | Empêcher l’exécution concurrente |
Headers d’Exchange :
fireTime- Heure d’exécution du déclencheurnextFireTime- Prochaine heure planifiéetriggerName- Identifiant du déclencheur
Composants de Messagerie Électronique
SMTP/SMTPS (Envoi)
Envoi d’emails via SMTP.
| Option | Type | Défaut | Description |
|---|---|---|---|
username | string | "" | Nom d’utilisateur SMTP |
password | string | "" | Mot de passe SMTP |
to | string | "" | Destinataire(s) |
subject | string | "" | Sujet de l’email |
contentType | string | "text/plain" | Type MIME |
IMAP/IMAPS (Réception)
Réception d’emails via IMAP avec support IDLE.
| Option | Type | Défaut | Description |
|---|---|---|---|
username | string | "" | Nom d’utilisateur IMAP |
password | string | "" | Mot de passe IMAP |
folderName | string | "INBOX" | Dossier à surveiller |
unseen | bool | true | Messages non lus uniquement |
idle | bool | false | Utiliser le mode IMAP IDLE |
delete | bool | false | Supprimer après traitement |
fetchSize | int | -1 | Messages par interrogation |
pollDelay | int | 60000 | Intervalle d’interrogation (ms) |
POP3/POP3S (Réception)
Réception d’emails via POP3.
Composants de Base de Données
SQL
Exécution de requêtes SQL via database/sql.
Format d’URI :
| Option | Type | Défaut | Description |
|---|---|---|---|
query | string | requis | Chaîne de requête SQL |
dataSourceRef | string | chemin hôte | Nom de la datasource |
outputType | string | SelectList | SelectList ou SelectOne |
batch | bool | false | Mode d’exécution par lot |
transacted | bool | false | Encapsuler dans une transaction |
allowHeaderOverride | bool | false | Autoriser CamelSqlQuery à remplacer la requête |
Paramètres de requête :
Fournis via le header CamelSqlParameters ou le corps comme []any.
La requête est une configuration de confiance
La requête n’est jamais interpolée avec les données de l’Exchange :
substituer ${header.X} dans la chaîne SQL annulerait le bénéfice des
requêtes paramétrées et ouvrirait la porte à l’injection SQL. Liez toujours
les valeurs dynamiques via CamelSqlParameters (placeholders positionnels
?) ou un corps []any.
Le header CamelSqlQuery remplace la requête dans son intégralité :
depuis la v0.2 il est donc ignoré sauf si l’endpoint l’active avec
allowHeaderOverride=true. Ne l’activez que là où les headers ne peuvent
pas être influencés par une entrée non fiable — sinon tout composant
reportant des métadonnées externes sur les headers donne à l’appelant le
contrôle total de la requête.
Headers de sortie :
CamelSqlRowCount- Lignes retournées/affectéesCamelSqlColumnNames- Noms des colonnes (SELECT)
Corps du résultat :
| Cas | Type de Out.Body |
|---|---|
SELECT + SelectList | []map[string]any |
SELECT + SelectOne | map[string]any ou nil |
INSERT/UPDATE/DELETE | int64 (lignes affectées) |
Classification des requêtes :
Le choix entre exécution en lecture (jeu de résultats) et en écriture (lignes
affectées) se fait sur le premier mot-clé, en ignorant les commentaires et
parenthèses de tête. SELECT, WITH (CTE), VALUES, TABLE, SHOW,
EXPLAIN, DESCRIBE et PRAGMA renvoient des lignes, tout comme une requête
portant une clause RETURNING :
SQL-Stored
Exécution de procédures stockées avec support des paramètres IN, OUT et INOUT.
Format d’URI :
| Option | Type | Défaut | Description |
|---|---|---|---|
procedure | string | requis | Nom de la procédure stockée |
dataSourceRef | string | chemin hôte | Nom de la datasource |
outputType | string | SelectList | SelectList ou SelectOne |
transacted | bool | false | Exécuter dans une transaction |
noop | bool | false | Mode test (pas d’exécution) |
Directions des paramètres :
| Direction | Description |
|---|---|
ParamDirectionIn | Entrée uniquement |
ParamDirectionOut | Sortie uniquement |
ParamDirectionInOut | Entrée et sortie |
Exemple :
MongoDB
Intégration MongoDB pour les opérations CRUD. Producer uniquement.
Format d’URI
Options
| Option | Type | Requis | Description |
|---|---|---|---|
database | string | Oui | Nom de la base de données |
collection | string | Oui | Nom de la collection |
operation | string | Oui | Opération : find, findOne, insert, insertOne, save, update, remove, count |
connectionRef | string | Non | Référence de connexion enregistrée |
allowDeleteAll | bool | Non | Autorise remove avec un filtre vide (défaut : false) |
Par sécurité, remove refuse les filtres nuls ou vides. Définissez
allowDeleteAll=true explicitement uniquement si la suppression de toute la
collection est intentionnelle.
Headers d’entrée
| Header | Mode | Description |
|---|---|---|
CamelMongoDbDatabase | R/W | Nom de la base de données |
CamelMongoDbCollection | R/W | Nom de la collection |
CamelMongoDbOperation | R/W | Opération à exécuter |
CamelMongoDbCriteria | Écriture | Filtre/critère (map[string]any ou JSON) |
CamelMongoDbLimit | Écriture | Limite de résultats |
CamelMongoDbSkip | Écriture | Sauter N documents |
CamelMongoDbSort | Écriture | Ordre de tri (json: {“field”: 1}) |
Headers de sortie
| Header | Description |
|---|---|
CamelMongoDbResultTotal | Total des documents trouvés/affectés |
CamelMongoDbOid | ObjectID du document inséré |
Exemple
Composants de Transformation
XSLT
Transformation XML via feuille de style XSL.
| Option | Type | Défaut | Description |
|---|---|---|---|
transformerFactory | string | "" | Classe de transformateur personnalisée |
XSD
Validation de schéma XML.
| Option | Type | Défaut | Description |
|---|---|---|---|
schemaResource | string | requis | Chemin du schéma XSD |
Template
Traitement de templates Go (inspiré d’Apache Camel Velocity).
| Option | Type | Défaut | Description |
|---|---|---|---|
contentCache | bool | false | Mettre en cache le template en mémoire |
allowTemplateFromHeader | bool | false | Autoriser la surcharge via le header CamelTemplatePath |
startDelimiter | string | {{ | Délimiteur de début |
endDelimiter | string | }} | Délimiteur de fin |
Variables de template :
Fonctions de template :
Composants d’Exécution
Exec
Exécuter des commandes système.
| Option | Type | Défaut | Description |
|---|---|---|---|
args | string | "" | Arguments de la commande |
workingDir | string | "" | Répertoire de travail |
timeout | int | 0 | Délai d’attente en ms (0=pas de délai) |
outFile | string | "" | Lire le résultat depuis ce fichier au lieu de stdout |
useStderrOnEmpty | bool | false | Utiliser stderr comme corps quand stdout est vide |
allowHeaderOverride | bool | false | Autoriser les headers CamelExecCommand* à surcharger l’URI |
Surcharges par message (opt-in) :
Quand allowHeaderOverride=true, ces headers surchargent les paramètres URI pour un seul message :
| Header | Surcharge |
|---|---|
CamelExecCommandExecutable | Exécutable |
CamelExecCommandArgs | Arguments |
CamelExecCommandWorkingDir | Répertoire de travail |
CamelExecCommandTimeout | Délai d’attente (ms) |
Sécurité
Les surcharges de header permettent à un message de choisir quel binaire est exécuté. Elles sont
désactivées par défaut ; n’activez allowHeaderOverride=true que lorsque les headers de message
ne peuvent pas être influencés par une entrée non fiable (ex. headers provenant d’un consumer
HTTP ou mail).
L’exécutable et le répertoire de travail sont validés contre les
métacaractères shell et le path traversal. Les arguments ne le sont
pas : les commandes sont lancées via execve, sans shell, donc |, &,
$, < et > n’ont aucune signification particulière et parviennent
verbatim au processus fils — c’est précisément l’intention. Les rejeter
bloquait des valeurs légitimes (un document JSON, un mot de passe contenant
$, un chemin relatif) sans empêcher la moindre injection. Le caractère NUL
et les autres caractères de contrôle restent rejetés.
Sortie :
Out.Body= stdout de la commande (également recopié surInpour la rétrocompatibilité, afin qu’une route InOut voie la sortie de la commande)- Header
CamelExecExitValue= code de sortie - Headers
CamelExecStdout/CamelExecStderr= sortie brute de la commande
Configuration des Composants
Authentification
Les identifiants peuvent être fournis via des variables d’environnement :
Options communes
De nombreux composants partagent des options d’interrogation communes :
| Option | Type | Défaut | Description |
|---|---|---|---|
delay | Duration | varie | Intervalle d’interrogation |
include | string | "" | Motif d’inclusion |
exclude | string | "" | Motif d’exclusion |
Tableau Récapitulatif des Composants
| Composant | Catégorie | Consumer | Producer | Motif d’URI |
|---|---|---|---|---|
| Direct | Core | ✅ | ✅ | direct:name |
| Timer | Core | ✅ | ❌ | timer:name |
| File | Fichier | ✅ | ✅ | file://path |
| FTP | Fichier | ✅ | ✅ | ftp://host/path |
| SFTP | Fichier | ✅ | ✅ | sftp://host/path |
| SMB | Fichier | ✅ | ✅ | smb://host/share |
| HTTP | Réseau | ✅ | ✅ | http://host:port/path |
| Net | Réseau | ✅ | ✅ | net:tcp://host:port |
| Telegram | Messagerie | ✅ | ✅ | telegram:bots |
| OpenAI | IA | ❌ | ✅ | openai:chat |
| Cron | Ordonnancement | ✅ | ❌ | cron://group/job |
| SMTP | ❌ | ✅ | smtp://host:port | |
| IMAP | ✅ | ❌ | imap://host:port | |
| POP3 | ✅ | ❌ | pop3://host:port | |
| SQL | Base de données | ❌ | ✅ | sql://datasource |
| SQL-Stored | Base de données | ❌ | ✅ | sql-stored://datasource |
| MongoDB | Base de données | ❌ | ✅ | mongodb:connectionName |
| XSLT | Transformation | ❌ | ✅ | xslt:template |
| XSD | Transformation | ❌ | ✅ | xsd:schema |
| Template | Transformation | ❌ | ✅ | template:template |
| Exec | Exécution | ❌ | ✅ | exec:command |
| NATS | Messagerie | ✅ | ✅ | nats://subject |
| Redis | Messagerie | ✅ | ✅ | redis://host:port |
| Go Channel | Core | ✅ | ✅ | chan:channelName |