MQ

本文记载MQ的学习笔记。

可以参考转载链接,应该写的比我更准确更详细一点。

MQ:message queue

消息队列就是基础数据结构中的‘先进先出’的一种数据结构。

MQ一直就存在,不过随着微服务架构的流行,成了解决微服务之间问题的常用工具。

主要用来解决如下问题:

1,系统解耦;

2,流量消峰;

3,消息分发;

4,异步消息。

消息中间件的组成:

broker:消息服务器,作为server提供消息核心服务;

producer:消息生产者,业务发起方,负责生产消息传输给broker;

consumer:消息消费者,业务处理方,负责从broker获取消息并进行业务逻辑处理;

topic:主题。发布订阅模式下的消息统一汇集地,不同生产者向topic发送消息,由MQ分发到不同的订阅者,实现消息的广播;

queue:队列,PTP模式下,特定生产者向特定queue发送消息,消费者订阅特定的queue完成指定消息的接收;

message:消息体,根据不同通信协议定义的固定格式进行编码的数据包,来封装业务数据,实现消息的传输。

消息中间件模式分类:

1,点对点

PTP点对点:使用queue作为通信载体

功能:一个生产者P发送消息到队列Q,一个消费者C接收

生产者实现思路:

创建连接工厂connectionFactory,设置服务器地址127.0.0.1,端口号5672,设置用户名密码和virtual host,从连接工厂中获取连接connection,使用连接创建通道channel,使用通道channel创建队列queue,使用通道channel向队列中发送消息,关闭通道和连接。

消费者实现思路:

创建连接工厂connectionFactory,设置服务器地址为127.0.0.1,设置用户名密码和virtual,从连接工厂中获取连接connection,使用连接创建通道channel,使用通道channel创建队列queue,创建消费者并监听队列,从队列中读取消息。

 

2,发布/订阅:

pub/sub发布订阅(广播):使用topic作为通信载体

说明:queue实现了负载均衡,将producer生产的消息发送到消息队列中,由多个消费者消费。但一个消息只能被一个消费者接受,当没有消费者可用时,这个消息会被保存直到一个可用的消费者。

topic实现了发布和订阅,当你发布一个消息,所有订阅这个topic的服务都能得到这个消息,所以从1到n个订阅者都能得到一个消息的拷贝。

这个模式是消息队列中最重要的队列了,其他的都是在它的基础上进行了扩展。

功能实现:一个生产者发送消息,多个消费者获取消息(同样的消息),包括一个生产者,一个交换机,多个队列和多个消费者。

思路解读(重点理解):

1)一个生产者,多个消费者;

2)每一个消费者都有自己的一个队列

3)生产者没有直接发送消息到队列中,而是发送到交换机

4)每个消费者的队列都绑定到交换机上

5)消息通过交换机到达每个消费者的队列

注意:交换机没有存储消息功能,如果是消息发送到没有绑定消费队列的交换机,则消息丢失。

具体可看rabbitmq中的实例代码,就是采用该种模式。

 

消息中间件常用协议:

AMQP:advanced message queueing protocol:一个提供统一消息服务的应用层标准高级消息队列协议。

MQTT:message queueing telemetry transport:消息队列遥测传输。

STOMP:streaming text orientated message protocol: 流向文本定向消息协议。

XMPP:extensible messaging and prensence protocol:基于可扩展标记语言(XML)的协议.

其他基于TCP/IP自定义的协议。

常见消息中间件MQ介绍

1,RocketMQ:阿里系下开源的一款分布式、队列模型的消息中间件,原名metaq,主要用于订单交易系统。

具有如下特点:

能够保证严格的消息顺序;

提供针对消息的过滤功能;

提供丰富的消息拉取模式;

高校的订阅者水平扩展能力;

实时的消息订阅机制;

亿级消息堆积能力。

2,RabbitMQ:使用Erlang编写的一个开源的消息队列。本身支持很多协议:AMQP,XMPP,SQTP,STOMO,使得它变得非常重量级,更适合企业级的开发,对路由,负载均衡,数据持久化都有很好的支持。

3,ActiveMQ:Apache下的一个子项目。

4,Reidis:使用C语言开发的一个key-value的Nosql数据库,开发维护很活跃,虽然是一个key-value数据库存储系统,但是它本身支持MQ功能,所以可以完全当作一个轻量级的队列服务使用。但是,如果入队数据大小超过了10K,redis则慢的无法忍受,出队时,无论数据大小,redis都表现出非常好的性能。

5,Kafka:Apache下的一个子项目,使用scala实现的一个高性能分布式publish/subscribe消息队列系统。

6,zeroMQ :号称最快的消息队列系统,专门为高吞吐量/低延迟的场景开发,偏重于实时数据通信场景。但是开发人员需要自己组合多种技术框架,开发成本高。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值