从零开始学 Java - Spring 集成 ActiveMQ 配置(一)
你家小区下面有没有快递柜
近两年来,我们收取快递的方式好像变了,变得我们其实并不需要见到快递小哥也能拿到自己的快递了。对,我说的就是类似快递柜、菜鸟驿站这类的代收点的出现,把我们原来快递小哥必须拿着快递让你签收的形式,变为了你下班后去指定地方输入验证码取出你的快递就行了,再也不用麻烦保安大哥或者寄到公司后再带回家去,这个改变你不感觉大大方便了我们这些剁手党么?并且如果你买的是什么见不得人的东西,如什么情趣、什么娃娃的也并不那么尴尬了。
更神奇的是,去年有段时间我们公司的早餐都是有早餐柜子的,你提前订好一周的或者明天的,当你到公司门口,你的早餐已经在保温柜里了,你自己去取出来就行了。并不需要我们拿着钱,然后跟买早餐的阿姨说,两个包子不要肉的。
什么是消息队列
我认为上面的事情就是现实中的消息队列,或者说类似与我们软件中的消息队列,并且它们都是异步的。
在计算机科学中,消息队列(Message queue)是一种进程间通信或同一进程的不同线程间的通信方式,软件的贮列用来处理一系列的输入,通常是来自用户。消息队列提供了异步的通信协议,每一个贮列中的纪录包含详细说明的数据,包含发生的时间,输入设备的种类,以及特定的输入参数,也就是说:消息的发送者和接收者不需要同时与消息队列互交。消息会保存在队列中,直到接收者取回它。
来自维基百科
我来说一下上面的「快递柜」的例子,其实快递柜我们就可以理解为消息容器,快递就是我们系统中的消息,生产者肯定就是快递公司或者卖家了,那我们想都不用想本来就是消费者。
正常来说,快递公司是要负责任的亲自把货物送到我们手中,当然之前他们也是这么做的,这种传统的方式我们可以理解为我们的 HTTP 请求,就是我们一直使用的同步方式,双方必须同时有反馈产生,我们才认为完成了改操作,就是快递小哥让你签收了快递才送这单儿正式完成了。在快递投递的传统方式下就产生了一系列用户体验方面的问题,比如,快递地址是家里,这时候你在公司上班,并且你并不急需这个快递。这种情况下,快递柜子就解决了这个问题,一是并不打扰你日常工作(我试过一天接到三个快递电话),还能提高快递投递效率,何乐而不为呢!这种方式就是程序中的异步的,它允许接收者在消息发送很长时间后再取回消息,提高服务器处理性能,而且还能一定程度降低耦合,这其实就是消息队列。
JMS 代表着什么
JMS(Java Messaging Service)Java 消息服务是 Java 平台上有关面向消息中间件(MOM)的技术规范,它便于消息系统中的 Java 应用程序进行消息交换,并且通过提供标准的产生、发送、接收消息的接口简化企业应用的开发。
也就是说它定义看一系列规范,然后大家按照这种规范来开发自己消息服务,当然,现在有好多开源的来供大家使用了,比较常用的有 Apache ActiveMQ、RabbitMQ、Redis、Jafka/Kafka 等等这些。
Java 消息服务应用程序结构支持两种模型:点对点或队列模型、发布者/订阅者模型。
点对点或队列模型意思一个生产者向一个特定的队列发布消息,一个消费者从该队列中读取消息。有且只有一个消费者将获得消息,生产者不需要在接收者消费该消息期间处于运行状态,接收者也同样不需要在消息发送时处于运行状态。
发布者/订阅者模型则是向一个特定的消息主题发布消息。0 或 n 个订阅者可能对接收来自特定消息主题的消息感兴趣。在这种模型下,发布者和订阅者彼此不知道对方。多个消费者可以获得消息,在发布者和订阅者之间存在时间依赖性。发布者需要建立一个订阅(subscription),以便客户能够订阅。订阅者必须保持持续的活动状态以接收消息,除非订阅者建立了持久的订阅。
说说我的选择
通过标题其实你已经知道了,我选择了 Apache ActiveMQ 来做消息队列的实现,并且我们的项目中貌似还不需要发布者/订阅者这种消息模型,所以,我这里也是采用点对点模型用于示例演示。当然,这里你们也不要问我为啥不选用 Redis ,我不想解释。
这篇文章也是没有所谓的「干货」,下一篇 从零开始学 Java - Spring 集成 ActiveMQ 配置(二) 会有的,但我还是想说,这个思考过程很重要。下一篇会讲到 ActivMQ 与 Spring 框架的整合配置,以及我们的多队列配置、断线重连机制,当然还有的生产者及消费监听者的具体代码实现,这些都会有(不重要)。
如果你有兴趣可以去我的 GitHub 上关于 Spring 的示例项目看看:https://github.com/mafly/SpringDemo。
从零开始学 Java - Spring 集成 ActiveMQ 配置(一)的更多相关文章
- 从零开始学 Java - Spring 集成 ActiveMQ 配置(二)
从上一篇开始说起 上一篇从零开始学 Java - Spring 集成 ActiveMQ 配置(一)文章中讲了我关于消息队列的思考过程,现在这一篇会讲到 ActivMQ 与 Spring 框架的整合配置 ...
- 从零开始学 Java - Spring 集成 Memcached 缓存配置(一)
硬盘和内存的作用是什么 硬盘的作用毫无疑问我们大家都清楚,不就是用来存储数据文件的么?如照片.视频.各种文档或等等,肯定也有你喜欢的某位岛国老师的动作片,这个时候无论我们电脑是否关机重启它们永远在那里 ...
- 从零开始学 Java - Spring 集成 Memcached 缓存配置(二)
Memcached 客户端选择 上一篇文章 从零开始学 Java - Spring 集成 Memcached 缓存配置(一)中我们讲到这篇要谈客户端的选择,在 Java 中一般常用的有三个: Memc ...
- 从零开始学 Java - Spring 支持 CORS 请求踩的坑
谁没掉进过几个大坑 记得好久之前,总能时不时在某个地方看到一些标语,往往都是上面一个伟人的头像,然后不管是不是他说的话,下面总是有看起来很政治正确且没卵用的屁话,我活到目前为止,最令我笑的肚子痛得是下 ...
- 从零开始学 Java - Spring MVC 实现跨域资源 CORS 请求
论职业的重要性 问:为什么所有家长都希望自己的孩子成为公务员? 答:体面.有权.有钱又悠闲. 问:为什么所有家长都希望自己的孩子成为律师或医生? 答:体面.有钱.有技能. 问:为什么所有家长都不怎么知 ...
- 从零开始学 Java - Spring AOP 实现用户权限验证
每个项目都会有权限管理系统 无论你是一个简单的企业站,还是一个复杂到爆的平台级项目,都会涉及到用户登录.权限管理这些必不可少的业务逻辑.有人说,企业站需要什么权限管理阿?那行吧,你那可能叫静态页面,就 ...
- 从零开始学 Java - Spring AOP 实现主从读写分离
深刻讨论为什么要读写分离? 为了服务器承载更多的用户?提升了网站的响应速度?分摊数据库服务器的压力?就是为了双机热备又不想浪费备份服务器?上面这些回答,我认为都不是错误的,但也都不是完全正确的.「读写 ...
- 从零开始学 Java - Spring 一主多从、多主多从 数据库配置
待会苹果要开发布会 我写完这篇文章就准备去看发布会了,因为我买了好几包瓜子和啤酒.由于苹果的保密做的越来越差劲,该曝光的信息差不多全部曝光了,我们这种熬夜看发布会的只不过是让这些信息更加真实,或者说是 ...
- Spring集成ActiveMQ配置 --转
转自:http://suhuanzheng7784877.iteye.com/blog/969865 集成环境 Spring采用2.5.6版本,ActiveMQ使用的是5.4.2,从apache站点可 ...
随机推荐
- 以bank account 数据为例,认识elasticsearch query 和 filter
Elasticsearch 查询语言(Query DSL)认识(一) 一.基本认识 查询子句的行为取决于 query context filter context 也就是执行的是查询(query)还是 ...
- [APUE]标准IO库(下)
一.标准IO的效率 对比以下四个程序的用户CPU.系统CPU与时钟时间对比 程序1:系统IO 程序2:标准IO getc版本 程序3:标准IO fgets版本 结果: [注:该表截取自APUE,上表中 ...
- 获取Canvas当前坐标系矩阵
前言 在我的另一篇博文 Canvas坐标系转换 中,我们知道了所有的平移缩放旋转操作都会影响到画布坐标系.那在我们对画布进行了一系列操作之后,怎么再知道当前矩阵数据状态呢. 具体代码 首先请看下面的一 ...
- C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子)
第一次接触HtmlAgilityPack是在5年前,一些意外,让我从技术部门临时调到销售部门,负责建立一些流程和寻找潜在客户,最后在阿里巴巴找到了很多客户信息,非常全面,刚开始是手动复制到Excel, ...
- angular2系列教程(七)Injectable、Promise、Interface、使用服务
今天我们要讲的ng2的service这个概念,和ng1一样,service通常用于发送http请求,但其实你可以在里面封装任何你想封装的方法,有时候控制器之间的通讯也是依靠service来完成的,让我 ...
- webstorm下载&&安装过程&&打开项目
一.webstorm下载 WebStorm 是jetbrains公司旗下一款JavaScript 开发工具.被广大中国JS开发者誉为"Web前端开发神器"."最强大的HT ...
- WebApi返回Json格式字符串
WebApi返回json格式字符串, 在网上能找到好几种方法, 其中有三种普遍的方法, 但是感觉都不怎么好. 先贴一下, 网上给的常用方法吧. 方法一:(改配置法) 找到Global.asax文件,在 ...
- 设计模式之单例模式(Singleton)
设计模式之单例模式(Singleton) 设计模式是前辈的一些经验总结之后的精髓,学习设计模式可以针对不同的问题给出更加优雅的解答 单例模式可分为俩种:懒汉模式和饿汉模式.俩种模式分别有不同的优势和缺 ...
- SharePoint 2016 必备组件离线安装介绍
前言 SharePoint 必备组件安装,一直以来都是SharePoint安装过程中的最大的坑,尤其是不能联网的服务器.博主在这里简单介绍一下离线安装过程,并附组件包下载以及安装命令,并且在windo ...
- 解决:win10_x64 VMware Workstation and Hyper-V are not compatible. Remove the Hyper-V role from the system before running VMware Workstation
bcdedit /set hypervisorlaunchtype off A reboot of of the Windows OS is necessary 必须重启才能生效 To enab ...