第21篇 rabbitmq前阶段回顾和复习(第9篇到第20篇)

本文是对RabbitMQ源码分析的总结,重点探讨了WorkPool、ConsumerDispatcher、Channel以及AMQP协议的Method和Frame。从WorkPool的LinkedBlockingQueue到ConsumerDispatcher的任务分发,再到Channel的抽象方法和Message的处理流程,逐步揭示了RabbitMQ内部机制。同时,文章介绍了AMQP指令、BasicProperties和数据流规则,为读者提供了深入理解RabbitMQ的基础。

这一节主要是对于这周学习的复习和总结,第14篇到第21篇,以及它们之间的联系串一下,也算整理一下学习东西,也是将零星学习东西类似拼图一样形成一个局部的小块

1、复习

  • 其实这会分析源码是自底向上,我们是以第9篇WorkPool(工作池,所有任务存储地方),WorkPool使用LinkedBlockingQueue(JDK的链表队列)感兴趣分析一下,分析完LinkedBlockingQueue,在往上看就是第12篇 ConsumerWorkService(创建具体任务和触发任务功能), 一个ConsumerWorkService可能同时服务多个channel,所以这个时候需要统一管理这些消息和消费的分发工作,这个时候就使用ConsumerDispatcher类完成这件事情
  • 继续往上分析源码,这里会有channel(通道的概念),消息都是经过channel接收和发送的,channel 有很多的方法,比如声明queue(队列) 、exchange(交换机)、事务,已经相关的监听器,channel是在connection上一个封装了
  • 其实到此为止我想要看一下ChannelN的源码,发现牵扯的东西比较多,特别是AMQChannel抽象类,所有我进一步细化分析具体类,Method抽象类,其实Method抽象类是所有AMQP的指令的抽象的模板,不同指令有不同Method的实现,它的最终的目标就是为了转换成Frame(传输的数据单位),然后将Method的具体实现请求头属性(这个时候我就分析BasicProperties)写到对应Frame的流中呢?rabbitmq定义一些规则和约定之类,定义最基础的DataOutputStream和DataInputStream的包装ValueWriter和ValueReader源码,了解最基础写map和array以及一些基本数据类型写流的规则。
  • 再往上的话具体封装ContentHeaderPropertyWriter和ContentHeaderPropertyReader(主要定义写入BasicProperties属性的规则,最让人印象深刻的是flagWord 判断某个字段是否存在,对应位置置为1)

2、画个图描述一下

  • image-20210619160927041

  • 说明

    1. 表示AMQP接口就定义rabbitmq 的协议和实现,最终转换成可以传递的Frame流对象
    2. Channel接口定义一般抽象方法发布消息、tx,队列,交换器,监听器之类
    3. ConsumerDispatcher就是识别任务和分发任务工具
  • 灰色部分表示目前想要了解源码还没做的部分

3、总结

  1. 算是对前一阶段源码分析的总结和归纳,期间也学习不少好coding style
  2. 主要工作还是解决Consumer(也就消费者)这边一些逻辑源码,AMQP的协议Method的指令学习(具体指令没有深入了解)
  3. 希望您从中有所收获和感悟,欢迎评论
RabbitMQ是一个开源的消息队列系统,它可以实现不同应用之间的消息传递异步处理。在Java中,我们可以使用RabbitMQ的客户端库来创建管理消息队列,同时也可以使用监听器来实现对消息队列的监听处理。 下面是使用消息监听适配器来监听RabbitMQ消息的步骤: 1. 引入RabbitMQ客户端库 在Java项目中引入RabbitMQ的客户端库,可以使用Maven或Gradle进行依赖管理。 2. 配置RabbitMQ连接信息 在代码中配置RabbitMQ连接信息,包括主机名、端口号、用户名、密码等。 3. 创建消息监听适配器 创建一个消息监听适配器,并实现处理消息的方法。消息监听适配器会根据消息的类型调用相应的处理方法。 4. 注册消息监听器 将消息监听适配器注册到RabbitMQ的消息队列中,以便能够接收并处理消息。 下面是一个简单的示例代码: ```java import org.springframework.amqp.core.Message; import org.springframework.amqp.core.MessageListener; import org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter; public class RabbitMQListenerExample { public static void main(String[] args) { // 配置RabbitMQ连接信息 // ... // 创建消息监听适配器 MessageListenerAdapter listenerAdapter = new MessageListenerAdapter(new MyMessageListener()); // 设置处理消息的方法名 listenerAdapter.setDefaultListenerMethod("onMessage"); // 注册消息监听器 rabbitTemplate.setMessageListener(listenerAdapter); } } class MyMessageListener implements MessageListener { public void onMessage(Message message) { String messageBody = new String(message.getBody()); System.out.println("Received message: " + messageBody); // 处理消息 } } ``` 在上面的示例中,我们创建了一个消息监听适配器,并将其注册到RabbitMQ的消息队列中。在MyMessageListener类中实现了处理消息的方法onMessage,当有消息到达时,消息监听适配器会自动调用该方法来处理消息。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值