MQ
全称Message Queue
,消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过写和检索出入队列的正对应用程序的数据(消息)来通信,本质上四个队列,遵循先进先出(FIFO),只不过队列里面存放的内容是message而已,还是一种跨进程的通信机制,用于上下游传递消息。互联网架构中,MQ是一种非常常见的上下游“逻辑解耦+物理解耦”的消息通信服务。使用了MQ之后,消息上游只需要依赖MQ,不应依赖其他服务。
MQ的消费-生产者模型的一个典型的代表,一端往消息队列中不断的写入消息,而另一端则可以读取或者订阅队列中的消息。MQ和JMS类似,但不同的是JMS是SUN JAVA消息中间件服务的一个标准和API定义,而MQ则是遵循了AMQP协议的具体实现和产品。
使用场景:
在项目中,将一些无需即时返回且耗时的操作提取出来,进行了异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量。
JMS简介:
JMS即Java消息服务(Java Message Service)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。
定义:
JMS(Java Messaging Service
)是Java平台上有关面向消息中间件(MOM)的技术规范,它便于消息系统中的Java应用程序进行消息交换,并且通过提供标准的产生、发送、接收消息的接口简化企业应用的开发,翻译为Java消息服务。
简介:
JMS是一种与厂商无关的 API,用来访问消息收发系统消息。它类似于JDBC(Java DatabaseConnectivity)
:这里,JDBC 是可以用来访问许多不同关系数据库的 API,而 JMS 则提供同样与厂商无关的访问方法,以访问消息收发服务。许多厂商目前都支持JMS,包括 IBM 的 MQSeries、BEA
的 Weblogic JMS service
和 Progress 的 SonicMQ,这只是几个例子。 JMS 使您能够通过消息收发服务(有时称为消息中介程序或路由器)从一个 JMS 客户机向另一个JMS客户机发送消息。消息是 JMS 中的一种类型对象,由两部分组成:报头和消息主体。报头由路由信息以及有关该消息的元数据组成。消息主体则携带着应用程序的数据或有效负载。根据有效负载的类型来划分,可以将消息分为几种类型,它们分别携带:简单文本(TextMessage)、可序列化的对象 (ObjectMessage)、属性集合 (MapMessage)、字节流 (BytesMessage)、原始值流 (StreamMessage),还有无有效负载的消息 (Message)。
JMS和MQ的关系:
JMS是一个用于提供消息服务的技术规范,它制定了在整个消息服务提供过程中的所有数据结构和交互流程。而MQ则是消息队列服务,是面向消息中间件(MOM)的最终实现,是真正的服务提供者;MQ的实现可以基于JMS,也可以基于其他规范或标准。
支持JMS的开源MQ:
缺点:
1.削峰填谷
举例,某电商平台订单系统一秒内最多能处理20000次订单,在应付正常时段下单时是绰绰有余的,但是到例如六一八这种高峰下单时段,可能一秒内来了30000个订单,这订单系统就处理不了了,只能限制订单超过20000后不允许用户下单。这时可以使用消息队列做缓冲,就可以取消这个限制,把一秒内下的订单分散成一段时间来处理,这时有些用户可能在下单十几秒才能收到下单成功的操作,但是比不能下单的体验要好。
2.1 应用解耦
系统中用户创建订单之后,如果耦合调用库存系统、物流系统、支付系统,任何一个子系统出了故障,都会造成下单操作异常,当转变成基于消息队列的方式后,系统间调用的问题会减少很多,比如物流系统因为发生故障,需要几分钟来修复,正在这几分钟的时间里,物流系统要处理的内存被缓存在消息队列中,用户的下单操作可以正常完成。当物流系统恢复后,继续处理订单信息即可,下单用户感受不到物流系统的故障,提升系统的可用性。
3.1 异步提速
如上图,订单调用MQ后,MQ执行完之后,调用API通知订单系统。
特性 | ActiveMQ | Kafka | RabbitMQ | RocketMQ |
---|---|---|---|---|
单机吞吐量 | 万级,比RocketMQ/Kafka低一个数量级 | 10万级,高吞吐,一般配合大数据类系统来进行实时数据计算,日志采集等场景 | 同ActiveMQ | 10万级,支撑高吞吐 |
topic数量对吞吐量的影响 | topic从几十到几百个的时候,吞吐量会大幅下降,在同等机器下,Kafka尽量保证topic数量不要过多,如果要支撑大规模的topic,需要增加更多的机器资源 | topic可以达到几百/几千的级别,吞吐量会有较小幅度的下降,这是RocketMQ的一大优势,在同等机器下,可以支撑大量的topic | ||
可用性 | 高,基于主从架构实现高可用 | 非常高,分布式,一个数据多个副本,少数机器宕机,不会丢失数据,不会导致不可用 | 同ActiveMQ | 非常高,分布式架构 |
时效性 | ms级 | 延迟在ms级以内 | 微秒级,这是RabbitMQ的一大特点,延迟最低 | ms级 |
消息可靠性 | 有较低的概率丢失数据 | 同RocketMQ | 基本不丢失 | 经过参数优化配置,可以做到0丢失 |
功能支持 | MQ领域功能及其完备 | 功能较为简单,主要支持简单的MQ功能,在大数据领域的实时计算以及日志采集被大规模使用 | 基于erlang开发,并发能力很强,性能极好,延迟很低 | MQ功能较为完善,还是分布式的,扩展性好 |
社区活跃度 | 低 | 中 | 高 | 高 |
下载地址:
官网下载:
国内下载:
安装环境:
Win10 JDK8
安装步骤:
解压安装包
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ITygT9ET-1686366198627)(https://note.youdao.com/yws/res/3/WEBRESOURCE55b5fc126eb3269d5c91e27800d5d363)]
运行:
bin->activemq.bat
点击activemq.bat
运行即可
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7CWDJ1My-1686366198628)(https://note.youdao.com/yws/res/0/WEBRESOURCEac5f9a429ffb3a1120e10a0ec99680a0)]
访问地址:[http://127.0.0.1:8161/]
新版ActiveMQ需要用户名和密码,默认都为admin
。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tUdqZ5Fs-1686366198628)(https://note.youdao.com/yws/res/4/WEBRESOURCE0ef664a24bf65469e8474b3cff4b0c84)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3w66VxvE-1686366198628)(https://note.youdao.com/yws/res/0/WEBRESOURCE7aa196d33b8f5fcd7a7da1cd58cbaba0)]
修改后台用户名和密码可通过修改conf -> jetty-realm.properties
文件
待续++
待续++