文档章节

ActiveMQ 学习记录 之 什么是消息队列

永远的Chester
 永远的Chester
发布于 2017/11/01 18:00
字数 1803
阅读 23
收藏 0

说ActiveMQ之前,不得不说一下 JMS。JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。

     JMS 使您能够通过消息收发服务(有时称为消息中介程序或路由器)从一个 JMS 客户机向另一个 JMS客户机发送消息。消息是 JMS 中的一种类型对象,由两部分组成:报头和消息主体。报头由路由信息以及有关该消息的元数据组成。消息主体则携带着应用程序的数据或有效负载。

根据有效负载的类型来划分,可以将消息分为几种类型,它们分别携带:简单文本(TextMessage)、可序列化的对象 (ObjectMessage)、属性集合 (MapMessage)、字节流 (BytesMessage)、原始值流 (StreamMessage),还有无有效负载的消息 (Message)。

 

一、什么是消息队列 和 其使用场景

消息队列有无数开源实现,一般没必要自己实现。zmq也好rabbitmq也好甚至redis也好,找一个合适的装上用就行就好像rdbms/nosql一样。技术都是解决问题的,消息队列解决的是将突发大量请求转换为后端能承受的队列请求,比如你的服务器一秒能处理100个订单,但秒杀活动1秒进来1000个订单,持续10秒,在后端能力无法增加的情况下,你可以用消息队列将总共10000个请求压在队列里,后台consumer按原有能力处理,100秒后处理完所有请求(而不是直接宕机丢失订单数据)。

 

来个个人通俗的解释吧。

消息队列,顾名思义 首先是个队列队,列的操作有入队和出队,也就是你有一个程序在产生内容然后入队(生产者) 另一个程序读取内容,内容出队(消费者)这是最最基本的概念。当你不需要立即获得结果,但是并发量又不能无限大的时候,差不多就是你需要使用消息队列的时候。比如你写日志,因为可能一个客户端有多个操作去写,又有很多个客户端,显然并发不能无穷大,于是你就需要把写日志的请求放入到消息队列里,在消费者那边依次把队列中产生的日志写到数据库里。至于怎么实现消息队列,其实你本身一个普通的队列就行呀~看你需要什么附加功能而已。

 

消息队列在大型电子商务类网站,如京东、淘宝、去哪儿等网站有这深入的应用,队列的主要作用是消除高并发访问高峰,
加快网站的响应速度。在不使用消息队列的情况下,用户的请求数据直接写入数据库,在高并发的情况下,
会对数据库造成巨大的压力,同时也使得系统响应延迟加剧。在使用队列后,用户的请求发给队列后立即返回
(当然不能直接给用户提示订单提交成功,京东上提示:您“您提交了订单,请等待系统确认”),
再由消息队列的消费者进程从消息队列中获取数据,异步写入数据库。由于消息队列的服务处理速度远快于数据库,
因此用户的响应延迟可得到有效改善。

 

消息中间件一般被用在异步消息通信、整合多个系统的场景,比如你注册CSDN论坛,你填写完注册信息点提交时,它会发一份验证邮箱的验证邮件给到你,这封邮件就可以通过消息中间异步发送给你。再举一个场景,原先有一个客户购买我们的工作管理平台,他用该平台模拟公司整个行政办公,业务流程,前提是把他原先的财务系统相关数据以单据的形式也要在我们的平台上走流程。这就涉及到数据整合问题了,当然解决方法有很多种,一种方法是可以通过在财务系统开发一个webservice接口,然后管理平台去访问该接口,也可以直接通过quartz做一个计划,不定时的去取相关数据,当然也可以在管理平台与财务系统之间弄一个消息总线,财务系统产生数据时,发送一份到消息中间件,然后管理平台去取。用消息中间件的好处是不仅数据实时性高,而且让管理平台与财务系统之间解耦了,将来生管系统有什么数据要走流程,也可以这样做。

 

在项目中,将一些无需即时返回且耗时的操作提取出来,进行了异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量。

 

 如果系统生态环境很单一,无需跟其他第三方进行通信,或是虽然要简单的通信但是数据量不大,业务不太复杂,其实个人认为是无需用MQ这种重量级的解决方案的,直接暴露接口就好了,总之就是一个权衡了。

 

二、常用 对象模型

 JMS对象模型包含如下几个要素: 

