【以前的通信技术的局限性】

在大规模和复杂的分布式系统中,传统的RMI、DCOM等中间件通信技术逐渐有了局限性,如下:

1.同步通信:客户发出调用后,必须等待服务对象完成处理并返回结果才能继续执行。

2.客户和服务对象的生命周期紧密耦合:客户端进程和服务对象进程都必须正常运行;由于服务对象崩溃或者网络故障导致客户的请求不可达,客户端接收异常。

3.点对点通信:客户的一次调用只能发送给单独的某个某个目标。

【面向消息的中间件】

面向对象的中间件(Message Oriented Middleware ,MOM )较好地解决了以上问题。

发送者将消息发送给消息服务器,消息服务器将消息存放在若干队列中,在合适的时候再将消息转发给接受者。

这种模式的特点:

1.发送和接收是异步的,发送者无需等待;

2.二者的生命周期未必相同:发送消息的时候接受者不一定运行,接收消息的时候,发送者不一定运行。

3.一对多通信:对于一个消息,可以有多个接收者。

【JMS】

java消息服务(JMS)定义了java中访问消息中间件的接口。JMS只是接口,并没有给予实现,实现JMS接口的消息中间件成为JMS Provider,已有的消息中间件有ActiveMQ、RocketMQ、RabbitMQ等等。

【JMS中的术语】

[ JMS ]                     实现JMS接口的i中间件

[ Provider ]               生产者(MessageProvider)

[ Consumer ]            消费者( MessageConsumer )

[ PTP ]                      点对点的消息模型(Point TO Point)

[ Pub/Sub ]               发布/订阅的消息模型(Publish/Subscribe)

[ Queue ]                   队列目标

[ Topic ]                    主题目标

[ ConnectionFactory ]  连接工厂,JMS用它创建连接

[ Connection ]            JMS客户端到JMS Provider 的连接

[ Desitination ]           消息的目的地

[ Session ]                 会话,一个发送或接收消息的线程

【JMS术语详细介绍】

[ ConnectionFactory接口(连接工厂) ]

用户用来创建到JMS提供者的连接的被管对象。JMS客户通过可移植性的接口访问连接,这样当下层的实现改变时候,代码不需要修改。

管理员在JNDI名字空间中配置连接工厂,这样JMS客户才能查找到他们,根据消息类型的不同,用户将使用队列连接工厂或者主题连接工厂。

[ Connection接口(连接) ] 

连接代表了应用程序和消息服务器之间的通信链路。在获得了连接工厂后,就可以创建一个与JMS提供者的连接。

根据不同的连接类型,连接允许用户创建会话,以发送和接收 队列(Queue)或主题(Topic)到目标。

[ Desination接口(目标) ]

目标是一个包装了消息目标标识符的被管对象,消息目标是指消息发布和接收的地点,或者是队列,或者是主题。

JMS管理员创建这些对象,然后用户通过JNDI发现它们,和连接工厂一样,管理员可以创建两种类型的目标:点对点(PTP)的队列 或 发布者/订阅者模型的主题。

[ MessageProducer 接口(消息生产者) ]

由会话(session)创建的对象,用于发送消息到目标。用户可以创建某个目标的发送者,也可以创建一个通用的发送者,在发送消息时指定目标。

[ MessageConsumer接口(消息消费者) ]

由会话创建的对象,用于接收发送到目标的消息。消费者可以同步地(阻塞模式),或异步(非阻塞)接收队列或主题类型的消息。

[ Message接口(消息) ]

在消息消费者和消息生产者之间传送的对象,也就是说从一个应用程序传送到另一个应用程序。

消息接口非常灵活,并提供了许多方式来定制消息内容。

一个消息主要由三部分组成:

1. 消息头 (必须):包含用于识别和为消息寻找路由的操作设置。

2.一组消息属性(可选):包含额外的属性,支持其他提供者和用户的兼容。可以创建定制的字段和过滤器(消息选择器)。

3.一个消息体(可选):允许用户创建五种类型的消息(文本消息、映射消息、字节消息、流消息、对象消息)

[ Session接口(会话) ]

表示一个单线程的上下文,用于发送和接收消息。

由于会话是单线程的,所以消息是连续的,就是说消息是按照发送的顺序一个一个接收的,会话的好处是它支持事务,如果用户选择了事务支持,会话上下文将保存一组消息,直到事务被提交才会发送这些消息。

在提交事务之前,用户可以使用回滚操作取消这些消息。

一个会话允许用户创建消息生产者来发送消息,创建消息消费者来接收消息。

【消息的格式定义】

JMS定义了五中不同的消息正文格式,以及调用的消息类型,允许你发送并接受一些不同形式的数据,提供现有消息格式的一些级别的兼容性。

1. StreamMessage : Java原始值的数据流

2. MapMessage : 一套名称-值对

3.TextMessage : 一个字符串对象

4.ObjectMessage : 一个序列化的Java对象

5.BytesMessage : 一个未解释字节的数据流

