Skip to content

Setup a simple RedisClientCloudEndpoint, a wire graph and a redis-server.

In this tutorial we will set up a simple RedisClientCloudEndpoint that connects to a running Redis server without authentication. We will set up a RedisClientPublisher that publishes data in json format on a test topic and a RedisClientSubscriber that receives data on the same topic. In order to watch the data flow we will use a Wire Graph.

Install the com.eurotech.framework.redis.client.feature

Install the com.eurotech.framework.redis.client.feature package from the Eclipse Marketplace using the Packages section in the ESF Web UI. For the purpose of this tutorial we will also install the package com.eurotech.wire.script.filter to leverage on the Javascript Filter for data generation.

Create a RedisClientCloudEndpoint

Create a RedisClientCloudEndpoint from the Cloud Connections section in the ESF Web UI changing the following properties as described:

  • In RedisClientCloudEndpoint-PREFIX change the Payload Encoding to Simple JSON
  • In RedisClientDataService-PREFIX change the Connect Auto-on-startup to true and Connect Retry-interval to 10
  • In RedisClientDataTransport-PREFIX change the Server URIs to redis://<redis-server-ip>:<redis-server-port> where redis-server-ip need to be the host where Redis is running and redis-server-port the port where the server is listening for connection (e.g. redis://localhost:6379). Change the Authentication Method to No Authentication.

After selecting the new created RedisClientCloudEndpoint, create a new RedisClientPublisher using the New Pub/Sub button on top menu. Configure the publisher with the following properties:

  • Producer topic: test
  • Publish metrics: true

Create a new RedisClientSubscriber using test as Subscriber topic.

