├── .gitpod.Dockerfile ├── materials ├── img │ ├── splash.png │ ├── logo-yt.png │ ├── astra-00-logo.jpg │ ├── gitpod-1-home.png │ ├── gitpod-2-conf.png │ ├── gitpod-6-dual.png │ ├── kesque-00-web.png │ ├── kesque-08-plan.png │ ├── logo-katacoda.png │ ├── yt-subscribe.jpeg │ ├── astra-01-signin.png │ ├── astra-06-summary.png │ ├── kesque-01-login.png │ ├── kesque-11-topic1.png │ ├── kesque-12-topic2.png │ ├── kesque-13-topic3.png │ ├── kesque-14-token.png │ ├── kesque-23-topic.png │ ├── logo-katacoda-2.png │ ├── astra-02-createdb1.png │ ├── astra-03-createdb2.png │ ├── astra-04-createdb3.png │ ├── astra-05-createdb4.png │ ├── katacoda-scenario-1.png │ ├── katacoda-scenario-2.png │ ├── katacoda-scenario-3.png │ ├── katacoda-scenario-4.png │ ├── katacoda-scenario-5.png │ ├── katacoda-scenario-6.png │ ├── katacoda-scenario-7.png │ ├── katacoda-scenario-8.png │ ├── katacoda-scenario-9.png │ ├── kesque-07-dashboard.png │ ├── kesque-09-cluster.png │ ├── kesque-10-namespace.png │ ├── kesque-16-producer1.png │ ├── kesque-17-producer2.png │ ├── kesque-18-producer3.png │ ├── kesque-19-producer4.png │ ├── kesque-24-consumer.png │ ├── streaming-09-astra.png │ ├── astra-07-cqlconsole1.png │ ├── astra-08-cqlconsole2.png │ ├── astra-09-cqlconsole3.png │ ├── astra-10-securebundle.png │ ├── gitpod-3-logproducer.png │ ├── gitpod-4-newterminal.png │ ├── gitpod-5-newterminal.png │ ├── katacoda-scenario-10.png │ ├── katacoda-scenario-11.png │ ├── katacoda-scenario-12.png │ ├── katacoda-scenario-13.png │ ├── kesque-15-codesample.png │ ├── kesque-20-webclient-1.png │ ├── kesque-21-webclient-2.png │ ├── kesque-22-webclient-3.png │ ├── resources-01-slashdev.png │ ├── resources-02-academy.png │ ├── resources-03-katacoda.png │ ├── resources-05-discord.png │ ├── resources-06-youtube.png │ ├── streaming-01-addsink1.png │ ├── streaming-02-addsink2.png │ ├── streaming-03-addsink3.png │ ├── streaming-04-addsink4.png │ ├── streaming-05-addsink5.png │ ├── streaming-06-created1.png │ ├── streaming-07-created2.png │ ├── streaming-08-created3.png │ ├── kesque-02-createtenant1.png │ ├── kesque-03-createtenant2.png │ ├── kesque-04-createtenant3.png │ ├── kesque-05-createtenant4.png │ ├── kesque-06-createtenant5.png │ ├── kesque-25-subscription.png │ ├── resources-04-workshops.png │ └── resources-07-community.png └── pulsar_presentation.pdf ├── .theia └── settings.json ├── .gitignore ├── .gitpod.yml ├── pulsar-demo ├── src │ └── main │ │ ├── resources │ │ ├── logback.xml │ │ └── application.properties │ │ └── java │ │ └── com │ │ └── datastax │ │ └── pulsar │ │ ├── DemoBean.java │ │ ├── SimplePulsarProducer.java │ │ ├── SimplePulsarConsumer.java │ │ └── DemoKesqueConfiguration.java └── pom.xml └── README.md /.gitpod.Dockerfile: -------------------------------------------------------------------------------- 1 | FROM gitpod/workspace-full -------------------------------------------------------------------------------- /materials/img/splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/splash.png -------------------------------------------------------------------------------- /materials/img/logo-yt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/logo-yt.png -------------------------------------------------------------------------------- /materials/img/astra-00-logo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/astra-00-logo.jpg -------------------------------------------------------------------------------- /materials/img/gitpod-1-home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/gitpod-1-home.png -------------------------------------------------------------------------------- /materials/img/gitpod-2-conf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/gitpod-2-conf.png -------------------------------------------------------------------------------- /materials/img/gitpod-6-dual.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/gitpod-6-dual.png -------------------------------------------------------------------------------- /materials/img/kesque-00-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/kesque-00-web.png -------------------------------------------------------------------------------- /materials/img/kesque-08-plan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/kesque-08-plan.png -------------------------------------------------------------------------------- /materials/img/logo-katacoda.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/logo-katacoda.png -------------------------------------------------------------------------------- /materials/img/yt-subscribe.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/yt-subscribe.jpeg -------------------------------------------------------------------------------- /materials/img/astra-01-signin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/astra-01-signin.png -------------------------------------------------------------------------------- /materials/img/astra-06-summary.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/astra-06-summary.png -------------------------------------------------------------------------------- /materials/img/kesque-01-login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/kesque-01-login.png -------------------------------------------------------------------------------- /materials/img/kesque-11-topic1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/kesque-11-topic1.png -------------------------------------------------------------------------------- /materials/img/kesque-12-topic2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/kesque-12-topic2.png -------------------------------------------------------------------------------- /materials/img/kesque-13-topic3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/kesque-13-topic3.png -------------------------------------------------------------------------------- /materials/img/kesque-14-token.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/kesque-14-token.png -------------------------------------------------------------------------------- /materials/img/kesque-23-topic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/kesque-23-topic.png -------------------------------------------------------------------------------- /materials/img/logo-katacoda-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/logo-katacoda-2.png -------------------------------------------------------------------------------- /materials/pulsar_presentation.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/pulsar_presentation.pdf -------------------------------------------------------------------------------- /materials/img/astra-02-createdb1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/astra-02-createdb1.png -------------------------------------------------------------------------------- /materials/img/astra-03-createdb2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/astra-03-createdb2.png -------------------------------------------------------------------------------- /materials/img/astra-04-createdb3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/astra-04-createdb3.png -------------------------------------------------------------------------------- /materials/img/astra-05-createdb4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/astra-05-createdb4.png -------------------------------------------------------------------------------- /materials/img/katacoda-scenario-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/katacoda-scenario-1.png -------------------------------------------------------------------------------- /materials/img/katacoda-scenario-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/katacoda-scenario-2.png -------------------------------------------------------------------------------- /materials/img/katacoda-scenario-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/katacoda-scenario-3.png -------------------------------------------------------------------------------- /materials/img/katacoda-scenario-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/katacoda-scenario-4.png -------------------------------------------------------------------------------- /materials/img/katacoda-scenario-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/katacoda-scenario-5.png -------------------------------------------------------------------------------- /materials/img/katacoda-scenario-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/katacoda-scenario-6.png -------------------------------------------------------------------------------- /materials/img/katacoda-scenario-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/katacoda-scenario-7.png -------------------------------------------------------------------------------- /materials/img/katacoda-scenario-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/katacoda-scenario-8.png -------------------------------------------------------------------------------- /materials/img/katacoda-scenario-9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/katacoda-scenario-9.png -------------------------------------------------------------------------------- /materials/img/kesque-07-dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/kesque-07-dashboard.png -------------------------------------------------------------------------------- /materials/img/kesque-09-cluster.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/kesque-09-cluster.png -------------------------------------------------------------------------------- /materials/img/kesque-10-namespace.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/kesque-10-namespace.png -------------------------------------------------------------------------------- /materials/img/kesque-16-producer1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/kesque-16-producer1.png -------------------------------------------------------------------------------- /materials/img/kesque-17-producer2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/kesque-17-producer2.png -------------------------------------------------------------------------------- /materials/img/kesque-18-producer3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/kesque-18-producer3.png -------------------------------------------------------------------------------- /materials/img/kesque-19-producer4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/kesque-19-producer4.png -------------------------------------------------------------------------------- /materials/img/kesque-24-consumer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/kesque-24-consumer.png -------------------------------------------------------------------------------- /materials/img/streaming-09-astra.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/streaming-09-astra.png -------------------------------------------------------------------------------- /.theia/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.autoSave": "on", 3 | "java.configuration.updateBuildConfiguration": "interactive" 4 | } 5 | 6 | -------------------------------------------------------------------------------- /materials/img/astra-07-cqlconsole1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/astra-07-cqlconsole1.png -------------------------------------------------------------------------------- /materials/img/astra-08-cqlconsole2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/astra-08-cqlconsole2.png -------------------------------------------------------------------------------- /materials/img/astra-09-cqlconsole3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/astra-09-cqlconsole3.png -------------------------------------------------------------------------------- /materials/img/astra-10-securebundle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/astra-10-securebundle.png -------------------------------------------------------------------------------- /materials/img/gitpod-3-logproducer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/gitpod-3-logproducer.png -------------------------------------------------------------------------------- /materials/img/gitpod-4-newterminal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/gitpod-4-newterminal.png -------------------------------------------------------------------------------- /materials/img/gitpod-5-newterminal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/gitpod-5-newterminal.png -------------------------------------------------------------------------------- /materials/img/katacoda-scenario-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/katacoda-scenario-10.png -------------------------------------------------------------------------------- /materials/img/katacoda-scenario-11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/katacoda-scenario-11.png -------------------------------------------------------------------------------- /materials/img/katacoda-scenario-12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/katacoda-scenario-12.png -------------------------------------------------------------------------------- /materials/img/katacoda-scenario-13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/katacoda-scenario-13.png -------------------------------------------------------------------------------- /materials/img/kesque-15-codesample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/kesque-15-codesample.png -------------------------------------------------------------------------------- /materials/img/kesque-20-webclient-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/kesque-20-webclient-1.png -------------------------------------------------------------------------------- /materials/img/kesque-21-webclient-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/kesque-21-webclient-2.png -------------------------------------------------------------------------------- /materials/img/kesque-22-webclient-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/kesque-22-webclient-3.png -------------------------------------------------------------------------------- /materials/img/resources-01-slashdev.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/resources-01-slashdev.png -------------------------------------------------------------------------------- /materials/img/resources-02-academy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/resources-02-academy.png -------------------------------------------------------------------------------- /materials/img/resources-03-katacoda.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/resources-03-katacoda.png -------------------------------------------------------------------------------- /materials/img/resources-05-discord.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/resources-05-discord.png -------------------------------------------------------------------------------- /materials/img/resources-06-youtube.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/resources-06-youtube.png -------------------------------------------------------------------------------- /materials/img/streaming-01-addsink1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/streaming-01-addsink1.png -------------------------------------------------------------------------------- /materials/img/streaming-02-addsink2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/streaming-02-addsink2.png -------------------------------------------------------------------------------- /materials/img/streaming-03-addsink3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/streaming-03-addsink3.png -------------------------------------------------------------------------------- /materials/img/streaming-04-addsink4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/streaming-04-addsink4.png -------------------------------------------------------------------------------- /materials/img/streaming-05-addsink5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/streaming-05-addsink5.png -------------------------------------------------------------------------------- /materials/img/streaming-06-created1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/streaming-06-created1.png -------------------------------------------------------------------------------- /materials/img/streaming-07-created2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/streaming-07-created2.png -------------------------------------------------------------------------------- /materials/img/streaming-08-created3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/streaming-08-created3.png -------------------------------------------------------------------------------- /materials/img/kesque-02-createtenant1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/kesque-02-createtenant1.png -------------------------------------------------------------------------------- /materials/img/kesque-03-createtenant2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/kesque-03-createtenant2.png -------------------------------------------------------------------------------- /materials/img/kesque-04-createtenant3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/kesque-04-createtenant3.png -------------------------------------------------------------------------------- /materials/img/kesque-05-createtenant4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/kesque-05-createtenant4.png -------------------------------------------------------------------------------- /materials/img/kesque-06-createtenant5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/kesque-06-createtenant5.png -------------------------------------------------------------------------------- /materials/img/kesque-25-subscription.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/kesque-25-subscription.png -------------------------------------------------------------------------------- /materials/img/resources-04-workshops.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/resources-04-workshops.png -------------------------------------------------------------------------------- /materials/img/resources-07-community.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datastaxdevs/workshop-pulsar/main/materials/img/resources-07-community.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # eclipse conf file 2 | .settings 3 | .classpath 4 | .project 5 | .cache 6 | 7 | # idea conf files 8 | .idea 9 | *.ipr 10 | *.iws 11 | *.iml 12 | 13 | # building 14 | target 15 | build 16 | tmp 17 | dist 18 | 19 | # misc 20 | .DS_Store 21 | 22 | .factorypath 23 | .sts4-cache 24 | *.log 25 | -------------------------------------------------------------------------------- /.gitpod.yml: -------------------------------------------------------------------------------- 1 | image: 2 | file: .gitpod.Dockerfile 3 | 4 | tasks: 5 | - name: Build-demo 6 | init: | 7 | cd pulsar-demo && mvn clean package install -Dmaven.test.skip=true 8 | 9 | github: 10 | prebuilds: 11 | master: true 12 | branches: true 13 | pullRequests: true 14 | pullRequestsFromForks: false 15 | addCheck: true 16 | addComment: false 17 | addBadge: true 18 | addLabel: false -------------------------------------------------------------------------------- /pulsar-demo/src/main/resources/logback.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | %d{HH:mm:ss.SSS} %magenta(%-5level) %cyan(%-45logger) : %msg%n 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /pulsar-demo/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | # --------------------------------------- 2 | # Configuration of your Kesque tenant 3 | # --------------------------------------- 4 | 5 | # BE GENTLE WITH THE FREE TIER 6 | demo.wait_between_message=1000 7 | 8 | # UPDATE THOSE KEYS IF YOU DID NOT PICK DATACENTER uswest2.aws 9 | kesque.service_url=pulsar+ssl://uswest2.aws.kafkaesque.io:6651 10 | kesque.namespace=local-uswest2-aws 11 | 12 | # UPDATE THIS KEY WITH THE NAME OF YOUR TENANT 13 | kesque.tenant_name= 14 | 15 | # UPDATE THIS KEY WITH YOUR AUTHENTICATIONT TOKEN 16 | kesque.authentication_token= 17 | 18 | # Update this key if you used a different topic name 19 | kesque.topic_name=astra 20 | -------------------------------------------------------------------------------- /pulsar-demo/src/main/java/com/datastax/pulsar/DemoBean.java: -------------------------------------------------------------------------------- 1 | package com.datastax.pulsar; 2 | 3 | public class DemoBean { 4 | String id; 5 | String value; 6 | 7 | public DemoBean(String id, String value) { 8 | super(); 9 | this.id = id; 10 | this.value = value; 11 | } 12 | /** 13 | * Getter accessor for attribute 'id'. 14 | * 15 | * @return 16 | * current value of 'id' 17 | */ 18 | public String getId() { 19 | return id; 20 | } 21 | /** 22 | * Setter accessor for attribute 'id'. 23 | * @param id 24 | * new value for 'id ' 25 | */ 26 | public void setId(String id) { 27 | this.id = id; 28 | } 29 | /** 30 | * Getter accessor for attribute 'value'. 31 | * 32 | * @return 33 | * current value of 'value' 34 | */ 35 | public String getValue() { 36 | return value; 37 | } 38 | /** 39 | * Setter accessor for attribute 'value'. 40 | * @param value 41 | * new value for 'value ' 42 | */ 43 | public void setValue(String value) { 44 | this.value = value; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Workshop Apache Cassandra™ and Apache Pulsar™ 2 | 3 | [![Gitpod ready-to-code](https://img.shields.io/badge/Gitpod-ready--to--code-blue?logo=gitpod)](https://github.com/DataStax-academy/workshop-pulsar) 4 | [![License Apache2](https://img.shields.io/hexpm/l/plug.svg)](http://www.apache.org/licenses/LICENSE-2.0) 5 | [![Discord](https://img.shields.io/discord/685554030159593522)](https://discord.com/widget?id=685554030159593522&theme=dark) 6 | 7 | ![](https://github.com/DataStax-Academy/workshop-pulsar/blob/main/materials/img/splash.png?raw=true) 8 | 9 | This workshop will guide you through the steps to connect Pulsar and Cassandra without any need for you to install anything 10 | 11 | ### 📅 2 livestreams on Youtube 12 | 13 | - **Wednesday, February 3rd, 12EDT (Targeting LATAM REGION)**: [📺 Start Watching!](https://youtu.be/nF502PmFi_w) 14 | 15 | - **Thursday February 4th, 12:30 IST, (targeting EMEA.APAC Regions)**: [📺 Start Watching!](https://youtu.be/nF502PmFi_w) 16 | 17 | ### Slides 18 | 19 | * [📁 Presentation](https://github.com/DataStax-Academy/workshop-pulsar/blob/main/materials/pulsar_presentation.pdf) 20 | 21 | ### Hands-ON 22 | 23 | Instructions have been moved [to the wiki](https://github.com/DataStax-Academy/workshop-pulsar/wiki). 24 | 25 |

