Operaciones de mensajes de RoctetMQ a través de Spring Cloud Stream

¡Continúe creando, acelere el crecimiento! Este es el octavo día de mi participación en el "Nuevo plan diario de Nuggets · Desafío de actualización de junio", haga clic para ver los detalles del evento

Introducción a Spring Cloud Stream

Spring Cloud Stream es un marco para crear microservicios basados ​​en eventos altamente escalables conectados a sistemas de mensajería compartidos. El marco proporciona un modelo de programación flexible basado en modismos y mejores prácticas de Spring establecidos y familiares, incluido el soporte para semántica pub/sub persistente, grupos de consumidores y partición con estado.

¿Qué middleware de mensajes admite Spring Cloud Stream?

El middleware de mensajes soportado por Spring Cloud Stream se muestra en la siguiente figura:imagen.png

rápido de usar

establecer dependencias (pom)

Para las dependencias, debemos prestar atención a la correspondencia de la spring-boot``spring-cloud``spring-cloud-alibabaversión .

    <properties>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.source>1.8</maven.compiler.source>
        <spring.boot.version>2.2.4.RELEASE</spring.boot.version>
        <spring.cloud.version>Hoxton.SR1</spring.cloud.version>
        <spring.cloud.alibaba.version>2.2.0.RELEASE</spring.cloud.alibaba.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-parent</artifactId>
                <version>${spring.boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring.cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring.cloud.alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-stream-rocketmq</artifactId>
        </dependency>
    </dependencies>
复制代码

establecer configuración (yml)

Configuración Se rocketmqrequiere .

spring:
  cloud:
    stream:
      bindings:
        input:
          destination: TestTopic
          group: TestGroup
        output:
          destination: TestTopic
    rocketmq:
      binder:
        name-server: 127.0.0.1:9876

server:
  port: 18080
复制代码

Establecer clase de inicio

@EnableBinding({Source.class, Sink.class})
@SpringBootApplication
public class RocketMQApplication {
    public static void main(String[] args) {
        SpringApplication.run(RocketMQApplication.class, args);
    }
}
复制代码

productor de mensajes

Principalmente para enviar mensajes.

@Component
public class RocketMQProducer {
    @Resource
    private Source source;

    public void sendMessage(String msg) {
        Map<String, Object> headers = new HashMap<>();
        headers.put(MessageConst.PROPERTY_TAGS, "testTag");
        MessageHeaders messageHeaders = new MessageHeaders(headers);
        Message<String> message = MessageBuilder.createMessage(msg,
                messageHeaders);
        this.source.output().send(message);
    }
}
复制代码

consumidor de mensajes

Se utiliza principalmente para aceptar mensajes e imprimir el contenido de los mensajes.

@Component
public class TestTopicConsumer {

    @StreamListener(Sink.INPUT)
    public void onMessage(String messsage) {
        System.out.println("received message:" + messsage + " from binding:" + Sink.INPUT);
    }
}
复制代码

prueba

Escribimos una TestControllerclase para proporcionar una interfaz para enviar mensajes al mundo exterior, llamar y enviar mensajes para lograr el envío de mensajes.

@RestController
@RequestMapping("/MQTest")
public class TestController {

    @Resource
    private RocketMQProducer producer;

    @RequestMapping("/sendMessage")
    public String sendMessage(String message) {
        producer.sendMessage(message);
        return "send message success";
    }
}
复制代码

La prueba envía un mensaje, ejecuta el comando curl http://127.0.0.1:18080/MQTest/sendMessage\?message\=hahhay devuelve el resultado de la siguiente manera: La imagen.pngsalida de la consola del servidor es la siguiente:imagen.png

Resumir

Este artículo responde brevemente a la práctica de integrar RockectMQ con Spring Cloud Stream, pero en nuestro proceso de desarrollo actual, esto está lejos de ser suficiente. Tenga en cuenta que esto es solo un caso, y compartiré la solución que realmente se usa en el proyecto más adelante.

Supongo que te gusta

Origin juejin.im/post/7104282113075068965
Recomendado
Clasificación