Skip to content

Question: How to best integrate this plugin with spring-kafka? #297

@robinmatz

Description

@robinmatz

Hello there,

I am relatively new to using message broker systems. I am testing out this plugin to generate code from a simple example asyncapi specification
and integrate it with spring-kafka.

asyncapi: 2.3.0
info:
  title: Order Service
  version: 1.0.0
  description: Order management Service
servers:
  local:
    url: localhost
    protocol: kafka
    protocolVersion: 0.9.1
channels:
  helloworld.publish:
    publish:
      operationId: "publishHelloWorld"
      message:
        $ref: '#/components/messages/HelloWorld'
  helloworld.subscribe:
    subscribe:
      operationId: "subscribeHelloWorld"
      message:
        $ref: '#/components/messages/HelloWorld'
components:
  messages:
    HelloWorld:
      payload:
        $ref: '#/components/schemas/HelloWorldMessage'
  schemas:
    HelloWorldMessage:
      type: object
      properties:
        message:
          type: string
          minLength: 3
          maxLength: 100
          example: Hello, world!

I have the build plugin configured like this

 <plugin>
                <groupId>com.sngular</groupId>
                <artifactId>scs-multiapi-maven-plugin</artifactId>
                <version>${scs-multiapi-maven-plugin.version}</version>
                <executions>
                    <execution>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>asyncapi-generation</goal>
                        </goals>
                        <configuration>
                            <specFiles>
                                <specFile>
                                    <filePath>src/main/resources/asyncapi.yml</filePath>
                                    <consumer>
                                        <modelNameSuffix>Dto</modelNameSuffix>
                                        <apiPackage>com.example.asyncapi.model.event.consumer
                                        </apiPackage>
                                        <modelPackage>com.example.asyncapi.model.event</modelPackage>
                                    </consumer>
                                    <supplier>
                                        <apiPackage>com.example.asycnapi.model.event.producer
                                        </apiPackage>
                                        <modelPackage>com.example.asyncapi.model.event</modelPackage>
                                    </supplier>
                                </specFile>
                            </specFiles>
                            <springBootVersion>3</springBootVersion>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

And I wanted to ask where I should actually publish messages with spring-kafka

Would I do this in my custom IPublishOperation implementation like so?

package com.example.example.asyncapi.model.event.producer;

import com.example.asycnapi.model.event.HelloWorldMessage;
import com.example.asycnapi.model.event.producer.IPublishHelloWorld;
import lombok.AllArgsConstructor;
import org.springframework.boot.context.event.ApplicationStartedEvent;
import org.springframework.context.event.EventListener;
import org.springframework.kafka.core.KafkaTemplate;
import org.springframework.stereotype.Component;

@Component
@AllArgsConstructor
public class PublishHelloWorld implements IPublishHelloWorld {

    private final KafkaTemplate<String, HelloWorldMessage> kafkaTemplate;

    @Override
    @EventListener(ApplicationStartedEvent.class)
    public HelloWorldMessage publishHelloWorld() {
        System.out.println("Am publishing");
        HelloWorldMessage message = HelloWorldMessage.builder()
                .message("Hello, world")
                .build();
        kafkaTemplate.send("mytopic", message);
        return message;
    }
}

or is this the wrong approach?

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions