(自用)RocketMQ下载与使用

1、去RocketMQ官网下载压缩包并解压(https://rocketmq.apache.org/zh/download/),添加环境变量。

2、启动RocketMQ:

        进入自己的RocketMQ安装目录下的bin目录,输入下面命令启动 nameserver:

         

start mqnamesrv.cmd


        注:如果端口被占用,可以指定端口文件
        namesrv.properties 文件里面写listenPort=9990
        修改端口后启动,需要指定端口文件 start mqnamesrv.cmd -c ..\conf\namesrv.properties

start mqbroker.cmd -n 127.0.0.1:9876 autoCreateTopicEnable=true


 

3、验证是否启动成功

jps

(自用)RocketMQ下载与使用_第1张图片

4、创建RocketMQ可视化窗口 Dashboard

步骤:1、下载Dashboard(下载 | RocketMQ)

在官网中找到RocketMQ Dashboard进行下载,下载的是项目源码,可以直接在idea中运行

也可以打成Jar包运行  打包错误There are test failures.见博客There are test failures.【非常详细,已解决】-CSDN博客

Dashboard的端口默认的是8080,与springboot项目冲突,建议修改Dashboard的端口:进入代码下的src\main\resources目录,打开application.yml文件,修改port 重启Dashboard

新建Springboot项目,导入依赖


    org.apache.rocketmq
    rocketmq-spring-boot-starter
    2.2.3

在application.properties中添加RocketMQ的基本配置:

spring.application.name=rocketmq-demo  #项目名
rocketmq.nameServer=127.0.0.1:9876      #端口号
rocketmq.producer.group=producer-group
rocketmq.consumer.group=consumer-group

(自用)RocketMQ下载与使用_第2张图片

项目目录:

(自用)RocketMQ下载与使用_第3张图片

编写入口函数 

@SpringBootApplication

创建一个 RocketMQProducer 类,用于同步发送、异步发送和单向发送。

import org.apache.rocketmq.client.producer.SendCallback;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.spring.core.RocketMQTemplate;

import org.example.rocketmqdemo.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.support.MessageBuilder;
import org.springframework.stereotype.Service;

@Service
public class RocketMQProducer {
    @Autowired
    private RocketMQTemplate rocketMQTemplate;

    private final String topic = "demo-topic";

    // 1.同步发送消息
    public void sendSyncMessage(String message){
        rocketMQTemplate.syncSend(topic, MessageBuilder.withPayload(message).build());
        System.out.printf("同步发送结果: %s ", message);
    }

    // 2.异步发送消息
    public void sendAsyncMessage(String message){
        rocketMQTemplate.asyncSend(topic, MessageBuilder.withPayload(message).build(), new SendCallback() {

            @Override
            public void onSuccess(SendResult sendResult) {
                System.out.printf("异步发送成功: %s ", sendResult);
            }

            @Override
            public void onException(Throwable throwable) {
                System.out.printf("异步发送失败: %s ", throwable.getMessage());
            }
        });
    }

    // 3.单向发送消息
    public void sendOneWayMessage(String message){
        rocketMQTemplate.sendOneWay(topic, MessageBuilder.withPayload(message).build());
        System.out.println("单向消息发送成功");
    }
}

编写RocketMQConsumer类

package org.example.rocketmqdemo.server;

import org.apache.rocketmq.spring.annotation.MessageModel;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.stereotype.Service;
@Service
@RocketMQMessageListener(topic = "demo-topic", consumerGroup = "consumer-group", messageModel = MessageModel.CLUSTERING)
public class RocketMQConsumer implements RocketMQListener {

    @Override
    public void onMessage(String s) {
        System.out.printf("收到消息: %s ", s);
    }
}

 

测试消息发送

编写一个简单的RocketController控制器,用于触发消息发送:

注意修改import路径

import org.example.rocketmqdemo.server.RocketMQProducer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class RocketController {
    @Autowired
    private RocketMQProducer rocketMQProducer;

    @GetMapping("/sendSync")
    public String sendSync(@RequestParam String message) {
        rocketMQProducer.sendSyncMessage(message);
        return "同步消息发送成功";
    }

    @GetMapping("/sendAsync")
    public String sendAsync(@RequestParam String message) {
        rocketMQProducer.sendAsyncMessage(message);
        return "异步消息发送中";
    }

    @GetMapping("/sendOneWay")
    public String sendOneWay(@RequestParam String message) {
        rocketMQProducer.sendOneWayMessage(message);
        return "单向消息发送成功";
    }
}

 

运行项目并进行测试:

  • 同步发送消息:http://localhost:8080/sendSync?message=Hello123
  • 异步发送消息:http://localhost:8080/sendAsync?message=Hello456
  • 单向发送消息:http://localhost:8080/sendOneWay?message=Hello789

我的项目运行会出现如下错误:

Field rocketMQTemplate in com.xing.rocketmqdemo.service.RocketMQProducer required a bean of type 'org.apache.rocketmq.spring.core.RocketMQTemplate' that could not be found. The injection point has the following annotations: - @org.springframework.beans.factory.annotation.Autowired(required=true) Action: Consider defining a bean of type 'org.apache.rocketmq.spring.core.RocketMQTemplate' in your configuration.

原因是:Springboot-3.0已经放弃了spring.plants自动装配,它被/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports所取代,添加这个文件是为了兼容

添加META-INF后,写入

org.apache.rocketmq.spring.autoconfigure.RocketMQAutoConfiguration

即可 

测试结果:(自用)RocketMQ下载与使用_第4张图片

你可能感兴趣的:(rocketmq)