docs/code-samples/serving/cloudevents/cloudevents-spring
Mary Frances Hull 04eb1ecf81
fix tab formatting - issue #4922 (#5446)
* fix tab formatting

* change from bold to heading 3
2023-03-17 18:59:37 +00:00
..
.mvn/wrapper removes maven-wrapper.jar from repository (#5366) 2022-12-19 08:00:54 +00:00
src Move code samples to GitHub (#4565) 2021-12-14 04:20:51 -08:00
.gitignore Move code samples to GitHub (#4565) 2021-12-14 04:20:51 -08:00
README.md fix tab formatting - issue #4922 (#5446) 2023-03-17 18:59:37 +00:00
mvnw Move code samples to GitHub (#4565) 2021-12-14 04:20:51 -08:00
mvnw.cmd Move code samples to GitHub (#4565) 2021-12-14 04:20:51 -08:00
pom.xml Move code samples to GitHub (#4565) 2021-12-14 04:20:51 -08:00
service.yaml Move code samples to GitHub (#4565) 2021-12-14 04:20:51 -08:00

README.md

Cloud Events - Java and Spring

A simple web app written in Java using Spring Cloud Function that can receive CloudEvents. It supports running in two modes:

  1. The default mode has the app reply to your input events with the output event, which is simplest for demonstrating things working in isolation, but is also the model for working with the Knative Eventing Broker concept. The input event is modified assigning a new source and type attribute.

  2. K_SINK mode has the app send events to the destination encoded in $K_SINK, which is useful to demonstrate how folks can synthesize events to send to a Service or Broker when not initiated by a Broker invocation (e.g. implementing an event source). The input event is modified assigning a new source and type attribute.

The application will use $K_SINK-mode whenever the environment variable is specified.

Do the following steps to create the sample code and then deploy the app to your cluster. You can also download a working copy of the sample, by running the following commands:

git clone https://github.com/knative/docs.git knative-docs
cd knative-docs/code-samples/serving/cloudevents/cloudevents-spring

Before you begin

  • A Kubernetes cluster with Knative installed and DNS configured. See Install Knative Serving.
  • Docker installed and running on your local machine, and a Docker Hub account configured (we'll use it for a container registry).

Build and deploy the sample

To build the image, run:

mvn compile jib:build -Dimage=<image_name>

To deploy the Knative Service, edit the service.yaml file and replace <image> with the deployed image name. Then run:

kubectl apply -f service.yaml

Testing the sample

Get the URL for your Service with:

$ kubectl get ksvc
NAME                URL                                            LATESTCREATED             LATESTREADY               READY   REASON
cloudevents-spring   http://cloudevents-java.sslip.io                 cloudevents-spring-86h28   cloudevents-spring-86h28   True

Then send a CloudEvent to it with:

$ curl \
    -X POST -v \
    -H "content-type: application/json"  \
    -H "ce-specversion: 1.0"  \
    -H "ce-source: http://curl-command"  \
    -H "ce-type: curl.demo"  \
    -H "ce-id: 123-abc"  \
    -d '{"name":"Dave"}' \
    http://cloudevents-java.sslip.io

You can also send CloudEvents spawning a temporary curl pod in your cluster with:

$ kubectl run curl \
    --image=curlimages/curl --rm=true --restart=Never -ti -- \
    -X POST -v \
    -H "content-type: application/json"  \
    -H "ce-specversion: 1.0"  \
    -H "ce-source: http://curl-command"  \
    -H "ce-type: curl.demo"  \
    -H "ce-id: 123-abc"  \
    -d '{"name":"Dave"}' \
    http://cloudevents-java.default.svc

You'll see on the console:

> POST / HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.69.1
> Accept: */*
> content-type: application/json
> ce-specversion: 1.0
> ce-source: http://curl-command
> ce-type: curl.demo
> ce-id: 123-abc
> Content-Length: 15
>
< HTTP/1.1 202 Accepted
< ce-specversion: 1.0
< ce-id: 123-abc
< ce-source: https://github.com/knative/docs/code-samples/serving/cloudevents/cloudevents-spring
< ce-type: curl.demo
< content-type: application/json
< content-length: 15
<
{"name":"Dave"}

Removing the sample app deployment

To remove the sample app from your cluster, delete the service record:

kubectl delete --filename service.yaml

Removing the sample app deployment

To remove the sample app from your cluster, delete the service:

yaml

kubectl delete --filename service.yaml

kn

kn service delete cloudevents-spring