You can use the following partial snapshot to re-create the above configuration paying attention to replacing the Server URIs in the RedisClientDataTransport-1 with the right one:

    <esf:configuration pid="com.eurotech.framework.redis.client.cloudconnection.RedisClientCloudEndpoint-1">
        <esf:properties>
            <esf:property array="false" encrypted="false" name="encode.gzip" type="Boolean">
                <esf:value>false</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="DataService.target" type="String">
                <esf:value>(kura.service.pid=com.eurotech.framework.redis.client.cloudconnection.RedisClientDataService-1)</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="payload.encoding" type="String">
                <esf:value>simple-json</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="cloud.connection.factory.pid" type="String">
                <esf:value>com.eurotech.framework.redis.client.cloudconnection.RedisClientCloudConnectionFactory</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="service.factoryPid" type="String">
                <esf:value>com.eurotech.framework.redis.client.cloudconnection.RedisClientCloudEndpoint</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="kura.service.pid" type="String">
                <esf:value>com.eurotech.framework.redis.client.cloudconnection.RedisClientCloudEndpoint-1</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="service.pid" type="String">
                <esf:value>com.eurotech.framework.redis.client.cloudconnection.RedisClientCloudEndpoint-1671006773951-0</esf:value>
            </esf:property>
        </esf:properties>
    </esf:configuration>
    <esf:configuration pid="com.eurotech.framework.redis.client.cloudconnection.RedisClientDataService-1">
        <esf:properties>
            <esf:property array="false" encrypted="false" name="store.purge-age" type="Integer">
                <esf:value>60</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="in-flight-messages.congestion-timeout" type="Integer">
                <esf:value>0</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="enable.rate.limit" type="Boolean">
                <esf:value>true</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="in-flight-messages.max-number" type="Integer">
                <esf:value>9</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="service.factoryPid" type="String">
                <esf:value>org.eclipse.kura.data.DataService</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="connection.recovery.max.failures" type="Integer">
                <esf:value>10</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="disconnect.quiesce-timeout" type="Integer">
                <esf:value>10</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="kura.service.pid" type="String">
                <esf:value>com.eurotech.framework.redis.client.cloudconnection.RedisClientDataService-1</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="service.pid" type="String">
                <esf:value>org.eclipse.kura.data.DataService-1671006774160-18</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="store.housekeeper-interval" type="Integer">
                <esf:value>900</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="connect.auto-on-startup" type="Boolean">
                <esf:value>true</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="rate.limit.time.unit" type="String">
                <esf:value>SECONDS</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="rate.limit.average" type="Integer">
                <esf:value>1</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="store.db.service.pid" type="String">
                <esf:value>org.eclipse.kura.db.H2DbService</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="DataTransportService.target" type="String">
                <esf:value>(kura.service.pid=com.eurotech.framework.redis.client.cloudconnection.transport.RedisClientDataTransport-1)</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="connect.retry-interval" type="Integer">
                <esf:value>10</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="enable.recovery.on.connection.failure" type="Boolean">
                <esf:value>false</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="rate.limit.burst.size" type="Integer">
                <esf:value>1</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="in-flight-messages.republish-on-new-session" type="Boolean">
                <esf:value>true</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="store.capacity" type="Integer">
                <esf:value>10000</esf:value>
            </esf:property>
        </esf:properties>
    </esf:configuration>
    <esf:configuration pid="com.eurotech.framework.redis.client.cloudconnection.transport.RedisClientDataTransport-1">
        <esf:properties>
            <esf:property array="false" encrypted="false" name="authentication.method" type="String">
                <esf:value>NO-AUTH</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="enable.hostname.verification" type="Boolean">
                <esf:value>false</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="servers" type="String">
                <esf:value>redis://localhost:6379 </esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="authentication.username" type="String">
                <esf:value/>
            </esf:property>
            <esf:property array="false" encrypted="false" name="database-number" type="Integer">
                <esf:value>0</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="connection-mode" type="String">
                <esf:value>SIMPLE</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="KeystoreService.target" type="String">
                <esf:value>(kura.service.pid=SSLKeystore)</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="service.factoryPid" type="String">
                <esf:value>com.eurotech.framework.redis.client.cloudconnection.transport.RedisClientDataTransport</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="cloud.endpoint.service.pid" type="String">
                <esf:value>com.eurotech.framework.redis.client.cloudconnection.RedisClientCloudEndpoint-1</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="client.id" type="String">
                <esf:value/>
            </esf:property>
            <esf:property array="false" encrypted="false" name="kura.service.pid" type="String">
                <esf:value>com.eurotech.framework.redis.client.cloudconnection.transport.RedisClientDataTransport-1</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="service.pid" type="String">
                <esf:value>com.eurotech.framework.redis.client.cloudconnection.transport.RedisClientDataTransport-1671006774172-19</esf:value>
            </esf:property>
        </esf:properties>
    </esf:configuration>    
    <esf:configuration pid="pub">
        <esf:properties>
            <esf:property array="false" encrypted="false" name="publish.metrics" type="Boolean">
                <esf:value>true</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="topic" type="String">
                <esf:value>test</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="priority" type="Integer">
                <esf:value>7</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="publish.position" type="Boolean">
                <esf:value>false</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="service.factoryPid" type="String">
                <esf:value>com.eurotech.framework.redis.client.cloudconnection.publisher.RedisClientPublisher</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="cloud.endpoint.service.pid" type="String">
                <esf:value>com.eurotech.framework.redis.client.cloudconnection.RedisClientCloudEndpoint-1</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="kura.service.pid" type="String">
                <esf:value>pub</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="service.pid" type="String">
                <esf:value>com.eurotech.framework.redis.client.cloudconnection.publisher.RedisClientPublisher-1671008631675-22</esf:value>
            </esf:property>
        </esf:properties>
    </esf:configuration>
    <esf:configuration pid="sub">
        <esf:properties>
            <esf:property array="false" encrypted="false" name="topic" type="String">
                <esf:value>test</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="service.factoryPid" type="String">
                <esf:value>com.eurotech.framework.redis.client.cloudconnection.subscriber.RedisClientSubscriber</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="cloud.endpoint.service.pid" type="String">
                <esf:value>com.eurotech.framework.redis.client.cloudconnection.RedisClientCloudEndpoint-1</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="kura.service.pid" type="String">
                <esf:value>sub</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="service.pid" type="String">
                <esf:value>com.eurotech.framework.redis.client.cloudconnection.subscriber.RedisClientSubscriber-1671008950439-31</esf:value>
            </esf:property>
        </esf:properties>
    </esf:configuration>

