你家小区下面有没有快递柜

近两年来,我们收取快递的方式好像变了,变得我们其实并不需要见到快递小哥也能拿到自己的快递了。对,我说的就是类似快递柜、菜鸟驿站这类的代收点的出现,把我们原来快递小哥必须拿着快递让你签收的形式,变为了你下班后去指定地方输入验证码取出你的快递就行了,再也不用麻烦保安大哥或者寄到公司后再带回家去,这个改变你不感觉大大方便了我们这些剁手党么?并且如果你买的是什么见不得人的东西,如什么情趣、什么娃娃的也并不那么尴尬了。

更神奇的是,去年有段时间我们公司的早餐都是有早餐柜子的,你提前订好一周的或者明天的,当你到公司门口,你的早餐已经在保温柜里了,你自己去取出来就行了。并不需要我们拿着钱,然后跟买早餐的阿姨说,两个包子不要肉的。

什么是消息队列

我认为上面的事情就是现实中的消息队列,或者说类似与我们软件中的消息队列,并且它们都是异步的。

在计算机科学中,消息队列(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 配置(一)的更多相关文章

  1. 从零开始学 Java - Spring 集成 ActiveMQ 配置(二)

    从上一篇开始说起 上一篇从零开始学 Java - Spring 集成 ActiveMQ 配置(一)文章中讲了我关于消息队列的思考过程,现在这一篇会讲到 ActivMQ 与 Spring 框架的整合配置 ...

  2. 从零开始学 Java - Spring 集成 Memcached 缓存配置(一)

    硬盘和内存的作用是什么 硬盘的作用毫无疑问我们大家都清楚,不就是用来存储数据文件的么?如照片.视频.各种文档或等等,肯定也有你喜欢的某位岛国老师的动作片,这个时候无论我们电脑是否关机重启它们永远在那里 ...

  3. 从零开始学 Java - Spring 集成 Memcached 缓存配置(二)

    Memcached 客户端选择 上一篇文章 从零开始学 Java - Spring 集成 Memcached 缓存配置(一)中我们讲到这篇要谈客户端的选择,在 Java 中一般常用的有三个: Memc ...

  4. 从零开始学 Java - Spring 支持 CORS 请求踩的坑

    谁没掉进过几个大坑 记得好久之前,总能时不时在某个地方看到一些标语,往往都是上面一个伟人的头像,然后不管是不是他说的话,下面总是有看起来很政治正确且没卵用的屁话,我活到目前为止,最令我笑的肚子痛得是下 ...

  5. 从零开始学 Java - Spring MVC 实现跨域资源 CORS 请求

    论职业的重要性 问:为什么所有家长都希望自己的孩子成为公务员? 答:体面.有权.有钱又悠闲. 问:为什么所有家长都希望自己的孩子成为律师或医生? 答:体面.有钱.有技能. 问:为什么所有家长都不怎么知 ...

  6. 从零开始学 Java - Spring AOP 实现用户权限验证

    每个项目都会有权限管理系统 无论你是一个简单的企业站,还是一个复杂到爆的平台级项目,都会涉及到用户登录.权限管理这些必不可少的业务逻辑.有人说,企业站需要什么权限管理阿?那行吧,你那可能叫静态页面,就 ...

  7. 从零开始学 Java - Spring AOP 实现主从读写分离

    深刻讨论为什么要读写分离? 为了服务器承载更多的用户?提升了网站的响应速度?分摊数据库服务器的压力?就是为了双机热备又不想浪费备份服务器?上面这些回答,我认为都不是错误的,但也都不是完全正确的.「读写 ...

  8. 从零开始学 Java - Spring 一主多从、多主多从 数据库配置

    待会苹果要开发布会 我写完这篇文章就准备去看发布会了,因为我买了好几包瓜子和啤酒.由于苹果的保密做的越来越差劲,该曝光的信息差不多全部曝光了,我们这种熬夜看发布会的只不过是让这些信息更加真实,或者说是 ...

  9. Spring集成ActiveMQ配置 --转

    转自:http://suhuanzheng7784877.iteye.com/blog/969865 集成环境 Spring采用2.5.6版本,ActiveMQ使用的是5.4.2,从apache站点可 ...

随机推荐

  1. css实现单行,多行文本溢出显示省略号……

    1.单行文本溢出显示省略号我们可以直接用text-overflow: ellipsis 实现方法: <style> .div_text{width: 300px; padding:10px ...

  2. ASP.NET MVC5+EF6+EasyUI 后台管理系统(65)-MVC WebApi 用户验证 (1)

    系列目录 前言: WebAPI主要开放数据给手机APP,其他需要得知数据的系统,或者软件应用,所以移动端与系统的数据源往往是相通的. Web 用户的身份验证,及页面操作权限验证是B/S系统的基础功能, ...

  3. Python爬虫小白入门(四)PhatomJS+Selenium第一篇

    一.前言 在上一篇博文中,我们的爬虫面临着一个问题,在爬取Unsplash网站的时候,由于网站是下拉刷新,并没有分页.所以不能够通过页码获取页面的url来分别发送网络请求.我也尝试了其他方式,比如下拉 ...

  4. 在你的ASP.NET MVC中使用查找功能

    在程序中,使用查找功能是少之不了.今天在ASP.NET环境下演示一回. 在cshtml视图中,有三个文本框,让用户输入关键词,然后点击最右连的“搜索”铵钮,如果有结果将显示于下面. Html: 表格放 ...

  5. Highcharts中国地图热力图

    最近有个项目需要将MC销量按大陆各省统计,并以中国地图人力图效果显示.由于项目一直使用Highcharts进行图表的统计,故采用Highmaps来实现. 效果如下: 1)中国各个省.直辖市.自治区: ...

  6. Android中Activity运行时屏幕方向与显示方式详解

    现在我们的手机一般都内置有方向感应器,手机屏幕会根据所处位置自动进行横竖屏切换(前提是未锁定屏幕方向).但有时我们的应用程序仅限在横屏或者竖屏状态下才可以运行,此时我们需要锁定该程序Activity运 ...

  7. Python处理Excel表格

    同事小王今天说他有一个Excel表格,表格如下,一列是姓名,一列是电话号码,总共有大概2000行数据. 有的姓名占了一行,有的占了两行,还有一些占了三行的.如下图: 他问我可不可以全部统一成一行,而且 ...

  8. 在Linux上运行ASP.NET vNext

    最新的ASP.NET vNext完全开源且可以跨多个平台运行,在Windows环境下我尝试了下,几乎没花什么工夫就跑起了Sample,而在Linux环境下则要多花了不少时间,所以特别记录下整个过程,希 ...

  9. 让 ASP.NET vNext 在 Mac OS 中飞呀飞。。。

    写在前面 阅读目录: 娓娓道来 Install ASP.NET vNext Command Line Tools 安装 Homebrew 使用 Homebrew,安装 KVM Install Subl ...

  10. [计算机网络]简易http server程序

    好久没输出了,知识还是要写下总结才能让思路更加清晰.最近在学习计算机网络相关的知识,来聊聊如何编写一个建议的HTTP服务器. 这个http server的实现源代码我放在了我的github上,有兴趣的 ...