如何从siddhi事件模拟器发送事件到android siddhi应用程序

时间:2018-01-22 05:49:55

标签: wso2 siddhi wso2sp

我在Android上运行了一个siddhi cep应用程序。现在我想通过套接字连接将事件模拟器中的事件从流处理编辑器发送到Android应用程序。直到现在我已经成功地制作了android服务器套接字,它监听我制作的python客户端模拟器。但为了简化这个过程,我可以使用事件模拟器将事件发送到android siddhi应用程序吗?

我想知道我是否可以更改某些配置,以便事件模拟器将事件发送到android套接字,所以我查看了deployment.yaml文件中的设置

enter image description here

但是为HTTP

定义了发送配置
senderConfigurations:
    -
      id: "http-sender"

  # Configuration used for the databridge communication
databridge.config:
    # No of worker threads to consume events
    # THIS IS A MANDATORY FIELD
  workerThreads: 10
    # Maximum amount of messages that can be queued internally in MB
    # THIS IS A MANDATORY FIELD
  maxEventBufferCapacity: 10000000
    # Queue size; the maximum number of events that can be stored in the queue
    # THIS IS A MANDATORY FIELD
  eventBufferSize: 2000
    # Keystore file path
    # THIS IS A MANDATORY FIELD
  keyStoreLocation : ${sys:carbon.home}/resources/security/wso2carbon.jks
    # Keystore password
    # THIS IS A MANDATORY FIELD
  keyStorePassword : wso2carbon
    # Session Timeout value in mins
    # THIS IS A MANDATORY FIELD
  clientTimeoutMin: 30
    # Data receiver configurations
    # THIS IS A MANDATO

提前致谢。如果您需要更多详细信息,请告诉我

编辑1

我实际上找到了解决方法,但它遇到了一些问题。所以基本上我将event generator的输出接收器重定向到端口,使得接收器具有所有数据流。 Stream Processor Studio editor的代码是

    @App:name("PatternMatching")

@App:description('Identify event patterns based on the order of event arrival')

define stream RoomTemperatureStream(roomNo string, temp double);

@sink(type="tcp",  url='tcp://localhost:5001/abc', sync='false', tcp.no.delay='true', keep.alive='true', worker.threads="10", @map(type='text'))
define stream RoomTemperatureAlertStream(roomNo string, initialTemp double, finalTemp double);

--Capture a pattern where the temperature of a room increases by 5 degrees within 2 minutes
@info(name='query1')
from RoomTemperatureStream
select e1.roomNo, e1.temp as initialTemp, e2.temp as finalTemp
insert into RoomTemperatureAlertStream;

它将文本作为文本发送到python服务器,需要先启动,代码为

#!/usr/bin/env python
# Author : Amarjit Singh
import pickle
import socket

import pandas
from pandas import json

if __name__ == "__main__":


    # ------------------ create a socket object-----------------------#
    try:
        serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    except socket.error as err:
        serversocket.close()
        print("socket creation failed with error %s" % (err))

    except KeyboardInterrupt:
        serversocket.close()
        print("KeyboardInterrupt - but server socket was closed ")



    host = "127.0.0.1"
    Server_port = 5001

    # ------------------ binding to the port -----------------------#

    try:

        serversocket.bind((host, Server_port))
        serversocket.listen(50)  # queue up to 5 requests

        print("\n Server has started and waiting for connection request   ..... ")

        # bind to the port
        while True:  # extra while is created  so that server runs even if there is no data

            running = True
            clientsocket, addr = serversocket.accept()  # accept a connection from client



            print("Got a connection from Server%s" % str(addr))  # show connection success message


            while running:

                receivedData = clientsocket.recv(2048)
                # json = receivedData

                if receivedData:

                    print(receivedData)
                    print(receivedData[0])
                    print(receivedData[1])
                    print(receivedData[2])


                    # roomNo = str(receivedData[0])
                    # temp = int(client_tuple[1])  # from unicode to int
                    #
                    # print(" roomNo = %d:  UUID = %s temp = %d" % (roomNo, temp))


    except socket.error as err:
        serversocket.close()
        print("socket creation failed with error %s" % (err))

    except KeyboardInterrupt:
        serversocket.close()
        print("KeyboardInterrupt - but server socket was closed ")

最初,我是从模拟器发送json数据,但pickle.loadsjson.loads无效。但文本的问题是数据显示为

b'\x02\x00\x00\x00t\x00\x00\x003bed14d31-6697-4a74-8a3f-30dc012914ad-localhost:5001\x00\x00\x00\x03abc\x00\x00\x002roomNo:"X0ZYp",\ninitialTemp:15.97,\nfinalTemp:17.22'

b'\x02\x00\x00\x00t\x00\x00\x003bed14d31-6697-4a74-8a3f-30dc012914ad-localhost:5001\x00\x00\x00\x03abc\x00\x00\x002roomNo:"2X951",\ninitialTemp:13.42,\nfinalTemp:10.76'

b'\x02\x00\x00\x00t\x00\x00\x003bed14d31-6697-4a74-8a3f-30dc012914ad-localhost:5001\x00\x00\x00\x03abc\x00\x00\x002roomNo:"PUaJA",\ninitialTemp:15.46,\nfinalTemp:16.26'

b'\x02\x00\x00\x00t\x00\x00\x003bed14d31-6697-4a74-8a3f-30dc012914ad-localhost:5001\x00\x00\x00\x03abc\x00\x00\x002roomNo:"pnz0i",\ninitialTemp:10.42,\nfinalTemp:15.82'

如何删除这些额外数据?

1 个答案:

答案 0 :(得分:2)

Siddhi has a WebSocket connector[1] and it's still WIP. Using this dependency you will be able to add a WebSocket sink to your app and send events from that.

Unfortunately, you cannot directly send events from Stream Processor[2] Studio/Editor but if you have an app running in Stream Processor Editor and if it has a WebSocket sink then you can send events to App's sink stream from the Simulator which will intern send that message via WebSocket to the Siddhi app in android.

You can only simulate apps running inside the editor via the Event Simulator or simulate apps deployed in Stream Processor worker nodes via Event Simulator API.

[1]https://github.com/wso2-extensions/siddhi-io-websocket

[2]https://wso2.com/analytics