SpringBoot+RocketMq入门

153 阅读2分钟

SpringBoot+RocketMq入门

其实公司是有rocketmq的,但是发现公司的使用了ONS(Open Notification Service即开放消息服务),是要花钱的哦,所以还是自己搭建一下环境吧,毕竟能剩下一分钱,在这个斗争激烈的环境下都是有用的。

RocketMq本地环境部署

我这里采用docker的方式来部署,因为却是方便了很多,更关注使用而不是部署。

docker安装

docker个人不推荐brew install docker的安装方式,反正我的没成功,于是我直接下载了安装包,下一步大神上线,下载了dmg文件后直接安装即可。 docker的dmg下载地址:官网

由于是外网的,却是很慢,我也是翻墙下载的,所以我上传到了百度云上,需要自取

链接: pan.baidu.com/s/1dEECndPO… 密码: 917l

安装完成后会在启动台里有一个🐳的图标,点一下,然后登陆账号(其实也可以不注册不登陆),打开了这个程序才算Docker环境启动了。

RocketMq下载

珠玉在前,这位大佬提供了git

RocketMQ下载git

按照大佬文档操作即可。这样环境就算搭建成功了,注意,这里RocketMq的版本是4.80,会影响到后续我们导入RocketMq依赖的版本.打开的是Rocket Console,其实就是一个监控台。

导入依赖

首先,准备两个项目哈,都导入下面的依赖

        <dependency>
            <groupId>org.apache.rocketmq</groupId>
            <artifactId>rocketmq-spring-boot-starter</artifactId>
            <version>2.2.0</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.rocketmq/rocketmq-client -->
        <dependency>
            <groupId>org.apache.rocketmq</groupId>
            <artifactId>rocketmq-client</artifactId>
            <version>4.8.0</version>
        </dependency>

生产者配置

rocketmq:
  name-server: localhost:9876
  producer:
    group: springboot_group

消费者配置

rocketmq:
  name-server: localhost:9876
  consumer:
    group: springboot_group

生产者发送消息

package com.crud.bussiness;
​
​
import com.crud.entity.User;
import com.crud.service.impl.UserServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
import org.testng.annotations.Test;
​
@Slf4j
@SpringBootTest
public class RockerMqProductTest extends AbstractTestNGSpringContextTests {
    @Autowired
    RocketMQTemplate rocketMQTemplate;
    @Test
    /**
     * convertAndSend(…):使用此方法,交换机会马上把所有的信息都交给所有的消费者,消费者再自行处理,不会因为消费者处理慢而阻塞线程。
     * convertSendAndReceive(…):可以同步消费者。使用此方法,当确认了所有的消费者都接收成功之后,才触发另一个convertSendAndReceive(…),
     * 也就是才会接收下一条消息。RPC调用方式。
     * **/
    public void sendProductMqMessage(){
        //new_topic是topic
        rocketMQTemplate.convertAndSend("DefaultCluster","hello 摩托");
        log.info("发送成功过了");
    }
}

消费者接收消息

package com.cv.controller;
​
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.stereotype.Component;
​
@Component
@Slf4j
@RocketMQMessageListener(topic = "new_topic",consumerGroup = "${rocketmq.consumer.group}")
public class RocketMqConsumerListener implements RocketMQListener<String> {
​
    @Override
    public void onMessage(String s) {
        System.out.println("接受到的消息是:{}"+s);
        log.info("收到消息啦");
    }
}