Currently, you may find here some examples of microservices implementation using different projects from Quarkus. All the examples are divided into the branches and described in a separated articles on my blog. Here's a full list of available examples:
KafkaSink
, OpenShift and REST client interaction with event-mesh. A detailed guide may be found in the following article: Serverless on OpenShift with Knative, Quarkus and Kafka
demo-eventing
project (oc new-project demo-eventing
)Broker
with the kn broker create default
openshift
Maven profile: mvn clean package -Popenshift
!!! For those who don't want to deploy using Quarkus Kubernetes extension and Maven.
Broker
apiVersion: eventing.knative.dev/v1
kind: Broker
metadata:
annotations:
eventing.knative.dev/broker.class: MTChannelBasedBroker
name: default
spec:
config:
apiVersion: v1
kind: ConfigMap
name: config-br-default-channel
namespace: knative-eventing
order-service
-> quay.io/pminkows/order-service. Set env KAFKA_TOPIC
, TICK_TIMEOUT
stock-service
-> quay.io/pminkows/stock-service. Set env KAFKA_TOPIC
payment-service
-> quay.io/pminkows/payment-service. Set env KAFKA_TOPIC
KafkaBinding
for each application to inject Kafka address (only older versions of Kafka)For stock-service
:
apiVersion: bindings.knative.dev/v1beta1
kind: KafkaBinding
metadata:
name: kafka-binding-stock
spec:
subject:
apiVersion: serving.knative.dev/v1
kind: Service
name: stock-service
bootstrapServers:
- my-cluster-kafka-bootstrap.kafka:9092
For payment-service
:
apiVersion: bindings.knative.dev/v1beta1
kind: KafkaBinding
metadata:
name: kafka-binding-payment
spec:
subject:
apiVersion: serving.knative.dev/v1
kind: Service
name: payment-service
bootstrapServers:
- my-cluster-kafka-bootstrap.kafka:9092
For order-service
:
apiVersion: bindings.knative.dev/v1beta1
kind: KafkaBinding
metadata:
name: kafka-binding-order
spec:
subject:
apiVersion: serving.knative.dev/v1
kind: Service
name: order-service
bootstrapServers:
- my-cluster-kafka-bootstrap.kafka:9092
KafkaSource
to get messages from Kafka and send them to the Knative Broker
apiVersion: sources.knative.dev/v1beta1
kind: KafkaSource
metadata:
name: kafka-source-to-broker
spec:
bootstrapServers:
- my-cluster-kafka-bootstrap.kafka:9092
topics:
- <your-order-events-topic>
- <your-reserve-events-topic>
sink:
ref:
apiVersion: eventing.knative.dev/v1
kind: Broker
name: default
Trigger
for applicationsFor stock-service
:
apiVersion: eventing.knative.dev/v1
kind: Trigger
metadata:
name: stock-trigger
spec:
broker: default
filter:
attributes:
source: /apis/v1/namespaces/<your-namespace>/kafkasources/kafka-source-to-broker#<your-topic>
type: dev.knative.kafka.event
subscriber:
ref:
apiVersion: serving.knative.dev/v1
kind: Service
name: stock-service
uri: /reserve
For payment-service
:
apiVersion: eventing.knative.dev/v1
kind: Trigger
metadata:
name: payment-trigger
spec:
broker: default
filter:
attributes:
source: /apis/v1/namespaces/<your-namespace>/kafkasources/kafka-source-to-broker#<your-topic>
type: dev.knative.kafka.event
subscriber:
ref:
apiVersion: serving.knative.dev/v1
kind: Service
name: payment-service
uri: /reserve
For order-service
:
apiVersion: eventing.knative.dev/v1
kind: Trigger
metadata:
name: order-trigger
spec:
broker: default
filter:
attributes:
source: /apis/v1/namespaces/<your-namespace>/kafkasources/kafka-source-to-broker#<your-topic>
type: dev.knative.kafka.event
subscriber:
ref:
apiVersion: serving.knative.dev/v1
kind: Service
name: order-service
uri: /confirm
payment-service
and stock-service
Edit Knative Service
YAML and add the following annotations:
annotations:
autoscaling.knative.dev/target: "50"
autoscaling.knative.dev/metric: "rps"
order-service
Edit Knative Service
YAML and change TICK_TIMEOUT
env