This is available as a walkthrough. On Integreatly environment.
1) Create a queue
work-queue-requests
2) Show the applications working
https://order-entry-ui-admin-tutorial-f6e1.apps.latam-6090.open.redhat.com https://order-management-ui-admin-tutorial-f6e1.apps.latam-6090.open.redhat.com
2) Open API Specification
https://orders-fuse-api-admin-tutorial-f6e1.apps.latam-6090.open.redhat.com/openapi.json
3) Setup Broker AMQP
url: amqp://messaging-9dvrzw19hw.enmasse.svc:5672?amqp.saslMechanisms=PLAIN user: user-05ed69f4-7ed8-11ea-b8df-0a580a010007 passwd: I4bvMTyNjwfP0SWkcDQq2bUrUYVyoc
4) Integration
work-queue-requests { "$schema": "http://json-schema.org/draft-04/schema#", "type": "object", "properties": { "product": { "type": "string" }, "quantity": { "type": "number" }, "datetime": { "type": "string" }, "message_id": { "type": "string" } }}
oc new-project fuse-demo oc new-app --template=postgresql-persistent --param=POSTGRESQL_PASSWORD=redhat --param=POSTGRESQL_USER=redhat --param=POSTGRESQL_DATABASE=sampledb
Create and populate database
psql -U redhat -d sampledb
CREATE TABLE users( id serial PRIMARY KEY, name VARCHAR (50), phone VARCHAR (50), age integer );
INSERT INTO users(name, phone, age) VALUES ('Rodrigo Ramalho', '(11) 95474-8099', 30); INSERT INTO users(name, phone, age) VALUES ('Rafael Ramalho', '(61) 99988-8029', 32); INSERT INTO users(name, phone, age) VALUES ('Thiago Araki', '(11) 9999-9999', 33); INSERT INTO users(name, phone, age) VALUES ('Gustavo Luszynsk', '(11) 9999-9999', 33); INSERT INTO users(name, phone, age) VALUES ('Rafael Tuelho', '(11) 9999-9999', 33);
Configure a database connector in Fuse Online
url: jdbc:postgresql://postgresql.fuse-demo:5432/sampledb user: redhat password: redhat
During the API definition, use this schema in datatype:
{ "id": 0, "name": "Rodrigo Ramalho", "phone": "11 95474-8099", "age": 30 }
During the flow implementation, use this queries:
Get All
SELECT * FROM USERS
CREATE USER
INSERT INTO USERS(NAME,PHONE,AGE) VALUES(:#NAME,:#PHONE,:#AGE);
-
Openshift
Create a project
oc new-project livedemo
Install Kamel operator
kamel install
Create a CamelBot.java class and run just to validate if everything is working fine
import org.apache.camel.builder.RouteBuilder; public class CamelBot extends RouteBuilder { @Override public void configure() throws Exception { from("timer:demo") .log("working :)") } }
kamel run CamelBot.java --dev
Start to work in the Telegram Bot, the final version will be something like it:
CamelBot.java
import org.apache.camel.builder.RouteBuilder; import org.apache.camel.Exchange; import org.apache.camel.model.dataformat.JsonLibrary; public class CamelBot extends RouteBuilder { @Override public void configure() throws Exception { from("telegram:bots/{{token}}") .log("command received ${body}") .convertBodyTo(String.class) .choice() .when(simple("${body} == 'joke'")) .log("action joke triggered") .to("http4://api.icndb.com/jokes/random") .unmarshal().json(JsonLibrary.Jackson) .transform(simple("${body[value][joke]}")) .to("telegram:bots/{{token}}") .to("slack:#integration") .when(simple("${body} == 'publish'")) .log("action publish triggered") .otherwise() .setBody().simple("Action not found. Supported actions:\n *joke\n*publish") .to("telegram:bots/{{token}}") .to("slack:#integration"); } }
kamel run CamelBot.java --dev -p token=1283x
To run Slack Integration
Create an application.properties file:
camel.component.slack.webhook-url=https://hooks.slack.com/services/your-token
Create a secret
oc create secret generic camelk-bot --from-file application.properties
Run pointing application.properties
kamel run CamelBot.java --dev --secret=camelk-bot -p token=telegram-token-here