Я пытаюсь отправить синхронный запрос, используя http-запрос (источник) и http-ответ (приемник) в Siddhi на примере здесь.
У меня есть API, который я могу использовать с помощью команды curl. Это моя команда curl и вывод.
curl http://localhost/parser/ -d '{"q":"test input", "project":"sample_project","model":"sample_model"}'
{
"intent": {
"name": "Cat A",
"confidence": 0.7
},
"entities": [],
"intent_ranking": [
{
"name": "Cat A",
"confidence": 0.7
},
{
"name": "Cat B",
"confidence": 0.6
},
{
"name": "Cat C",
"confidence": 0.01
],
"text": "test input",
"project": "sample_project",
"model": "sample_model"
}
Я пытаюсь сделать что-то подобное, используя Siddhi.
Это мой код.
@source(type='http-request', source.id='StreamSource', receiver.url='http://localhost/parser', connection.timeout='150000', @map(type='json', @attributes(messageId='trp:messageId')))
define stream SourceStream (messageId string, text string, project string, model string);
@sink(type='http-response', source.id='StreamSource', message.id='{{messageId}}', @map(type='json', @payload('{{results}}')) define stream SinkStream (messageId string, results String);
Ошибка, которую я получаю в строке @sink, заключается в следующем:
Syntax error in SiddhiQL, no viable alternative at input ';\r\n\r\n@sink(type='http-response', source.id='StockStreamSource', message.id='{{messageId}}', @map(type='json', @payload('{{results}}')) define'. no viable alternative at input ';\r\n\r\n@sink(type='http-response', source.id='StockStreamSource', message.id='{{messageId}}', @map(type='json', @payload('{{results}}')) define'
Есть ли что-то, что мне здесь не хватает?
Вам не хватает круглых скобок в конце определения раковины. Ниже приведено фиксированное определение
@sink(type='http-response', source.id='StreamSource', message.id='{{messageId}}', @map(type='json', @payload('{{results}}')))
define stream SinkStream (messageId string, results String);
После этого вы столкнетесь с проблемами, так как вы сопоставили только атрибут messagedID во входном сопоставлении. то есть
@map(type='json', @attributes(messageId='trp:messageId'))
Пожалуйста, отобразите и другие атрибуты.
Спасибо за предложение Тишан. Для сопоставления атрибутов в документе упоминается использование «trp» для messageId. Следует ли использовать то же самое и для других атрибутов? Например: @attributes(messageId='trp:messageId', text='trp:text', project='trp:project', model='trp:model') Так ли это?