RocketMQ原理(1)——服务端组件介绍

转自:https://zhuanlan.zhihu.com/p/25069846 感谢原作者
RocketMQ原理(1)——服务端组件介绍

RocketMQ原理(1)——服务端组件介绍

Jaskey Lam Jaskey Lam

RocketMQ服务端的组件有三个,NameServer,Broker,FilterServer(可选,部署于和Broker同一台机器)



Name Server

Name Server是RocketMQ的寻址服务。用于把Broker的路由信息做聚合。客户端依靠Name Server决定去获取对应topic的路由信息,从而决定对哪些Broker做连接。

  • Name Server是一个几乎无状态的结点,Name Server之间采取share-nothing的设计,互不通信。

  • 对于一个Name Server集群列表,客户端连接Name Server的时候,只会选择随机连接一个结点,以做到负载均衡。

  • Name Server所有状态都从Broker上报而来,本身不存储任何状态,所有数据均在内存。

  • 如果中途所有Name Server全都挂了,影响到路由信息的更新,不会影响和Broker的通信。

Broker

Broker是处理消息存储,转发等处理的服务器。

  • Broker以group分开,每个group只允许一个master,若干个slave。
  • 只有master才能进行写入操作,slave不允许。
  • slave从master中同步数据。同步策略取决于master的配置,可以采用同步双写,异步复制两种。
  • 客户端消费可以从master和slave消费。在默认情况下,消费者都从master消费,在master挂后,客户端由于从Name Server中感知到Broker挂机,就会从slave消费。
  • Broker向所有的NameServer结点建立长连接,注册Topic信息。

Filter Server(可选)

RocketMQ可以允许消费者上传一个Java类给Filter Server进行过滤。

  • Filter Server只能起在Broker所在的机器
  • 可以有若干个Filter Server进程
  • 拉取消息的时候,消息先经过Filter Server,Filter Server靠上传的Java类过滤消息后才推给Consumer消费。
  • 客户端完全可以消费消息的时候做过滤,不需要Filter Server
  • FilterServer存在的目的是用Broker的CPU资源换取网卡资源。因为Broker的瓶颈往往在网卡,而且CPU资源很闲。在客户端过滤会导致无需使用的消息在占用网卡资源。
  • 使用 Java 类上传作为过滤表达式是一个双刃剑,一方面方便了应用的过滤操作且节省网卡资源,另一方面也带来了服务器端的安全风险,这需要足够谨慎,消费端上传的class要保证过滤的代码足够安全——例如在过滤程序里尽可能不做申请大内存,创建线程等操作,避免 Broker 服务器资源泄漏。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot是一个用于创建独立的、基于生产级别的Spring应用程序的框架。而RocketMQ是一个开源的分布式消息中间件,具有高吞吐量、高可用性、可伸缩性和容错性等特点。下面是Spring Boot集成RocketMQ服务端的步骤: 1. 添加RocketMQ依赖:在Spring Boot项目的pom.xml文件中添加RocketMQ的依赖,例如: ```xml <dependency> <groupId>org.apache.rocketmq</groupId> <artifactId>rocketmq-spring-boot-starter</artifactId> <version>2.2.0</version> </dependency> ``` 2. 配置RocketMQ:在Spring Boot项目的application.properties或application.yml文件中配置RocketMQ相关属性,例如: ```yaml rocketmq.name-server=127.0.0.1:9876 rocketmq.producer.group=my-group rocketmq.consumer.group=my-group ``` 3. 创建RocketMQ生产者:使用RocketMQ提供的注解和配置,创建一个RocketMQ生产者,例如: ```java @Component @RocketMQProducer(topic = "my-topic", producerGroup = "my-group") public class MyProducer { @Autowired private RocketMQTemplate rocketMQTemplate; public void sendMessage(String message) { rocketMQTemplate.convertAndSend("my-topic", message); } } ``` 4. 创建RocketMQ消费者:使用RocketMQ提供的注解和配置,创建一个RocketMQ消费者,例如: ```java @Component @RocketMQMessageListener(topic = "my-topic", consumerGroup = "my-group") public class MyConsumer implements RocketMQListener<String> { @Override public void onMessage(String message) { System.out.println("Received message: " + message); } } ``` 5. 启动应用程序:运行Spring Boot应用程序,RocketMQ生产者将发送消息到指定的主题,RocketMQ消费者将接收并处理消息。 这样,你就完成了Spring Boot集成RocketMQ服务端的配置和使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值