Setup a simple Redis server

Install the redis-server package following the instructions here

Disable the default service on Linux system

On Linux system redis package is shipped with a default running service. Stop and disable it with the following commands:

sudo systemctl stop redis-server
sudo systemctl disable redis-server

Create a file named redis-no-auth.conf with the following line protected-mode no to allows the Redis server to be accessed by external hosts and start the server with the following command:

redis-server ./redis-no-auth.conf

Now the Redis server is running in foreground.

Create a simple wire graph

Now we will create a simple wire graph that push some data every second, generated through the Javascript Filter wire component, to the Redis server using the RedisClientPublisher. The wire graph will also retrieve the data using a RedisClientSubscriber and display them to the log console.

You can use the following snapshot to load a the graph

<?xml version="1.0" encoding="UTF-8"?><esf:configurations xmlns:esf="http://eurotech.com/esf/2.0" xmlns:ocd="http://www.osgi.org/xmlns/metatype/v1.2.0">
    <esf:configuration pid="t1">
        <esf:properties>
            <esf:property array="false" encrypted="false" name="factoryPid" type="String">
                <esf:value>org.eclipse.kura.wire.Timer</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="componentId" type="String">
                <esf:value>t1</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="factoryComponent" type="Boolean">
                <esf:value>false</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="simple.first.tick.policy" type="String">
                <esf:value>DEFAULT</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="componentDescription" type="String">
                <esf:value>A wire component that fires a ticking event on every configured interval</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="simple.interval" type="Integer">
                <esf:value>5</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="simple.time.unit" type="String">
                <esf:value>SECONDS</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="type" type="String">
                <esf:value>SIMPLE</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="service.factoryPid" type="String">
                <esf:value>org.eclipse.kura.wire.Timer</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="cron.interval" type="String">
                <esf:value>0/10 * * * * ?</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="kura.service.pid" type="String">
                <esf:value>t1</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="service.pid" type="String">
                <esf:value>org.eclipse.kura.wire.Timer-1671008653729-23</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="emitter.port.count" type="Integer">
                <esf:value>1</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="receiver.port.count" type="Integer">
                <esf:value>0</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="componentName" type="String">
                <esf:value>Timer</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="simple.custom.first.tick.interval" type="Integer">
                <esf:value>0</esf:value>
            </esf:property>
        </esf:properties>
    </esf:configuration>
    <esf:configuration pid="p1">
        <esf:properties>
            <esf:property array="false" encrypted="false" name="factoryPid" type="String">
                <esf:value>org.eclipse.kura.wire.CloudPublisher</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="componentId" type="String">
                <esf:value>p1</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="factoryComponent" type="Boolean">
                <esf:value>false</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="componentDescription" type="String">
                <esf:value>A wire component which publishes data to the cloud platform</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="CloudPublisher.target" type="String">
                <esf:value>(kura.service.pid=pub)</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="service.factoryPid" type="String">
                <esf:value>org.eclipse.kura.wire.CloudPublisher</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="kura.service.pid" type="String">
                <esf:value>p1</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="service.pid" type="String">
                <esf:value>org.eclipse.kura.wire.CloudPublisher-1671008683216-24</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="emitter.port.count" type="Integer">
                <esf:value>0</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="receiver.port.count" type="Integer">
                <esf:value>1</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="set.body.from.property" type="String">
                <esf:value/>
            </esf:property>
            <esf:property array="false" encrypted="false" name="componentName" type="String">
                <esf:value>Publisher</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="publish.position" type="String">
                <esf:value>none</esf:value>
            </esf:property>
        </esf:properties>
    </esf:configuration>
    <esf:configuration pid="j1">
        <esf:properties>
            <esf:property array="false" encrypted="false" name="factoryPid" type="String">
                <esf:value>org.eclipse.kura.wire.ScriptFilter</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="componentId" type="String">
                <esf:value>j1</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="factoryComponent" type="Boolean">
                <esf:value>false</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="componentDescription" type="String">
                <esf:value>A wire component that provides scripting functionalities in JavaScript.</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="service.factoryPid" type="String">
                <esf:value>org.eclipse.kura.wire.ScriptFilter</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="script" type="String">
                <esf:value>var record= newWireRecord()