01_JMS概述的更多相关文章

  1. 【AR实验室】ARToolKit之概述篇

    0x00 - 前言 我从去年就开始对AR(Augmented Reality)技术比较关注,但是去年AR行业一直处于偶尔发声的状态,丝毫没有其"异姓同名"的兄弟VR(Virtual ...

  2. Recurrent Neural Network系列1--RNN(循环神经网络)概述

    作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 本文翻译自 RECURRENT NEURAL NETWORKS T ...

  3. Swift3.0服务端开发(一) 完整示例概述及Perfect环境搭建与配置(服务端+iOS端)

    本篇博客算是一个开头,接下来会持续更新使用Swift3.0开发服务端相关的博客.当然,我们使用目前使用Swift开发服务端较为成熟的框架Perfect来实现.Perfect框架是加拿大一个创业团队开发 ...

  4. .Net 大型分布式基础服务架构横向演变概述

    一. 业务背景 构建具备高可用,高扩展性,高性能,能承载高并发,大流量的分布式电子商务平台,支持用户,订单,采购,物流,配送,财务等多个项目的协作,便于后续运营报表,分析,便于运维及监控. 二. 基础 ...

  5. [C#] 进阶 - LINQ 标准查询操作概述

    LINQ 标准查询操作概述 序 “标准查询运算符”是组成语言集成查询 (LINQ) 模式的方法.大多数这些方法都在序列上运行,其中的序列是一个对象,其类型实现了IEnumerable<T> ...

  6. 【基于WinForm+Access局域网共享数据库的项目总结】之篇一:WinForm开发总体概述与技术实现

    篇一:WinForm开发总体概述与技术实现 篇二:WinForm开发扇形图统计和Excel数据导出 篇三:Access远程连接数据库和窗体打包部署 [小记]:最近基于WinForm+Access数据库 ...

  7. Java消息队列--JMS概述

    1.什么是JMS JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送 ...

  8. [AlwaysOn Availability Groups]健康模型 Part 1——概述

    健康模型概述 在成功部署AG之后,跟踪和维护健康状况是很重要的. 1.AG健康模型概述 AG的健康模型是基于策略管理(Policy Based Management PBM)的.如果不熟悉这个特性,可 ...

  9. μCos-ii学习笔记1_概述

    一.μCos-ii _概述 网上关于μCosii的文章多不胜数,本人学习的过程中也参考了很多人的理解和想法,看的是卢有亮老师的<嵌入式实时操作系统-μC/OS原理与实践>(第2版),同时也 ...

随机推荐

  1. js 封装一个均速动画函数

    //动画函数---任意一个元素移动到指定的目标位置 //element为元素 target为位置 function carToon(element, target) { //设置一个定时器让他循环去增 ...

  2. CBoard 汉化以及元数据存储配置

    汉化配置如图位置: 元数据存储配置为Mysql数据库的位置 版权声明:本文为博主原创文章,需要转载请注明出处. [置顶]Cboard 系列随笔

  3. 洛谷 P2330 [SCOI2005]繁忙的都市(最小生成树)

    嗯... 题目链接:https://www.luogu.org/problemnew/show/P2330 这道题的问法也实在是太模板了吧: 1.改造的道路越少越好 2.能够把所有的交叉路口直接或间接 ...

  4. Java 实现手机发送短信验证码

    Java 实现手机发送短信验证码 采用引入第三方工具的方式,网上查了半天,发现简单的实现方式便是注册一个中国网建的账号,新建账号的时候会附带赠几条免费短信,彩信 ,之后想要在使用就得花钱了.简单的操作 ...

  5. Qt 学习之路 2(62):保存 XML

    Home / Qt 学习之路 2 / Qt 学习之路 2(62):保存 XML Qt 学习之路 2(62):保存 XML  豆子  2013年8月26日  Qt 学习之路 2  9条评论 前面几章我们 ...

  6. mac 添加环境变量

    1.Mac系统的环境变量,加载顺序为: a. /etc/profile b. /etc/paths c. ~/.bash_profile d. ~/.bash_login e. ~/.profile ...

  7. Android 利用apache tomcat在自己的电脑上搭建服务器

    1.什么叫服务器 装了服务器端的软件的那台电脑被称为服务器.常见的服务器的软件有apache tomcat. 2.Tomcat 介绍 tomcat是一种轻量级的web容器服务器,使用tomcat可以实 ...

  8. PHP 生成随机数组

    /** 生成指定个数,以及最小最大值随机数组(包括最大值) * @parem $min 随机数组最小值 * @parem $max 随机数组最大值 * @parem $num 随机数组个数,默认max ...

  9. WPF Hidden和Collapsed

    对于这两种设定,其实已经提示的很清楚了 Visibility="Hidden"不显示元素,但是在布局为元素保留空间 Visibility="Collapsed" ...

  10. F查询和Q查询

    F查询 在上面所有的例子中,我们构造的过滤器都只是将字段值与某个我们自己设定的常量做比较.如果我们要对两个字段的值做比较,那该怎么做呢? Django 提供 F() 来做这样的比较.F() 的实例可以 ...