Loading

RocketMQ入门(安装 + HelloWorld)

一、RocketMQ的windows安装

1. 下载安装RocketMQ

[下载RocketMQ](Apache RocketMQ)

如下图:选择当前最新版本4.8

下载后解压缩

2. RecketMQ的配置

1)配置系统变量ROCKETMQ_HOME

如下图所示,值为你解压缩的目录。注意:目录不要出现中文

2) 修改默认配置

1、进入bin目录,打开runserver.cmd和runbroker.cmd文件,分别做如下修改:

2、新建start.bat文件,内容如下:

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

3、双击新创建的start.bat,出现如下弹窗表明RocketMQ启动成功。【这两个弹窗在是使用RocketMQ中不能关闭】

二、RocketMQ的可视化界面

从Github上拉取rocketmq-externals代码,找到rocketmq-console,添加为maven项目,解决项目依赖问题,打开配置文件,做如下修改

然后启动项目,访问http://localhost:8888/,得到如下界面即配置成功。

三、RocketMQ之HelloWorld

1. Java单项目的HelloWorld

Maven项目引入jar包,非Maven项目直接导入jar就行:

<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
<version>2.1.0</version>
</dependency>

RocketMQ之消息提供者(这里给出使用的类,别导错报了):

import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;

public class MsgProducer {

    public static void main(String[] args) throws Exception {
        // 1. 创建消息生产者
        DefaultMQProducer producer = new DefaultMQProducer("myproducer-group");
        // 2. 设置NameServer
        producer.setNamesrvAddr("127.0.0.1:9876");;
        // 3. 启动生产者
        producer.start();
        // 4. 构建消息对象
        Message message = new Message(
                // 主题
                "myTopic",
                // 标签
                "myTag",
                // 消息体
                ("Hello RocketMQ").getBytes());
        // 5. 发送消息
        SendResult send = producer.send(message, 6000);
        System.out.println(send);
        // 6. 关闭生产者
        producer.shutdown();
    }
}

运行,访问RocketMq-console-ng,可以看的我们已经发送了一条消息,如下

RocketMQ之消息消费者

import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
import org.apache.rocketmq.common.message.MessageExt;

import java.util.List;

@Slf4j
public class MsgConsumer {
    public static void main(String[] args) throws Exception {
        // 1. 创建消息消费者
        DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("myconsumer-group");
        // 2. 设置NameServer
        consumer.setNamesrvAddr("127.0.0.1:9876");
        // 3. 指定订阅的主题和标签
        consumer.subscribe("myTopic", "*");
        // 4. 回调函数,创建消息监听器,监听消息队列中的消息
        consumer.registerMessageListener((List<MessageExt> list, ConsumeConcurrentlyContext consumeConcurrentlyContext) -> {
                log.info("Message=>{}",new String(list.get(0).getBody()));
                return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
        });
        // 5. 启动消费者
        consumer.start();
    }
}

控制台打印输出:

回到我们可视化界面的消息详情,如下,可以看的这条消息已经被消费了

到这里一个简单的消息流程就完成了。

2. 修改默认配置的原因

  1. 第一二步修改默认配置的内存大小,这个就不多说

  2. 第三步修改user.home的值,我们打开我们设置的目录,可以看到,多了两个目录:logs和store,注意一下文件大小,logs还好几十M,store就有点恐怖了啊,2G多。最初我就没修改,这些文件放在C盘用户下,直接让我C盘红了,所有我就给他换了一个目录。

这两个改动视个人情况来决定是否修改,这里补上store的容量大小:

3. SpringBoot继承RocketMQ

RocketMQ Producer的SpringBoot项目

加入依赖:

<dependency>
    <groupId>org.apache.rocketmq</groupId>
    <artifactId>rocketmq-spring-boot-starter</artifactId>
    <version>2.2.0</version>
</dependency>

配置也很简单,除了端口就是一个ServerName和producer group:

server:
  port: 5019
rocketmq:
  name-server: 127.0.0.1:9876
  producer:
    group: porducer-omaster

写一个生产消息接口,这个Order就是用来封装消息的,也可以使用Map:

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Order {

    private Integer id;

    private String buyerName;

    private String buyerTel;

    private String address;

    private Date caeateDate;
}


@RestController
public class ProviderController {

    @Autowired
    private RocketMQTemplate rocketMQTemplate;

    @GetMapping("/sendMsg")
    public Order sendMsg() {
        Order order = new Order(1, "阿松大", "123123", "软件园", new Date());
        rocketMQTemplate.convertAndSend("orderTopic", order);
        return order;
    }
}

启动项目,就会在页面发现这条未被消费的消息。

RocketMQ Consumer的SpringBoot项目

依赖和配置文件相同,只需一个消费消息的方法:

@Slf4j
@Service
@RocketMQMessageListener(consumerGroup = "myConsumerGroup", topic = "orderTopic")
public class ConsumerService implements RocketMQListener<Order> {
    @Override
    public void onMessage(Order order) {
        log.info("新订单{},发短信", order);
        // 如果能拿到新的订单,就根据订单ID生成一个减库存的操作,总而言之一句话,操作数据库
        System.out.println("执行减库存的操作、、、、");

    }
}
posted @ 2021-05-19 18:09  OMaster  阅读(337)  评论(0编辑  收藏  举报