Skip to main content

Supported Protocols

Besides auto-detection of protocols (native support), any protocol can be defined using Springwolf custom annotations @AsyncListener and @AsyncPublisher.

Native Support

The following protocols are supported natively:

Protocol + DemoAuto-detected annotationsExample ProjectLatest Version
AMQP (RabbitMQ)@RabbitListenerspringwolf-amqp-exampleMaven Central
Cloud Functions@Bean (functional interface)springwolf-cloud-streamMaven Central
JMS@JmsListenerspringwolf-jms-exampleMaven Central
Kafka@KafkaListener, @KafkaHandlerspringwolf-kafka-exampleMaven Central
SNSspringwolf-sns-exampleMaven Central
SQS@SqsListenerspringwolf-sqs-exampleMaven Central
STOMP (WebSocket)@MessageMapping, @SendTo, @SendToUserspringwolf-stomp-exampleMaven Central

Check out the example projects, which include a full docker-compose setup. The examples are simple, easy to start with, good for testing and reproducing bugs.

Please open an issue if you want a protocol to be supported.

Any protocol

Using @AsyncListener and @AsyncPublisher any protocol can be documented, although the binding in the AsyncAPI document will remain empty.

The protocols with native support come along with a @_ProtocolName_Binding annotation to define protocol specific properties.

springwolf-<protocol>-binding bindings

Springwolf also provides some libraries to document bindings. Those libraries provide a light alternative (without 3rd party dependencies)

The supported binding annotations are:

ProtocolAnnotationsLatest Plugin Version
AMQP@AmqpAsyncOperationBindingMaven Central
GooglePubSub@GooglePubSubAsyncChannelBindingMaven Central
JMS@JmsAsyncOperationBindingMaven Central
Kafka@KafkaAsyncOperationBindingMaven Central
SNS@SnsAsyncOperationBindingMaven Central
SQS@SqsAsyncOperationBindingMaven Central
STOMP (WebSocket)@StompAsyncOperationBindingMaven Central

Wire format (Data serialization)

Besides the classical JSON events, Springwolf has best-effort support for some other wire formats.

Avro

Avro is supported out-of-the box and demoed in kafka example.

Protobuf

Protobuf is demoed in kafka example.

To remove the fields generated by the Protobuf class generated, add a ModelResolver bean, which uses the ProtobufModule to your project. See ObjectMapperConfiguration for details.