record.a= newIntegerValue(1)
record.b= newIntegerValue(2)
record.c= newIntegerValue(3)
record.d= newIntegerValue(4)
record.e= newIntegerValue(5)
record.f= newIntegerValue(6)

output.add(record)</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="kura.service.pid" type="String">
                <esf:value>j1</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="service.pid" type="String">
                <esf:value>org.eclipse.kura.wire.ScriptFilter-1671008840387-26</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="emitter.port.count" type="Integer">
                <esf:value>1</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="receiver.port.count" type="Integer">
                <esf:value>1</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="componentName" type="String">
                <esf:value>Javascript Filter</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="script.context.drop" type="Boolean">
                <esf:value>false</esf:value>
            </esf:property>
        </esf:properties>
    </esf:configuration>
    <esf:configuration pid="s1">
        <esf:properties>
            <esf:property array="false" encrypted="false" name="factoryPid" type="String">
                <esf:value>org.eclipse.kura.wire.CloudSubscriber</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="CloudSubscriber.target" type="String">
                <esf:value>(kura.service.pid=sub)</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="componentId" type="String">
                <esf:value>s1</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="factoryComponent" type="Boolean">
                <esf:value>false</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="componentDescription" type="String">
                <esf:value>A wire component which subscribes data from the cloud platform</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="service.factoryPid" type="String">
                <esf:value>org.eclipse.kura.wire.CloudSubscriber</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="kura.service.pid" type="String">
                <esf:value>s1</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="service.pid" type="String">
                <esf:value>org.eclipse.kura.wire.CloudSubscriber-1671009016399-32</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="emitter.port.count" type="Integer">
                <esf:value>1</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="body.property.type" type="String">
                <esf:value>BYTE_ARRAY</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="set.property.from.body" type="String">
                <esf:value/>
            </esf:property>
            <esf:property array="false" encrypted="false" name="receiver.port.count" type="Integer">
                <esf:value>0</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="componentName" type="String">
                <esf:value>Subscriber</esf:value>
            </esf:property>
        </esf:properties>
    </esf:configuration>
    <esf:configuration pid="l2">
        <esf:properties>
            <esf:property array="false" encrypted="false" name="emitter.port.count" type="Integer">
                <esf:value>0</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="factoryPid" type="String">
                <esf:value>org.eclipse.kura.wire.Logger</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="componentId" type="String">
                <esf:value>l2</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="receiver.port.count" type="Integer">
                <esf:value>1</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="factoryComponent" type="Boolean">
                <esf:value>false</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="componentDescription" type="String">
                <esf:value>A wire component which logs data as received from upstream connected Wire Components</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="log.verbosity" type="String">
                <esf:value>VERBOSE</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="componentName" type="String">
                <esf:value>Logger</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="service.factoryPid" type="String">
                <esf:value>org.eclipse.kura.wire.Logger</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="kura.service.pid" type="String">
                <esf:value>l2</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="service.pid" type="String">
                <esf:value>org.eclipse.kura.wire.Logger-1671009016412-33</esf:value>
            </esf:property>
        </esf:properties>
    </esf:configuration>
    <esf:configuration pid="org.eclipse.kura.wire.graph.WireGraphService">
        <esf:properties>
            <esf:property array="false" encrypted="false" name="WireGraph" type="String">
                <esf:value>{"components":[{"pid":"t1","inputPortCount":0,"outputPortCount":1,"renderingProperties":{"position":{"x":-1220,"y":-100},"inputPortNames":{},"outputPortNames":{}}},{"pid":"p1","inputPortCount":1,"outputPortCount":0,"renderingProperties":{"position":{"x":-760,"y":-100},"inputPortNames":{},"outputPortNames":{}}},{"pid":"j1","inputPortCount":1,"outputPortCount":1,"renderingProperties":{"position":{"x":-960,"y":-100},"inputPortNames":{},"outputPortNames":{}}},{"pid":"s1","inputPortCount":0,"outputPortCount":1,"renderingProperties":{"position":{"x":-1220,"y":0},"inputPortNames":{},"outputPortNames":{}}},{"pid":"l2","inputPortCount":1,"outputPortCount":0,"renderingProperties":{"position":{"x":-960,"y":0},"inputPortNames":{},"outputPortNames":{}}}],"wires":[{"emitter":"t1","emitterPort":0,"receiver":"j1","receiverPort":0},{"emitter":"j1","emitterPort":0,"receiver":"p1","receiverPort":0},{"emitter":"s1","emitterPort":0,"receiver":"l2","receiverPort":0}]}</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="kura.service.pid" type="String">
                <esf:value>org.eclipse.kura.wire.graph.WireGraphService</esf:value>
            </esf:property>
            <esf:property array="false" encrypted="false" name="service.pid" type="String">
                <esf:value>org.eclipse.kura.wire.graph.WireGraphService</esf:value>
            </esf:property>
        </esf:properties>
    </esf:configuration>
