最后
由于文案过于长,在此就不一一介绍了,这份Java后端架构进阶笔记内容包括:Java集合,JVM、Java并发、微服务、SpringNetty与 RPC 、网络、日志 、Zookeeper 、Kafka 、RabbitMQ 、Hbase 、MongoDB、Cassandra 、Java基础、负载均衡、数据库、一致性算法、Java算法、数据结构、分布式缓存等等知识详解。
本知识体系适合于所有Java程序员学习,关于以上目录中的知识点都有详细的讲解及介绍,掌握该知识点的所有内容对你会有一个质的提升,其中也总结了很多面试过程中遇到的题目以及有对应的视频解析总结。
目录
第一节:介绍
顺序消息含义介绍
原理解析
第二节:顺序消息-生产者和消息者步骤说明
顺序消息生产者代码实现步骤
顺序消息消费者代码实现步骤
第三节:顺序消息生产者
效果:
第四节:顺序消息消费者
效果:
第一节:介绍
======
顺序消息含义介绍
顺序消息指的是可以按照消息的发送顺序来消费(FIFO)。RocketMQ可以严格的保证消息有序,可以分为分区有序或者全局有序。
原理解析
在默认的情况下消息发送会采取Round Robin轮询方式把消息发送到不同的queue(分区队列);
而消费消息的时候从多个queue上拉取消息,这种情况发送和消费是不能保证顺序。
但是如果控制发送的顺序消息只依次发送到同一个queue中,消费的时候只从这个queue上依次拉取,则就保证了顺序。如下图所示:
当发送和消费参与的queue只有一个,则是全局有序;如果多个queue参与,则为分区有序,即相对每个queue,消息都是有序的。
第二节:顺序消息-生产者和消息者步骤说明
====================
顺序消息生产者代码实现步骤
1.创建消息生产者producer并制定生产者组名
2.指定Nameserver地址
3.启动producer
4.创建消息对象,指定主题Topic、Tag和消息体
5.发送消息,选择的send方法有三个参数:
-
* 参数一:消息对象
-
* 参数二:消息队列的选择器
-
* 参数三:选择队列的业务标识 6.关闭生产者producer
顺序消息消费者代码实现步骤
1.创建消费者Consumer,制定消费者组名
2.指定Nameserver地址
3.订阅主题Topic和Tag
4.设置回调函数,处理消息:与普通消息的差别,这里用的是MessageListenerOrderly
5.启动消费者consumer
注意:消费者的 Topic 和 Tag 需要和生产者保持一致
第三节:顺序消息生产者
===========
public class Producer {
public static void main(String[] args) throws Exception {
// 1.创建消息生产者producer,并制定生产者组名
DefaultMQProducer producer = new DefaultMQProducer(“demo_producer_order_group”);
// 2.指定Nameserver地址
producer.setNamesrvAddr(“192.168.88.131:9876”);
// 3.启动producer
producer.start();
System.out.println(“生产者启动”);
for (int i = 0; i < 20; i++) {
// 4.创建消息对象,指定主题Topic、Tag和消息体
Message msg = new Message(“Topic_order_demo”, “Tag_order_demo”,
(“Hello 虚竹,这是顺序消息” + i).getBytes(RemotingHelper.DEFAULT_CHARSET));
// 5.发送消息
/**
-
参数一:消息对象
-
参数二:消息队列的选择器
-
参数三:选择队列的业务标识
*/
SendResult result = producer.send(msg, new MessageQueueSelector() {
/**
-
@param mqs:队列集合
-
@param msg:消息对象
-
@param arg:业务标识的参数
-
@return
*/
总结
大型分布式系统犹如一个生命,系统中各个服务犹如骨骼,其中的数据犹如血液,而Kafka犹如经络,串联整个系统。这份Kafka源码笔记通过大量的设计图展示、代码分析、示例分享,把Kafka的实现脉络展示在读者面前,帮助读者更好地研读Kafka代码。
麻烦帮忙转发一下这篇文章+关注我
[外链图片转存中…(img-OYi725Sb-1715462964770)]