26 | 27 | 28 | 29 |

30 | 31 | -------------------------------------------------------------------------------- /pulsar-demo/pom.xml: -------------------------------------------------------------------------------- 1 | 4 | 4.0.0 5 | com.datastax.pulsar 6 | pulsar-demo 7 | 0.0.1-SNAPSHOT 8 | jar 9 | pulsar-demo 10 | 11 | 12 | UTF-8 13 | 2.6.1 14 | 1.7.30 15 | 1.2.3 16 | 3.8.1 17 | 11 18 | 19 | 20 | 21 | 22 | 23 | org.apache.pulsar 24 | pulsar-client 25 | ${version.pulsar} 26 | 27 | 28 | 29 | ch.qos.logback 30 | logback-classic 31 | ${version.logback} 32 | 33 | 34 | org.slf4j 35 | slf4j-api 36 | ${version.slf4j} 37 | 38 | 39 | org.slf4j 40 | jcl-over-slf4j 41 | ${version.slf4j} 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | org.apache.maven.plugins 50 | maven-compiler-plugin 51 | ${version.maven-compiler-plugin} 52 | 53 | ${version.java} 54 | ${version.java} 55 | true 56 | 57 | 58 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /pulsar-demo/src/main/java/com/datastax/pulsar/SimplePulsarProducer.java: -------------------------------------------------------------------------------- 1 | package com.datastax.pulsar; 2 | 3 | import java.util.UUID; 4 | 5 | import org.apache.pulsar.client.api.AuthenticationFactory; 6 | import org.apache.pulsar.client.api.Producer; 7 | import org.apache.pulsar.client.api.PulsarClient; 8 | import org.apache.pulsar.client.api.PulsarClientException; 9 | import org.apache.pulsar.client.api.Schema; 10 | 11 | public class SimplePulsarProducer { 12 | 13 | public static void main(String[] args) { 14 | 15 | PulsarClient pulsarClient = null; 16 | Producer pulsarProducer = null; 17 | 18 | try { 19 | DemoKesqueConfiguration conf = 20 | DemoKesqueConfiguration.getInstance(); 21 | 22 | // Create client object 23 | pulsarClient = PulsarClient.builder() 24 | .serviceUrl(conf.getServiceUrl()) 25 | .authentication(AuthenticationFactory.token(conf.getAuthenticationToken())) 26 | .build(); 27 | 28 | // Create producer on a topic 29 | pulsarProducer = pulsarClient 30 | .newProducer(Schema.JSON(DemoBean.class)) 31 | .topic("persistent://" 32 | + conf.getTenantName() + "/" 33 | + conf.getNamespace() + "/" 34 | + conf.getTopicName()) 35 | .create(); 36 | 37 | while(true) { 38 | String uid = UUID.randomUUID().toString(); 39 | pulsarProducer.send(new DemoBean(uid, "Hello World !")); 40 | System.out.println("[PRODUCER] - Message " + uid + " sent"); 41 | Thread.sleep(conf.getWaitPeriod()); 42 | } 43 | 44 | } catch (PulsarClientException e) { 45 | throw new IllegalStateException("Cannot connect to pulsar", e); 46 | } catch (InterruptedException e) { 47 | System.out.println("[INFO] - Stopped request retrieved"); 48 | } finally { 49 | try { 50 | if (null != pulsarProducer) pulsarProducer.close(); 51 | if (null != pulsarClient) pulsarClient.close(); 52 | } catch (PulsarClientException e) {} 53 | System.out.println("[INFO] - SimplePulsarProducer has been stopped."); 54 | } 55 | } 56 | 57 | } 58 | -------------------------------------------------------------------------------- /pulsar-demo/src/main/java/com/datastax/pulsar/SimplePulsarConsumer.java: -------------------------------------------------------------------------------- 1 | package com.datastax.pulsar; 2 | 3 | import java.util.concurrent.TimeUnit; 4 | 5 | import org.apache.pulsar.client.api.AuthenticationFactory; 6 | import org.apache.pulsar.client.api.Consumer; 7 | import org.apache.pulsar.client.api.Message; 8 | import org.apache.pulsar.client.api.PulsarClient; 9 | import org.apache.pulsar.client.api.PulsarClientException; 10 | import org.apache.pulsar.client.api.Schema; 11 | import org.apache.pulsar.client.api.SubscriptionInitialPosition; 12 | 13 | public class SimplePulsarConsumer { 14 | 15 | public static void main(String[] args) { 16 | 17 | PulsarClient pulsarClient = null; 18 | Consumer pulsarConsumer = null; 19 | 20 | try { 21 | DemoKesqueConfiguration conf = 22 | DemoKesqueConfiguration.getInstance(); 23 | 24 | // Create client object 25 | pulsarClient = PulsarClient.builder() 26 | .serviceUrl(conf.getServiceUrl()) 27 | .authentication(AuthenticationFactory.token(conf.getAuthenticationToken())) 28 | .build(); 29 | 30 | pulsarConsumer = pulsarClient.newConsumer(Schema.JSON(DemoBean.class)) 31 | .topic("persistent://" 32 | + conf.getTenantName() + "/" 33 | + conf.getNamespace() + "/" 34 | + conf.getTopicName()) 35 | .startMessageIdInclusive() 36 | .subscriptionInitialPosition(SubscriptionInitialPosition.Earliest) 37 | .subscriptionName("SimplePulsarConsumer") 38 | .subscribe(); 39 | 40 | while(true) { 41 | Message msg = pulsarConsumer.receive(conf.getWaitPeriod(), TimeUnit.MILLISECONDS); 42 | if(msg != null){ 43 | System.out.println("[CONSUMER] - Message received:" + new String(msg.getData())); 44 | pulsarConsumer.acknowledge(msg); 45 | Thread.sleep(conf.getWaitPeriod()); 46 | } 47 | } 48 | 49 | } catch (PulsarClientException e) { 50 | throw new IllegalStateException("Cannot connect to pulsar", e); 51 | } catch (InterruptedException e) { 52 | System.out.println("[INFO] - Stopped request retrieved"); 53 | } finally { 54 | try { 55 | if (null != pulsarConsumer) pulsarConsumer.close(); 56 | if (null != pulsarClient) pulsarClient.close(); 57 | } catch (PulsarClientException e) {} 58 | System.out.println("[INFO] - SimplePulsarProducer has been stopped."); 59 | } 60 | } 61 | 62 | } 63 | -------------------------------------------------------------------------------- /pulsar-demo/src/main/java/com/datastax/pulsar/DemoKesqueConfiguration.java: -------------------------------------------------------------------------------- 1 | package com.datastax.pulsar; 2 | 3 | import java.io.FileNotFoundException; 4 | import java.io.IOException; 5 | import java.util.Properties; 6 | 7 | public class DemoKesqueConfiguration { 8 | 9 | private static DemoKesqueConfiguration _instance; 10 | 11 | private String serviceUrl; 12 | 13 | private String tenantName; 14 | 15 | private String namespace; 16 | 17 | private String topicName; 18 | 19 | private String authenticationToken; 20 | 21 | private int waitPeriod = 1000; 22 | 23 | public static synchronized DemoKesqueConfiguration getInstance() { 24 | if (null == _instance) { 25 | _instance = new DemoKesqueConfiguration(); 26 | } 27 | return _instance; 28 | } 29 | 30 | private DemoKesqueConfiguration() { 31 | try { 32 | Properties properties = new Properties(); 33 | properties.load(Thread 34 | .currentThread() 35 | .getContextClassLoader() 36 | .getResourceAsStream("application.properties")); 37 | 38 | this.serviceUrl = properties.getProperty("kesque.service_url"); 39 | if (null == serviceUrl) { 40 | throw new IllegalArgumentException("Cannot read serviceUrl in conf file"); 41 | } 42 | 43 | this.namespace = properties.getProperty("kesque.namespace"); 44 | if (null == namespace) { 45 | throw new IllegalArgumentException("Cannot read namespace in conf file"); 46 | } 47 | 48 | this.tenantName = properties.getProperty("kesque.tenant_name"); 49 | if (null == tenantName) { 50 | throw new IllegalArgumentException("Cannot read tenant_name in conf file"); 51 | } 52 | 53 | this.topicName = properties.getProperty("kesque.topic_name"); 54 | if (null == topicName) { 55 | throw new IllegalArgumentException("Cannot read topic_name in conf file"); 56 | } 57 | 58 | this.authenticationToken = properties.getProperty("kesque.authentication_token"); 59 | if (null == authenticationToken) { 60 | throw new IllegalArgumentException("Cannot read authenticationo_token in conf file"); 61 | } 62 | 63 | String newPeriod = properties.getProperty("demo.wait_between_message"); 64 | if (null != newPeriod) { 65 | waitPeriod = Integer.parseInt(newPeriod); 66 | } 67 | 68 | System.out.println("[INFO] - Configuration has been loaded successfully"); 69 | 70 | } catch (FileNotFoundException e) { 71 | throw new IllegalStateException(e); 72 | } catch (IOException e) { 73 | throw new IllegalStateException(e); 74 | } 75 | } 76 | 77 | public static void main(String[] args) { 78 | new DemoKesqueConfiguration(); 79 | } 80 | 81 | 82 | /** 83 | * Getter accessor for attribute 'serviceUrl'. 84 | * 85 | * @return 86 | * current value of 'serviceUrl' 87 | */ 88 | public String getServiceUrl() { 89 | return serviceUrl; 90 | } 91 | 92 | /** 93 | * Getter accessor for attribute 'tenantName'. 94 | * 95 | * @return 96 | * current value of 'tenantName' 97 | */ 98 | public String getTenantName() { 99 | return tenantName; 100 | } 101 | 102 | 103 | /** 104 | * Getter accessor for attribute 'namespace'. 105 | * 106 | * @return 107 | * current value of 'namespace' 108 | */ 109 | public String getNamespace() { 110 | return namespace; 111 | } 112 | 113 | 114 | /** 115 | * Getter accessor for attribute 'topicName'. 116 | * 117 | * @return 118 | * current value of 'topicName' 119 | */ 120 | public String getTopicName() { 121 | return topicName; 122 | } 123 | 124 | /** 125 | * Getter accessor for attribute 'authenticationToken'. 126 | * 127 | * @return 128 | * current value of 'authenticationToken' 129 | */ 130 | public String getAuthenticationToken() { 131 | return authenticationToken; 132 | } 133 | 134 | /** 135 | * Getter accessor for attribute 'waitPeriod'. 136 | * 137 | * @return 138 | * current value of 'waitPeriod' 139 | */ 140 | public int getWaitPeriod() { 141 | return waitPeriod; 142 | } 143 | 144 | 145 | } 146 | --------------------------------------------------------------------------------