springboot操作rocketMq

rocketMq介绍

消息队列作为高并发系统的核心组件之一,能够帮助业务系统解构提升开发效率和系统稳定性。主要具有以下优势:

削峰填谷(主要解决瞬时写压力大于应用服务能力导致消息丢失、系统奔溃等问题)
系统解耦(解决不同重要程度、不同能力级别系统之间依赖导致一死全死)
提升性能(当存在一对多调用时,可以发一条消息给消息系统,让消息系统通知相关系统)
蓄流压测(线上有些链路不好压测,可以通过堆积一定量消息再放开来压测)
目前主流的MQ主要是Rocketmq、kafka、Rabbitmq,Rocketmq相比于Rabbitmq、kafka具有主要优势特性有:
• 支持事务型消息(消息发送和DB操作保持两方的最终一致性,rabbitmq和kafka不支持)
• 支持结合rocketmq的多个系统之间数据最终一致性(多方事务,二方事务是前提)
• 支持18个级别的延迟消息(rabbitmq和kafka不支持)
• 支持指定次数和时间间隔的失败消息重发(kafka不支持,rabbitmq需要手动确认)
• 支持consumer端tag过滤,减少不必要的网络传输(rabbitmq和kafka不支持)
• 支持重复消费(rabbitmq不支持,kafka支持)

Rocketmq、kafka、Rabbitmq的详细对比,请参照下表格:
在这里插入图片描述

rocketMq下载安装

由于一般公司都是由于运维会安装rocketMq,这里为了学习方便安装的windows的

1.下载

rocketMq官网: http://rocketmq.apache.org/
进入官网安装步骤下载后即可,得到的zip包,在选择合适位置解压即可
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.安装

  1. 配置环境变量
    在下载好后,寻找合适位置解压后,需要在自己系统的环境变量中配置
    ROCKETMQ_HOME 配置自己解压位置的,比如我的 F:\rocketmq-all-4.7.0-bin-release
  2. 启动rocketmq
    在cmd窗口分别执行bin目录下的mqnamesrv.cmd和mqbroker.cmd,执行完之后会弹出新的窗口,都不要关闭,如图:

mqnamesrv启动命令:start mqnamesrv.cmd
在这里插入图片描述
mqbroker启动命令:start mqbroker.cmd -n 127.0.0.1:9876 autoCreateTopicEnable=true
在这里插入图片描述
注意:如果输入命令后提示 Please set the ROCKETMQ_HOME variable in your environment!
那么建议
修改 runbroker.cmd

set "JAVA_OPT=%JAVA_OPT% -cp %CLASSPATH%"

改为

set "JAVA_OPT=%JAVA_OPT% -cp "%CLASSPATH%""

rocketMq运行

springboot整合

创建一个springboot的项目,这里就不过多创建了

1. 导入依赖

        <dependency>
            <groupId>org.apache.rocketmq</groupId>
            <artifactId>rocketmq-spring-boot-starter</artifactId>
            <version>2.0.3</version>
        </dependency>
        <!--fastjson-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.4</version>
        </dependency>

2. 配置配置文件

rocketmq:
  # 接收消息
  name-server: 127.0.0.1:9876
  producer:
    group: my-group
    # 其他的配置 发送超时时长
    send-message-timeout: 3000
    # 消息 Body 超过多大开始压缩
    compress-message-body-threshold: 4096
    # 限制的消息大小
    max-message-size: 4194304
    # 开启内部消息重试
    retry-next-server: true
    # 失败重试次数
    retry-times-when-send-async-failed: 2

3. 创建生成者

@RunWith(SpringRunner.class)
@SpringBootTest
public class RocketMqTest {

    @Resource
    private RocketMQTemplate rocketMQTemplate;

    @Test
    public void testRocketMq1() {

        String name = "aaa";
        rocketMQTemplate.convertAndSend("test-topic-1", name);
        rocketMQTemplate.send("test-topic-2", MessageBuilder.withPayload(new User(1L,"ace",24)).build());

        System.err.println("发送成功...");

    }
}

4. 创建消费者

@Service
//消息接收者的 主题和分组名称方便接收对应的消息
@RocketMQMessageListener(topic = "test-topic-2", consumerGroup = "my-consumer_test-topic-2")
public class OrderPaidEventConsumer implements RocketMQListener<User> {

    @Override
    public void onMessage(User message) {
        System.out.print("------- OrderPaidEventConsumer received:"+ JSON.toJSONString(message));
    }

}

注:使用的实体类

@Data
public class User {
    private Long id;
    private String name;
    private Integer age;
    public User(){}

    public User(Long id, String name, int age) {
        this.id = id;
        this.age = age;
        this.name = name;
    }
}
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 深蓝海洋 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读