</esf:configurations>

After performed the graph import, if the RedisCloudConnector is configured in the proper way, you should be able to see the data flow in the ESF log console.

2022-12-15 09:58:25 2022-12-15T08:58:25,666 [lettuce-nioEventLoop-27-12] INFO  o.e.k.i.w.l.Logger - Received WireEnvelope from org.eclipse.kura.wire.CloudSubscriber-1671009016399-32
2022-12-15 09:58:25 2022-12-15T08:58:25,666 [lettuce-nioEventLoop-27-12] INFO  o.e.k.i.w.l.Logger - Record List content: 
2022-12-15 09:58:25 2022-12-15T08:58:25,666 [lettuce-nioEventLoop-27-12] INFO  o.e.k.i.w.l.Logger -   Record content: 
2022-12-15 09:58:25 2022-12-15T08:58:25,666 [lettuce-nioEventLoop-27-12] INFO  o.e.k.i.w.l.Logger -     a : 1
2022-12-15 09:58:25 2022-12-15T08:58:25,666 [lettuce-nioEventLoop-27-12] INFO  o.e.k.i.w.l.Logger -     b : 2
2022-12-15 09:58:25 2022-12-15T08:58:25,666 [lettuce-nioEventLoop-27-12] INFO  o.e.k.i.w.l.Logger -     c : 3
2022-12-15 09:58:25 2022-12-15T08:58:25,666 [lettuce-nioEventLoop-27-12] INFO  o.e.k.i.w.l.Logger -     d : 4
2022-12-15 09:58:25 2022-12-15T08:58:25,666 [lettuce-nioEventLoop-27-12] INFO  o.e.k.i.w.l.Logger -     e : 5
2022-12-15 09:58:25 2022-12-15T08:58:25,666 [lettuce-nioEventLoop-27-12] INFO  o.e.k.i.w.l.Logger -     f : 6
2022-12-15 09:58:25 2022-12-15T08:58:25,666 [lettuce-nioEventLoop-27-12] INFO  o.e.k.i.w.l.Logger -