RocketMQ系列之基础入门

1:MQ介绍和几大产品对比

1.1:MQ介绍

MQ:消息队列,是基础数据结构中“先进先出”的一种数据结构。一般用来解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。

1.2:常见MQ产品对比

常见的MQ产品有Kafana,RocketMQ,RabbitMQ
但是RocketMQ使用Java语言编写,便于Java程序员使用,调错。

2:RocketMQ基础概念

2.1:模型介绍

RocketMQ模型如下图所示
RocketMQ模型介绍
在这张图中有几个重要概念:
前置概念:
1.Topic:是一种消息的逻辑分类,比如说你有订单类的消息,也有库存类的消息,那么就需要进行分类,一个是订单 Topic 存放订单相关的消息,一个是库存 Topic 存储库存相关的消息。
2.Message
Message 是消息的载体。一个 Message 必须指定 topic,相当于寄信的地址。Message 还有一个可选的 tag 设置,以便消费端可以基于 tag 进行过滤消息。也可以添加额外的键值对,例如你需要一个业务 key 来查找 broker 上的消息,方便在开发过程中诊断问题。
3.tag:
标签可以被认为是对 Topic 进一步细化。一般在相同业务模块中通过引入标签来标记不同用途的消息。
节点类型:
1.NameServer
NameServer:是一个无状态的节点,可以集群部署,起到路由作用
2.Broker
Broker是整个服务的中心,起到消息存储等功能,Broker分为Master与Slave,一个Master可以对应多个Slave,但是一个Slave只能对应一个Master,Master与Slave的对应关系通过指定相同的BrokerName,不同的BrokerId来定义,BrokerId为0表示Master,非0表示Slave。Master也可以部署多个。
3.Producer
Producer 是消息的产生者:与Name Server集群中的其中一个节点(随机选择,但不同于上一次)建立长连接,定期从Name Server取Topic路由信息,并向提供Topic服务的Master建立长连接,且定时向Master发送心跳。
4.Consumer
Consumer是消息的消费者:与Name Server集群中的其中一个节点(随机选择,但不同于上一次)建立长连接,定期从Name Server 取Topic路由信息,并向提供Topic服务的Master、Slave建立长连接,且定时向Master、Slave发送心跳。

2.2:部署模式

单 master 模式
多 master 模式
多 master 多 slave 异步复制模式
多 master 多 slave 同步双写模式
刷盘策略:同步刷盘和异步刷盘(指的是节点自身数据是同步还是异步存储)
同步方式:同步双写和异步复制(指的一组 master 和 slave 之间数据的同步)

3:RocketMQ基础实战篇

3.1:RocketMQ常见命令

1.启动 NameSrv Broker
启动:nohup sh bin/mqnamesrv &
sh bin/mqbroker -n localhost : 9876 &
2.关闭 NameSrv Broker
sh bin/mqshutdown broker
sh bin/mqshutdown namesrv
注:
nohup:代表永久执行
&:代表后台执行
创建/修改 Topic : updateTopic
删除 Topic : deleteTopic
创建/修改订阅组:updatesubGroup
删除订阅组:deleteSubGroup
更新 Broker 配置:updateBrokerConfig
查询 Topic 的路由信息:TopicRoute
查看 Topic 列表信息:Topiclist
根据消息 ID 查询消息:queryMsgByld

3.2:RocketMQ-console介绍搭建

clone 控制台所在代码:https://github.com/apache/rocketmq-externals
控制台所在代码
打开idea导入rocketmq-connect-console
配置rocketmq.config.namesrvAddr=localhost:9876运行即可
启动之后即可通过localhost:8080图形化查看RocketMQ

3.2:RocketMQ与SpringBoot的结合

1.加入rocketmq-spring-boot-starter

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

2.创建消费者Consumer


@Component
@RocketMQMessageListener(
        topic = "my-topic",
        consumerGroup = "my-group",
        selectorExpression = "*"
)
public class SpringConsumer implements RocketMQListener<String> {
    @Override
    public void onMessage(String msg) {
        System.out.println("接收到消息 -> " + msg);
    }
}

3.创建生产者

@Component
public class SpringProducer {
    public final RocketMQTemplate rocketMQTemplate;

    public SpringProducer(RocketMQTemplate rocketMQTemplate) {
        this.rocketMQTemplate = rocketMQTemplate;
    }
    /**
     * 发送消息
     *
     * @param topic
     * @param msg
     */
    public void sendMsg(String topic, String msg) {
        rocketMQTemplate.convertAndSend(topic, msg);
    }
}

4.正式测试


@RunWith(SpringRunner.class)
@SpringBootTest
@WebAppConfiguration
public class TestHalo {
    @Autowired
    public SpringProducer springProducer;

    @Test
    public void testSendMessage() {
        springProducer.sendMsg("my-topic", "发送消息");
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值