小程序建站哪家好,vps新建的网站打不开,佛山木工机械厂骏域网站建设专家,wordpress固定菜单栏文章目录 一、项目背景二、需求分析1.核心概念2.BrokerServer核心组件3.核心API4.交换机类型5.持久化6.网络通信7.消息应答 三、消息队列模块划分 一、项目背景 什么是消息队列#xff1f; 消息队列就是#xff0c;基于阻塞队列#xff0c;封装成一个独立的服务器程序#… 文章目录 一、项目背景二、需求分析1.核心概念2.BrokerServer核心组件3.核心API4.交换机类型5.持久化6.网络通信7.消息应答 三、消息队列模块划分 一、项目背景 什么是消息队列 消息队列就是基于阻塞队列封装成一个独立的服务器程序实现跨主机使用生产者-消费者模型。生产者生产消息到消息队列消费者从消息队列消费数据。 二、需求分析
1.核心概念
生产者Producer生产消息的客户端消费者 (Consumer) 消费消息的客户端中间人 (Broker)消息队列服务器发布 (Publish)生产者发送消息给中间人订阅 (Subscribe) 要消费消息的消费者消费 (Consume消费者从中间人读取消息 Producer Client生产者客户端 Broker Server:消息队列服务器 Consumer Client消费者客户端 Publish Message生产消息 Subscribe Messge订阅消息
2.BrokerServer核心组件
虚拟主机VirtualHost类似于MySQL的dataBase用来区分不同组的业务。交换机Exchange生产者发送消息给BrokerServer实际上是给某个交换机发送消息交换机再把消息转发给队列。队列Queue:存储消息绑定Binding:交换机和队列之间的绑定关系多对多消息Message传递的内容
3.核心API
创建交换机exchangeDeclare删除交换机exchangeDelete创建队列queueDeclare删除队列queueDelete创建绑定queueBind删除绑定queueUnbind发布消息basicPublish订阅消息basicConsume 注意消费者得到服务器中的消息有两种方式 一种是消费者主动从服务器中取。 一种是服务器推送消息给消费者。这里的订阅消息只支持服务器推送消息给消费者。 确认消息basicAck 消费者主动告诉消息队列已经收到消息了。成功确认 4.交换机类型
直接交换机 Direct Exchange 根据队列名查找队列如果存在转发消息不存在就把消息丢弃。扇出交换机Fanout Exchange 转发消息至该交换机绑定的所有队列。主题交换机Topic Exchange 交换机和队列绑定的时候绑定关系中带有一个bindingKey(上联。发送消息的时候消息带有一个routingKey下联。在该交换机绑定的所有队列中查找如果routingKey和bindingKey对上的话就转发给该队列。没有就丢弃消息。
5.持久化 当服务器重启后内存的数据都会丢失。这个时候需要通过持久化来保证数据不丢失。通过将数据保存到硬盘上来实现持久化。 交换机、队列、绑定通过数据库来管理消息通过二进制的格式保存到文件中重启后从文件中读取数据到内存。 序列化/反序列化
6.网络通信 生产者和消费者都是客户端需要通过网络与服务器进行交互。这里的通信协议是基于TCP的自定义应用层协议。 在网络通信过程中客户端要提供对应API通过调用这个API来远程调用服务器的API实现对服务器的操作。
客户端这边除了对应服务器的方法外还需要实现其他的方法。
创建ConnectionnewConnection销毁Connectionclose 一个Connetion对象视作一次TCP连接。 创建Channel createChannel销毁Channelclose Channel是一次逻辑上的连接。一个Connection里包含多个Channel。连接/断开TCP的成本太高。但是客户端和服务器的交互业务很多所以通过多个Channel传输不同的数据channel之间互不相干达到复用TCP的效果。 7.消息应答
服务器推送消息给消费者的时候自动确认。消费者手动调用basicAck这个方法。
三、消息队列模块划分