1)连接工厂。连接工厂(ConnectionFactory)是由管理员创建,并绑定到JNDI树中。客户端使用JNDI查找连接工厂,
然后利用连接工厂创建一个JMS连接。   

2)JMS连接。JMS连接(Connection)表示JMS客户端和服务器端之间的一个活动的连接,是由客户端通过调用连接工厂的方法建立的。

3)JMS会话。JMS会话(Session)表示JMS客户与JMS服务器之间的会话状态。JMS会话建立在JMS连接上,表示客户与服务器之间的一个会话线程。

4)JMS目的。JMS目的(Destination),又称为消息队列,是实际的消息源。

5)JMS生产者和消费者。生产者(Message Producer)和消费者(Message Consumer)对象由Session对象创建,用于发送和接收消息。

6)JMS消息通常有两种类型:

① 点对点(Point-to-Point)。在点对点的消息系统中,消息分发给一个单独的使用者。点对点消息往往与队列(javax.jms.Queue)相关联。

② 发布/订阅(Publish/Subscribe)。发布/订阅消息系统支持一个事件驱动模型,消息生产者和消费者都参与消息的传递。生产者发布事件,
而使用者订阅感兴趣的事件,并使用事件。该类型消息一般与特定的主题(javax.jms.Topic)关联。   

© 著作权归作者所有

共有 人打赏支持
永远的Chester
粉丝 6
博文 68
码字总数 60670
作品 0
昌平
程序员
私信 提问
ActiveMQ 持久化(数据库),查询队列剩余消息数、出队数的实现

《ActiveMQ 持久化(文件),查询队列剩余消息数、出队数的实现》分析了消息队列持久化保存,假如activemq服务器突然停止,服务器启动后,还可以继续查找队列中的消息。现在分析队列中的消息...

cookqq
2013/03/04
0
0
SpringBoot整合ActiveMQ消息队列

首先要讲什么是ActiveMQ:AciveMQ是Apache出品的目前最流行,能力强劲的开源消息总线 主要功能: 1、 解决服务之间代码耦合 2、 使用消息队列,增加系统并发处理量 主要应用场景: 1、 当系统...

逆风局局长熊
12/06
0
0
ActiveMQ 持久化(文件),查询队列剩余消息数、出队数的实现

本人博客开始迁移,博客整个架构自己搭建及编码 http://www.cookqq.com/listBlog.action 《ActiveMQ发消息和收消息》详细介绍了ActiveMQ发消息和收消息,消息保存在消息队列(queue)中,消息...

cookqq
2013/03/03
0
1
ActiveMQ学习记录 之 消息持久化

1:前言 这一段给公司开发消息总线有机会研究ActiveMQ,今天撰文给大家介绍一下他的持久化消息。本文只介绍三种方式,分别是持久化为文件,MYSql,Oracle。下面逐一介绍。 A:持久化为文件 这...

李格尔楞
2017/11/01
0
0
java消息队列ActiveMQ的简单使用

activeMQ 是学习java消息队列的实现项目,使用jfinal +jfinal-ext + activeMQ + quartz快速构建。 1.消息队列 消息队列,其实是一种基于数据结构实现的服务。而java语言中的实现,有apache的...

java邵先生
09/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

NEO 节点介绍

全节点(full nodes)是存储 NEO 区块链全部数据的节点,通过 P2P 的方式与区块链网络连接,在区块链网络中,所有的全节点都是平等的,既充当客户端又充当服务器。 NEO 有两个全节点程序: ...

NEO-FANS
4分钟前
0
0
内网穿透大杀器--EarthWorm

0x00 前言 如果感觉本文对你有帮助,请在文章末尾点个赞,谢谢表哥们支持! 当你在内网渗透,并且拿下一台机器的权限时,你是不是觉得已经算是一次完整的渗透了? 不来一次内网漫游,渗透是不...

刀剑如梦
9分钟前
0
0
PiggyMetrics分布式框架

https://github.com/sqshq/PiggyMetrics

丁建祥
10分钟前
0
0
零距离接触阿里云时序时空数据库TSDB

概述 最近,Amazon新推出了完全托管的时间序列数据库Timestream,可见,各大厂商对未来时间序列数据库的重视与日俱增。 阿里云TSDB是阿里巴巴集团数据库事业部研发的一款高性能分布式时序时空...

阿里云云栖社区
19分钟前
0
0
OkHttpClient封装

import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.util.Map; import java.util.TreeMap; import java.util.Map.Entry; import o......

尘叙缘
21分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部