diff --git a/kamelet.json b/kamelet.json new file mode 100644 index 0000000..f461b13 --- /dev/null +++ b/kamelet.json @@ -0,0 +1,355 @@ +{ + "apiVersion": "camel.apache.org/v1", + "kind": "Kamelet", + "metadata": { + "name": "pulsar-source", + "annotations": { + "camel.apache.org/kamelet.support.level": "Stable", + "camel.apache.org/catalog.version": "4.22.1", + "camel.apache.org/kamelet.icon": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcKICAgdmlld0JveD0iMCAwIDYwLjk3Mzk5OSA0My4wOSIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0ic3ZnMjQiCiAgIHNvZGlwb2RpOmRvY25hbWU9InB1bHNhci1sb2dvLnN2ZyIKICAgd2lkdGg9IjYwLjk3Mzk5OSIKICAgaGVpZ2h0PSI0My4wOSIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMS4xLjEgKDNiZjVhZTBkMjUsIDIwMjEtMDktMjApIgogICB4bWxuczppbmtzY2FwZT0iaHR0cDovL3d3dy5pbmtzY2FwZS5vcmcvbmFtZXNwYWNlcy9pbmtzY2FwZSIKICAgeG1sbnM6c29kaXBvZGk9Imh0dHA6Ly9zb2RpcG9kaS5zb3VyY2Vmb3JnZS5uZXQvRFREL3NvZGlwb2RpLTAuZHRkIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KICA8c29kaXBvZGk6bmFtZWR2aWV3CiAgICAgaWQ9Im5hbWVkdmlldzI2IgogICAgIHBhZ2Vjb2xvcj0iI2ZmZmZmZiIKICAgICBib3JkZXJjb2xvcj0iIzY2NjY2NiIKICAgICBib3JkZXJvcGFjaXR5PSIxLjAiCiAgICAgaW5rc2NhcGU6cGFnZXNoYWRvdz0iMiIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMC4wIgogICAgIGlua3NjYXBlOnBhZ2VjaGVja2VyYm9hcmQ9IjAiCiAgICAgc2hvd2dyaWQ9ImZhbHNlIgogICAgIHVuaXRzPSJweCIKICAgICBpbmtzY2FwZTp6b29tPSIzLjAwNDM2NjIiCiAgICAgaW5rc2NhcGU6Y3g9IjMxLjQ1NDIyMSIKICAgICBpbmtzY2FwZTpjeT0iNDMuNDM2NzgyIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTkyMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDgwIgogICAgIGlua3NjYXBlOndpbmRvdy14PSIwIgogICAgIGlua3NjYXBlOndpbmRvdy15PSIwIgogICAgIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjEiCiAgICAgaW5rc2NhcGU6Y3VycmVudC1sYXllcj0ic3ZnMjQiIC8+CiAgPGRlZnMKICAgICBpZD0iZGVmczQiPgogICAgPHN0eWxlCiAgICAgICBpZD0ic3R5bGUyIj4uY2xzLTF7ZmlsbDojMTg4ZmZmO30uY2xzLTJ7ZmlsbDojNDY0ZTU2O308L3N0eWxlPgogICAgPGNsaXBQYXRoCiAgICAgICBjbGlwUGF0aFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIKICAgICAgIGlkPSJjbGlwUGF0aDMxNiI+CiAgICAgIDxyZWN0CiAgICAgICAgIGlkPSJyZWN0MzE4IgogICAgICAgICB3aWR0aD0iNjAuOTczOTQ2IgogICAgICAgICBoZWlnaHQ9IjQzLjUxMzExMSIKICAgICAgICAgeD0iNC4wOTY2MDMzZS0xMCIKICAgICAgICAgeT0iLTAuNDIzMTExMTEiIC8+CiAgICA8L2NsaXBQYXRoPgogIDwvZGVmcz4KICA8dGl0bGUKICAgICBpZD0idGl0bGU2Ij5Bc3NldCAyPC90aXRsZT4KICA8ZwogICAgIGlkPSJMYXllcl8yIgogICAgIGRhdGEtbmFtZT0iTGF5ZXIgMiIKICAgICB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwLjI5NzE0NDIsMC4wNjg0ODA4NSkiCiAgICAgY2xpcC1wYXRoPSJ1cmwoI2NsaXBQYXRoMzE2KSI+CiAgICA8ZwogICAgICAgaWQ9IkxheWVyXzEtMiIKICAgICAgIGRhdGEtbmFtZT0iTGF5ZXIgMSI+CiAgICAgIDxwYXRoCiAgICAgICAgIGNsYXNzPSJjbHMtMSIKICAgICAgICAgZD0iTSA2MSwxMy43MyBIIDQ2LjA5IEMgNDIuMDYsNiAzNy44LDAgMzIsMCAyNC40NSwwIDIwLjksNi41OSAxNy40NywxMyBsIC0wLjMsMC41NiBIIDAgdiAzLjgxIGggMTAgYyAzLjUzLDAgNC4yNSwxLjE5IDQuMjUsMS4xOSAtMi43Nyw0LjMgLTYuMSw4LjU1IC0xMS42NSw4LjU1IEggMCB2IDQgaCAyLjYyIGMgMTAuNzYsMCAxNS40NiwtOC43MyAxOS4yMywtMTUuNzQgQyAyNS4zMSw4LjkxIDI3LjcyLDUgMzIsNSBjIDQuNDQsMCA5LjExLDkuNjYgMTMuMjIsMTguMTkgMC42LDEuMjQgMS4yMSwyLjUxIDEuODMsMy43NyAtMTUuNzYsMC41IC0yMy4yNyw0LjE5IC0yOS4zOCw3LjIgLTQuNDcsMi4yIC04LDQuOTMgLTEzLjgxLDQuOTMgSCAwIHYgNCBoIDMuODMgYyA3LDAgMTEuMzYsLTIuMTYgMTYsLTQuNDUgNi40MywtMy4xNiAxMy43MiwtNi43NCAzMC45LC02Ljc0IGggOS45MyB2IC00IGggLTUuNjEgYSAzLDMgMCAwIDEgLTIuNDcsLTEgQyA1MS42LDI1IDUwLjY0LDIzIDQ5LjcsMjEgbCAtMS4zLC0yLjY2IGMgMCwwIDAuOTMsLTEgMy41MSwtMSBIIDYxIFoiCiAgICAgICAgIGlkPSJwYXRoOCIgLz4KICAgICAgPHBhdGgKICAgICAgICAgY2xhc3M9ImNscy0yIgogICAgICAgICBkPSJNIDc5LjgzLDEzLjcgSCA2OS40NCB2IDMuNzQgSCA3OS42IGMgNC4yLDAgNi42MSwxLjkxIDYuNjEsNS4zMyAwLDMuMjQgLTIuNjYsNS4zMyAtNi43Nyw1LjMzIGggLTEwIHYgMTMgaCA0IHYgLTkuMyBoIDUuOTMgYyA1LjQyLDAgMTAuODgsLTIuODMgMTAuODgsLTkuMjIgLTAuMDMsLTUuNCAtNC4xMSwtOC44OCAtMTAuNDIsLTguODggeiIKICAgICAgICAgaWQ9InBhdGgxMCIgLz4KICAgICAgPHBhdGgKICAgICAgICAgY2xhc3M9ImNscy0yIgogICAgICAgICBkPSJtIDExMy4zMSwyOS41NyBjIDAsNS4zMSAtMi42Niw4LjI0IC03LjQ4LDguMjQgLTQuODIsMCAtNy42LC0zLjA3IC03LjYsLTguNDMgViAxMy43IGggLTQgdiAxNS44NyBjIDAsNy4zOSA0LjQsMTIgMTEuNDksMTIgNy4wOSwwIDExLjU2LC00LjU3IDExLjU2LC0xMi4yMyBWIDEzLjcgaCAtNCB6IgogICAgICAgICBpZD0icGF0aDEyIiAvPgogICAgICA8cG9seWdvbgogICAgICAgICBjbGFzcz0iY2xzLTIiCiAgICAgICAgIHBvaW50cz0iMTQyLjIyLDQxLjE0IDE0Mi4yMiwzNy4zOSAxMjcuMzMsMzcuMzkgMTI3LjMzLDEzLjcgMTIzLjM2LDEzLjcgMTIzLjM2LDQxLjE0ICIKICAgICAgICAgaWQ9InBvbHlnb24xNCIgLz4KICAgICAgPHBhdGgKICAgICAgICAgY2xhc3M9ImNscy0yIgogICAgICAgICBkPSJNIDE1Ni42OSwyNS41IEMgMTUwLjk1LDI0LjI3IDE0OS45LDIyLjk3IDE0OS45LDIwLjc2IDE0OS45LDE4LjU1IDE1MiwxNyAxNTUsMTcgYSAxMS4xMiwxMS4xMiAwIDAgMSA3LjMyLDIuNzYgbCAwLjQsMC4zMiAyLjM2LC0zLjA4IC0wLjM3LC0wLjMgYSAxNC4yMiwxNC4yMiAwIDAgMCAtOS42MSwtMy4zNiBjIC01LjMyLDAgLTkuMTgsMy4yNCAtOS4xOCw3Ljc5IDAsNS4wNiAzLjcxLDYuOTEgOS4yNyw4LjEyIDUuNTYsMS4yMSA2LjQ5LDIuNDQgNi40OSw0LjYyIDAsMi4zNiAtMi4yMiw0IC01LjQxLDQgLTMuMzcsMCAtNS45LC0xIC04Ljc0LC0zLjYyIGwgLTAuMzgsLTAuMzQgLTIuNDksMi45NSAwLjM2LDAuMzIgYSAxNS45MSwxNS45MSAwIDAgMCAxMS4xNCw0LjM2IGMgNS42MSwwIDkuNTIsLTMuMjggOS41MiwtOCAwLjAxLC00LjI4IC0yLjY4LC02LjY3IC04Ljk5LC04LjA0IHoiCiAgICAgICAgIGlkPSJwYXRoMTYiIC8+CiAgICAgIDxwYXRoCiAgICAgICAgIGNsYXNzPSJjbHMtMiIKICAgICAgICAgZD0ibSAxODAuMTksMTMuNTEgLTEyLjUsMjcuNjMgaCA0LjE0IGwgMy4xNCwtNyBoIDEzLjc2IGwgMy4xLDcgaCA0LjI5IGwgLTEyLjUsLTI3LjYzIHogbSAtMy42MSwxNyA1LjI5LC0xMS44IDUuMjYsMTEuOCB6IgogICAgICAgICBpZD0icGF0aDE4IiAvPgogICAgICA8cGF0aAogICAgICAgICBjbGFzcz0iY2xzLTIiCiAgICAgICAgIGQ9Im0gMjE1LjE4LDMwLjE1IGMgNC4yOSwtMSA2LjgyLC00IDYuODIsLTguMTEgYSA3Ljc3LDcuNzcgMCAwIDAgLTIuMTgsLTUuNTYgMTEsMTEgMCAwIDAgLTcuODcsLTIuNzkgaCAtMTEuODcgdiAyNy40NSBoIDQgViAzMC44NSBoIDYuODIgbCA3LjY3LDEwLjI4IGggNC45IHogbSAtMTEuMTQsLTMgdiAtOS43MSBoIDcuNjcgYyA0LDAgNi4yOCwxLjcyIDYuMjgsNC44IDAsMy4wOCAtMi40OCw1IC02LjMxLDUgeiIKICAgICAgICAgaWQ9InBhdGgyMCIgLz4KICAgIDwvZz4KICA8L2c+CiAgPG1ldGFkYXRhCiAgICAgaWQ9Im1ldGFkYXRhODE5Ij4KICAgIDxyZGY6UkRGPgogICAgICA8Y2M6V29yawogICAgICAgICByZGY6YWJvdXQ9IiI+CiAgICAgICAgPGRjOnRpdGxlPkFzc2V0IDI8L2RjOnRpdGxlPgogICAgICA8L2NjOldvcms+CiAgICA8L3JkZjpSREY+CiAgPC9tZXRhZGF0YT4KPC9zdmc+Cg==", + "camel.apache.org/provider": "Apache Software Foundation", + "camel.apache.org/kamelet.group": "Pulsar", + "camel.apache.org/kamelet.namespace": "Messaging" + }, + "labels": { + "camel.apache.org/kamelet.type": "source" + } + }, + "spec": { + "dependencies": [ + "camel:pulsar", + "camel:kamelet", + "camel:core" + ], + "definition": { + "title": "Pulsar Source", + "description": "Receive data from Pulsar topics.", + "required": [ + "topicType", + "topic", + "namespaceName", + "tenant", + "serviceUrl" + ], + "properties": { + "topic": { + "title": "Topic Name", + "description": "The topic name or regexp", + "type": "string" + }, + "tenant": { + "title": "Tenant Name", + "description": "The Tenant Name", + "type": "string" + }, + "topicType": { + "title": "Topic Type", + "description": "The topic type.", + "type": "string", + "enum": [ + "persistent", + "non-persistent" + ] + }, + "namespaceName": { + "title": "Pulsar Namespace Name", + "description": "The Pulsar Namespace Name", + "type": "string" + }, + "serviceUrl": { + "title": "Service URL", + "description": "The Pulsar Service URL to point while creating the client from URI.", + "type": "string" + }, + "authenticationClass": { + "title": "Authentication Class", + "description": "The Authentication FQCN to be used while creating the client from URI.", + "type": "string" + }, + "authenticationParams": { + "title": "Authentication Params", + "description": "The Authentication Parameters to be used while creating the client from URI.", + "type": "string" + }, + "consumerNamePrefix": { + "title": "Consumer Name Prefix", + "description": "Prefix to add to consumer names when a SHARED or FAILOVER subscription is used", + "type": "string", + "default": "cons" + }, + "consumerQueueSize": { + "title": "Consumer Queue Size", + "description": "Size of the consumer queue", + "type": "integer", + "default": 10 + }, + "deadLetterTopic": { + "title": "Dead Letter Topic", + "description": "Name of the topic where the messages which fail `maxRedeliverCount` times are sent. Note: if not set, default topic name is topicName-subscriptionName-DLQ.", + "type": "integer" + }, + "maxRedeliverCount": { + "title": "Maximum Redelivery Count", + "description": "Maximum number of times that a message is redelivered before being sent to the dead letter queue. If this value is not set, no Dead Letter Policy is created.", + "type": "integer" + }, + "negativeAckRedeliveryDelayMicros": { + "title": "Negative Ack Redelivery Delay in Microseconds", + "description": "Set the negative acknowledgement delay.", + "type": "integer", + "default": 60000000 + }, + "messageListener": { + "title": "Message Listener", + "description": "Whether to use the messageListener interface, or to receive messages using a separate thread pool.", + "type": "boolean", + "default": true + }, + "numberOfConsumers": { + "title": "Number Of Consumers", + "description": "Number of consumers.", + "type": "integer", + "default": 1 + }, + "numberOfConsumerThreads": { + "title": "Number Of Consumer Threads", + "description": "Number of threads to receive and handle messages when using a separate thread pool.", + "type": "integer", + "default": 1 + }, + "readCompacted": { + "title": "Read Compacted", + "description": "Enable compacted topic reading.", + "type": "boolean", + "default": false + }, + "subscriptionInitialPosition": { + "title": "Subscription Initial Position", + "description": "Control the initial position in the topic of a newly created subscription. Default is latest message.", + "type": "string", + "default": "LATEST", + "enum": [ + "EARLIEST", + "LATEST" + ] + }, + "subscriptionName": { + "title": "Subscription Name", + "description": "Name of the subscription to use.", + "type": "string", + "default": "subs" + }, + "subscriptionTopicsMode": { + "title": "Subscription Topics Mode", + "description": "Determines to which topics this consumer should be subscribed to - Persistent, Non-Persistent, or both. Only used with pattern subscriptions.", + "type": "string", + "default": "PersistentOnly", + "enum": [ + "PersistentOnly", + "NonPersistentOnly", + "AllTopics" + ] + }, + "subscriptionType": { + "title": "Subscription Type", + "description": "Type of the subscription.", + "type": "string", + "default": "EXCLUSIVE", + "enum": [ + "EXCLUSIVE", + "SHARED", + "FAILOVER", + "KEY_SHARED" + ] + }, + "topicsPattern": { + "title": "Topic Pattern", + "description": "Whether the topic is a pattern (regular expression) that allows the consumer to subscribe to all matching topics in the namespace.", + "type": "boolean", + "default": false + } + }, + "type": "object" + }, + "template": { + "from": { + "uri": "pulsar:{{topicType}}/{{tenant}}/{{namespaceName}}/{{topic}}", + "parameters": { + "serviceUrl": "{{serviceUrl}}", + "authenticationClass": "{{?authenticationClass}}", + "authenticationParams": "{{?authenticationParams}}", + "consumerNamePrefix": "{{?consumerNamePrefix}}", + "consumerQueueSize": "{{?consumerQueueSize}}", + "deadLetterTopic": "{{?deadLetterTopic}}", + "maxRedeliverCount": "{{?maxRedeliverCount}}", + "negativeAckRedeliveryDelayMicros": "{{?negativeAckRedeliveryDelayMicros}}", + "messageListener": "{{?messageListener}}", + "numberOfConsumers": "{{?numberOfConsumers}}", + "numberOfConsumerThreads": "{{?numberOfConsumerThreads}}", + "readCompacted": "{{?readCompacted}}", + "subscriptionInitialPosition": "{{?subscriptionInitialPosition}}", + "subscriptionName": "{{?subscriptionName}}", + "subscriptionTopicsMode": "{{?subscriptionTopicsMode}}", + "subscriptionType": "{{?subscriptionType}}", + "topicsPattern": "{{?topicsPattern}}" + }, + "steps": [ + { + "to": "kamelet:sink" + } + ] + } + } + }, + "propertiesSchema": { + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "title": "Pulsar Source", + "description": "Receive data from Pulsar topics.", + "required": [ + "topicType", + "topic", + "namespaceName", + "tenant", + "serviceUrl" + ], + "properties": { + "topic": { + "type": "string", + "title": "Topic Name", + "description": "The topic name or regexp" + }, + "tenant": { + "type": "string", + "title": "Tenant Name", + "description": "The Tenant Name" + }, + "topicType": { + "type": "string", + "title": "Topic Type", + "description": "The topic type.", + "enum": [ + "persistent", + "non-persistent" + ] + }, + "namespaceName": { + "type": "string", + "title": "Pulsar Namespace Name", + "description": "The Pulsar Namespace Name" + }, + "serviceUrl": { + "type": "string", + "title": "Service URL", + "description": "The Pulsar Service URL to point while creating the client from URI." + }, + "authenticationClass": { + "type": "string", + "title": "Authentication Class", + "description": "The Authentication FQCN to be used while creating the client from URI." + }, + "authenticationParams": { + "type": "string", + "title": "Authentication Params", + "description": "The Authentication Parameters to be used while creating the client from URI." + }, + "consumerNamePrefix": { + "type": "string", + "title": "Consumer Name Prefix", + "description": "Prefix to add to consumer names when a SHARED or FAILOVER subscription is used", + "default": "cons" + }, + "consumerQueueSize": { + "type": "integer", + "title": "Consumer Queue Size", + "description": "Size of the consumer queue", + "default": 10 + }, + "deadLetterTopic": { + "type": "integer", + "title": "Dead Letter Topic", + "description": "Name of the topic where the messages which fail `maxRedeliverCount` times are sent. Note: if not set, default topic name is topicName-subscriptionName-DLQ." + }, + "maxRedeliverCount": { + "type": "integer", + "title": "Maximum Redelivery Count", + "description": "Maximum number of times that a message is redelivered before being sent to the dead letter queue. If this value is not set, no Dead Letter Policy is created." + }, + "negativeAckRedeliveryDelayMicros": { + "type": "integer", + "title": "Negative Ack Redelivery Delay in Microseconds", + "description": "Set the negative acknowledgement delay.", + "default": 60000000 + }, + "messageListener": { + "type": "boolean", + "title": "Message Listener", + "description": "Whether to use the messageListener interface, or to receive messages using a separate thread pool.", + "default": true + }, + "numberOfConsumers": { + "type": "integer", + "title": "Number Of Consumers", + "description": "Number of consumers.", + "default": 1 + }, + "numberOfConsumerThreads": { + "type": "integer", + "title": "Number Of Consumer Threads", + "description": "Number of threads to receive and handle messages when using a separate thread pool.", + "default": 1 + }, + "readCompacted": { + "type": "boolean", + "title": "Read Compacted", + "description": "Enable compacted topic reading.", + "default": false + }, + "subscriptionInitialPosition": { + "type": "string", + "title": "Subscription Initial Position", + "description": "Control the initial position in the topic of a newly created subscription. Default is latest message.", + "enum": [ + "EARLIEST", + "LATEST" + ], + "default": "LATEST" + }, + "subscriptionName": { + "type": "string", + "title": "Subscription Name", + "description": "Name of the subscription to use.", + "default": "subs" + }, + "subscriptionTopicsMode": { + "type": "string", + "title": "Subscription Topics Mode", + "description": "Determines to which topics this consumer should be subscribed to - Persistent, Non-Persistent, or both. Only used with pattern subscriptions.", + "enum": [ + "PersistentOnly", + "NonPersistentOnly", + "AllTopics" + ], + "default": "PersistentOnly" + }, + "subscriptionType": { + "type": "string", + "title": "Subscription Type", + "description": "Type of the subscription.", + "enum": [ + "EXCLUSIVE", + "SHARED", + "FAILOVER", + "KEY_SHARED" + ], + "default": "EXCLUSIVE" + }, + "topicsPattern": { + "type": "boolean", + "title": "Topic Pattern", + "description": "Whether the topic is a pattern (regular expression) that allows the consumer to subscribe to all matching topics in the namespace.", + "default": false + } + } + } +} \ No newline at end of file