前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Springboot快速集成RocketMq

Springboot快速集成RocketMq

作者头像
用户7353950
发布2022-05-11 11:14:39
1.9K0
发布2022-05-11 11:14:39
举报
文章被收录于专栏:IT技术订阅

1、RocketMQ 简介:

RocketMQ前身是阿里研发的一个队列模型的消息中间件,后开源给apache基金会成为了apache的顶级开源项目,具有高性能、高可靠、高实时、分布式特点。

2、RocketMQ基本架构:

如图所示RocketMQ架构上主要分为四部分:

Producer:

充当消息发布的角色,支持分布式集群方式部署。producer通过MQ的负载均衡模块选择相应的Broker集群队列进行消息投递。投递的过程支持快速失败并且低延迟。

Consumer:

充当消息消费者的角色,支持分布式集群方式部署。支持以push推,pull拉两种模式对消息进行消费。同时也支持集群方式和广播形式的消费,它提供实时消息订阅机制,可以满足大多数用户的需求。

NameServer:

NameServer是一个功能齐全的服务器,其角色类似dubbo中的zookeeper,支持Broker的动态注册与发现。主要包括两个功能:

  1. Broker管理。NameServer接受Broker集群的注册信息并且保存下来作为路由信息的基本数据。然后提供心跳检测机制,检查Broker是否还存活。
  2. 路由信息管理。每个NameServer将保存关于Broker集群的整个路由信息和用于客户端查询的队列信息。然后Producer和Conumser通过NameServer就可以知道整个Broker集群的路由信息,从而进行消息的投递和消费。

NameServer通常也是集群的方式部署,各实例间相互不进行信息通讯。Broker是向每一台NameServer注册自己的路由信息,所以每一个NameServer实例上面都保存一份完整的路由信息。当某个NameServer因某种原因下线了,Broker仍然可以向其它NameServer同步其路由信息,Produce,Consumer仍然可以动态感知Broker的路由的信息。

配置NameServer:代码方式:producer.setNamesrvAddr("ip:port"); consumer.setNamesrvAddr("ip:port");多个实例的NameServer以";'分割。

java 配置:rocketmq.namesrv.addr

操作系统环境变量:NAMESRV_ADDR

HTTP Endpoint.

Broker Server:

broker主要负责消息的存储、投递和查询以及服务高可用保证。为了实现这些功能broker包含了以下几个重要子模块。

Remoting Module:整个broker的实体,负责处理来自clients端的请求。

Client Manager:负责管理客户端(Producer/Consumer)和维护Consumer的topic订阅信息

Store Service:提供方便简单的API接口处理消息存储到物理硬盘和查询功能。

HA Service:高可用服务,提供master broker 和 slave broker之间的数据同步功能。

Index Service:根据特定的Message key对投递到broker的消息进行索引服务,以提供消息的快速查询。

Springboot 快速集成RocketMq

1. 增加pom文件

代码语言:javascript
复制
<dependency>
 <groupId>org.hongxi</groupId>
 <artifactId>rocketmq-spring-boot-starter</artifactId>
</dependency>

2. 配置

代码语言:javascript
复制
rocketmq:
name-server: 192.168.0.84:9876
producer:
 group: test-group
sendMsgTimeoutMillis: 3000
reconsumeTimes: 3

3. 登录rocketmq管理后台添加topic(operation-topic)

4. 生产者使用

代码语言:javascript
复制
@Autowired
RocketMQTemplate rocketMQTemplate;

@Test
public void sendHelloWorld() {
    SendResult result = rocketMQTemplate.syncSend("operation-topic", "hello world");
    log.info("发送结果:{}", JSON.toJSONString(result));
}

5. 消费者使用

代码语言:javascript
复制
@Component
@RocketMQMessageListener(topic = "operation-topic", //topic主题
        consumerGroup = "consumer-group",          //消费组
        messageModel = MessageModel.CLUSTERING,
        consumeMode = ConsumeMode.ORDERLY)
@Slf4j
public class MqTestListener implements RocketMQListener<String> {

    @Override
    public void onMessage(String message) {
        log.info("接受到消息:{}", message);
    }
}

6. 注意事项

如何使用tag

代码语言:javascript
复制
/**
  * Same to {@link #syncSend(String, Message)}.
  *
  * @param destination formats: `topicName:tags`
  * @param payload     the Object to use as payload
  * @return {@link SendResult}
  */
public SendResult syncSend(String destination, Object payload) {
    return syncSend(destination, payload, producer.getSendMsgTimeout());
}

这里可以看到 destination = topicName:tags

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-05-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT技术订阅 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Springboot 快速集成RocketMq
    • 1. 增加pom文件
      • 2. 配置
        • 3. 登录rocketmq管理后台添加topic(operation-topic)
          • 4. 生产者使用
            • 5. 消费者使用
              • 6. 注意事项
              相关产品与服务
              负载均衡
              负载均衡(Cloud Load Balancer,CLB)提供安全快捷的四七层流量分发服务,访问流量经由 CLB 可以自动分配到多台后端服务器上,扩展系统的服务能力并消除单点故障。轻松应对大流量访问场景。 网关负载均衡(Gateway Load Balancer,GWLB)是运行在网络层的负载均衡。通过 GWLB 可以帮助客户部署、扩展和管理第三方虚拟设备,操作简单,安全性强。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档