Home

Awesome

KubeMQ Sources

KubeMQ Sources connects external systems and cloud services with KubeMQ message queue broker.

KubeMQ Sources allows us to build a message-based microservices architecture on Kubernetes with minimal efforts and without developing connectivity interfaces between external system such as messaging components (RabbitMQ, Kafka, MQTT) ,REST APIs and KubeMQ message queue broker. In addition, KubeMQ Sources allows migrating legacy systems (together with KubeMQ Targets) to KubeMQ based messaging architecture.

Key Features:

Concepts

KubeMQ Sources building blocks are:

Binding

Binding is a 1:1 connection between Source and Target. Every Binding runs independently.

binding

Source

Source is an external service that provide ingress data to KubeMQ's channels which then later consumed by services connected to KubeMQ server.

Source can be services such HTTP REST Api, Messaging systems (RabbitMQ, Kafka, MQTT etc).

KubeMQ Sources integrate each one of the supported sources and ingest data into KubeMQ via Targets.

A list of supported sources is below.

Standalone Services

CategoryTargetKindConfigurationExample
HttpHttphttpUsageExample
Messaging
Kafkamessaging.kafkaUsageExample
RabbitMQmessaging.rabbitmqUsageExample
MQTTmessaging.mqttUsageExample
ActiveMQmessaging.activemqUsageExample
IBM-MQmessaging.ibmmqUsageExample
Natsmessaging.natsUsageExample
Storage
Filesystemstorage.filesystemUsage
Miniostorage.minioUsage

Google Cloud Platform (GCP)

CategoryTargetKindConfigurationExample
MessagingPub/Subgcp.pubsubUsageExample

Amazon Web Service (AWS)

CategoryTargetKindConfigurationExample
Messaging
AmazonMQaws.amazonmqUsageExample
mskaws.mskUsageExample
SQSaws.sqsUsageExample
Storage
S3aws.s3Usage

Microsoft Azure

CategoryTargetKindConfigurationExample
EventHubs
EventHubsazure.eventhubsUsageExample
ServiceBus
ServiceBusazure.servicebusUsageExample

Target

The target is a KubeMQ connection which send the data from the sources and route them to the appropriate KubeMQ channel for action, and return back a response if needed.

KubeMQ Sources supports all of KubeMQ's messaging patterns: Queue, Events, Events-Store, Command, and Query.

TypeKindMessage PatternConfiguration
Queuekubemq.queueQueueUsage
Eventskubemq.eventsPub/SubUsage
Events Storekubemq.events-storePub/SubUsage
Commandkubemq.commandRPCUsage
Querykubemq.queryRPCUsage

Installation

Kubernetes

  1. Install KubeMQ Cluster
kubectl apply -f https://get.kubemq.io/deploy
  1. Run KubeMQ Source deployment yaml
kubectl apply -f https://raw.githubusercontent.com/kubemq-hub/kubemq-sources/master/deploy-example.yaml

Binary (Cross-platform)

Download the appropriate version for your platform from KubeMQ Sources Releases. Once downloaded, the binary can be run from anywhere.

Ideally, you should install it somewhere in your PATH for easy use. /usr/local/bin is the most probable location.

Running KubeMQ Sources

./kubemq-sources --config config.yaml

Windows Service

  1. Download the Windows version from KubeMQ Sources Releases. Once downloaded, the binary can be installed from anywhere.
  2. Create config.yaml configuration file and save it to the same location of the Windows binary.

Service Installation

Run:

kubemq-sources.exe --service install

Service Installation With Username and Password

Run:

kubemq-sources.exe --service install --username {your-username} --password {your-password}

Service UnInstall

Run:

kubemq-sources.exe --service uninstall

Service Start

Run:

kubemq-sources.exe --service start

Service Stop

Run:

kubemq-sources.exe --service stop

Service Restart

Run:

kubemq-sources.exe --service restart

NOTE: When running under Windows service, all logs will be emitted to Windows Events Logs.

Configuration

Build Wizard

KubeMQ Sources configuration can be build with Build and Deploy tool https://build.kubemq.io/#/sources

Structure

Config file structure:


apiPort: 8083 # kubemq sources api and health end-point port
bindings:
  - name: clusters-sources # unique binding name
    properties: # Bindings properties such middleware configurations
      log_level: error
      retry_attempts: 3
      retry_delay_milliseconds: 1000
      retry_max_jitter_milliseconds: 100
      retry_delay_type: "back-off"
      rate_per_second: 100
    source:
      kind: http # source kind
      name: name-of-sources # source name 
      properties: # a set of key/value settings per each source kind
        .....
    target:
      kind: kubemq.events # target kind
      name: name-of-target # targets name
      properties: # a set of key/value settings per each target kind
        - .....

Properties

In bindings configuration, KubeMQ Sources support properties setting for each pair of source and target bindings.

These properties contain middleware information settings as follows:

Logs Middleware

KubeMQ Sources support level based logging to console according to as follows:

PropertyDescriptionPossible Values
log_levellog level setting"debug","info","error"
"" - indicate no logging on this bindings

An example for only error level log to console:

bindings:
  - name: sample-binding 
    properties: 
      log_level: error
    source:
    ......  

Retry Middleware

KubeMQ Sources support Retries' target execution before reporting of error back to the source on failed execution.

Retry middleware settings values:

PropertyDescriptionPossible Values
retry_attemptshow many retries before giving up on target executiondefault - 1, or any int number
retry_delay_millisecondshow long to wait between retries in millisecondsdefault - 100ms or any int number
retry_max_jitter_millisecondsmax delay jitter between retriesdefault - 100ms or any int number
retry_delay_typetype of retry delay"back-off" - delay increase on each attempt
"fixed" - fixed time delay
"random" - random time delay

An example for 3 retries with back-off strategy:

bindings:
  - name: sample-binding 
    properties: 
      retry_attempts: 3
      retry_delay_milliseconds: 1000
      retry_max_jitter_milliseconds: 100
      retry_delay_type: "back-off"
    source:
    ......  

Rate Limiter Middleware

KubeMQ Sources support a Rate Limiting of target executions.

Rate Limiter middleware settings values:

PropertyDescriptionPossible Values
rate_per_secondhow many executions per second will be allowed0 - no limitation
1 - n integer times per second

An example for 100 executions per second:

bindings:
  - name: sample-binding 
    properties: 
      rate_per_second: 100
    source:
    ......