首页 > 文章列表 > Springboot中RocketMQ怎么实现消息发送与接收

Springboot中RocketMQ怎么实现消息发送与接收

springboot RocketMQ
326 2023-05-13

Springboot中RocketMQ怎么实现消息发送与接收

springboot+rockermq 实现简单的消息发送与接收

普通消息的发送方式有3种:单向发送、同步发送和异步发送。

下面来介绍下 springboot+rockermq 整合实现 普通消息的发送与接收

  • 创建Springboot项目,添加rockermq 依赖

<!--rocketMq依赖-->

<dependency>

    <groupId>org.apache.rocketmq</groupId>

    <artifactId>rocketmq-spring-boot-starter</artifactId>

    <version>2.2.1</version>

</dependency>
  • 配置rocketmq

# 端口

server:

  port: 8083

# 配置 rocketmq

rocketmq:

  name-server: 127.0.0.1:9876

  #生产者

  producer:

    #生产者组名,规定在一个应用里面必须唯一

    group: group1

    #消息发送的超时时间 默认3000ms

    send-message-timeout: 3000

    #消息达到4096字节的时候,消息就会被压缩。默认 4096

    compress-message-body-threshold: 4096

    #最大的消息限制,默认为128K

    max-message-size: 4194304

    #同步消息发送失败重试次数

    retry-times-when-send-failed: 3

    #在内部发送失败时是否重试其他代理,这个参数在有多个broker时才生效

    retry-next-server: true

    #异步消息发送失败重试的次数

    retry-times-when-send-async-failed: 3

  • 新建一个 controller 来做消息发送:

package com.example.springbootrocketdemo.controller;

import org.apache.rocketmq.client.producer.SendCallback;

import org.apache.rocketmq.client.producer.SendResult;

import org.apache.rocketmq.spring.core.RocketMQTemplate;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

/**

 * 普通信息的三种方式:同步、异步、单向

 * @author qzz

 */

@RestController

public class RocketMQCOntroller {

    @Autowired

    private RocketMQTemplate rocketMQTemplate;

    /**

     * 发送普通消息

     * convertAndSend(String destination, Object payload) 发送字符串比较方便

     */

    @RequestMapping("/send")

    public void send(){

        rocketMQTemplate.convertAndSend("test-topic","test-message");

    }

    /**

     * 发送同步消息

     */

    @RequestMapping("/testSyncSend")

    public void testSyncSend(){

        //参数一:topic   如果想添加tag,可以使用"topic:tag"的写法

        //参数二:消息内容

        SendResult sendResult = rocketMQTemplate.syncSend("test-topic","同步消息测试");

        System.out.println(sendResult);

    }

    /**

     * 发送异步消息

     */

    @RequestMapping("/testASyncSend")

    public void testASyncSend(){

        //参数一:topic   如果想添加tag,可以使用"topic:tag"的写法

        //参数二:消息内容

        //参数三:回调

        rocketMQTemplate.asyncSend("test-topic", "异步消息测试", new SendCallback() {

            @Override

            public void onSuccess(SendResult sendResult) {

                System.out.println(sendResult);

            }

            @Override

            public void onException(Throwable throwable) {

                System.out.println("消息发送异常");

                throwable.printStackTrace();

            }

        });

    }

    /**

     * 发送单向消息

     */

    @RequestMapping("/testOneWay")

    public void testOneWay(){

        //参数一:topic   如果想添加tag,可以使用"topic:tag"的写法

        //参数二:消息内容

        rocketMQTemplate.sendOneWay("test-topic","单向消息测试");

    }

}

SpringBoot给我们提供了RocketMQTemplate模板类,我们利用这个类可以以多种形式发送消息。

发送方法指定Topic主题test-topic。

  • 新建消息消费者监听RocketMQConsumerListener,监听消息,消费消息

package com.example.springbootrocketdemo.config;

import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;

import org.apache.rocketmq.spring.core.RocketMQListener;

import org.springframework.stereotype.Service;

/**

 * 消费消息

 * 配置RocketMQ监听

 * @author qzz

 */

@Service

@RocketMQMessageListener(consumerGroup = "test",topic = "test-topic")

public class RocketMQConsumerListener implements RocketMQListener<String> {

    @Override

    public void onMessage(String s) {

        System.out.println("消费消息:"+s);

    }

}

消费者类要实现RocketMQListener接口,以及动态指定消息类型String。

类上要加上@RocketMQMessageListener注解,指定topic主题test-topic,以及消费者组test

简单的消息发送与接收搭建完毕!

  • 启动服务,测试消息消费

测试同步消息:

测试异步消息:

测试单向消息: