Setup a RedisClientCloudEndpoint with TLS Authentication, wire graph and a redis-server.
In this tutorial we will set up a RedisClientCloudEndpoint
that connects to a running Redis server secured with TLS and requires a client key pair for 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.
Generate Redis Server Certificates and client keypair
To generate the required Redis Server TLS certificate and the client keypair we will use an example script provided by the Redis Team. Run this script requires openssl
to be installed on the system. Download the gen-test-certs.sh and run the script following the instructions on the terminal console.
Warning
Check the script has the execution privilege, ontherwise add the execute flag with the command sudo chmod +x gen-test-certs.sh
Several certificates will be generated in the folder tests/tls
. In this tutorial we will use the following certificate files:
tests/tls/ca.crt
Certificate Authority certificate used for TLS connection.tests/tls/redis.crt
Client Public key certificate.tests/tls/redis.key
Client private key.
Add the client certificate to the SSLKeystore
We will use the default SSLKeystore
as store for our certificates, however a custom keystore can be created and used as certicicates provider within RedisClientDataTransport
component configuration.
Go to the Security section and select the Certificate List tab, then click on the Add button. In the subsequent view select Certificate and then select SSLKeystore
as keystore. Put a storage alias and copy/paste the CA certificate from the file tests/tls/ca.crt
. Repeat the same procedure for the Private/Public Key Pair paying attention to put as storage alias redis-client-key
and copy/paste the content of the file tests/tls/redis.key
as Private Key and the content of the file tests/tls/redis.crt
as Certificate.
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 rediss://: 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 TLS: TLS-based authentication. Set the Enable hostname verification on false and then elect the the SSLKeystore as KeystoreService Target Filter.
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="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="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>TLS</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>rediss://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="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 with TLS support
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:
Create a file named redis-tls-auth.conf
with the following line content:
tls-port 6379
port 0
tls-cert-file ./tests/tls/redis.crt
tls-key-file ./tests/tls/redis.key
tls-ca-cert-file ./tests/tls/ca.crt
protected-mode no
and start the server with the following command:
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 -