深入浅出JMS(一)——JMS简要
假设手机只能实时通话。没有邮件和短信功能发生?一个电话回来。只是没有足够的时间去连接。然后传递这款手机的信息肯定是不接受。
么不能先将信息存下来。当用户须要查看信息的时候再去获得信息呢?伴随着这个疑惑,短息和留言应运而生。不管手机是否开机、是否未及时接到,我们都能得到当中的信息。
JMS提供了相似这种功能。本章我们将系统的学习JMS中的相关重要内容。
Ø 掌握JMS基本概念及适用范围
Ø 点对点模型与公布/订阅模型的差别和使用场合
Ø 熟悉核心和通用的JMS API
Ø 熟悉并理解JMSclient开发的步骤
Ø 消息的同步和异步接收的实现方式
Ø 串包问题的解决的方法
企业消息系统
Java Message Service是由Sun开发的,它为 Java程序提供一种訪问企业消息系统的方法。在讨论JMS之前。我们分来析一下企业消息系统。
企业消息系统。即面向消息的中间件(MOM),提供了以松散耦合的灵活方式集成应用程序的一种机制。它们提供了基于存储和转发的应用程序之间的异步数据发送。即应用程序彼此不直接通信,而是与作为中介的MOM 通信。MOM提供了有保证的消息发送,应用程序开发者无需了解远程过程调用(PRC)和网络/通信协议的细节。
ActiveMQ正是MOM中优秀的一员。
企业消息系统的优点
我们先来看看下图,应用程序A将Message发送到server上,然后应用程序B从server中接收A发来的消息,通过这个图我们一起来分析一下JMS的优点
图 1 JMS通讯示意图
提供消息灵活性
应用程序A与应用程序B通过使用MOM的应用程序编程接口(API)发送消息进行通信。MOM 将消息路由给应用程序B,这样消息就能够存在于MOM中,MOM 负责处理网络通信。假设网络连接不可用,MOM会存储消息,直到连接变得可用时,再将消息转发给应用程序B。
灵活性的还有一方面体如今,当应用程序A发送其消息时,应用程序B甚至能够不处于运行状态。MOM将保留这个消息,直到应用程序B開始运行并试着检索消息为止。
这还防止了应用程序A由于等待应用程序B检索消息而出现堵塞。
这样的异步通信要求应用程序的设计与如今大多数应用程序不同,只是对于时间无关或并行处理,它可能是一个极事实上用的方法。
松散耦合
企业消息系统的真正威力在于应用程序的松散耦合。在上面的图中。由应用程序A发送消息指定一个特定目标,如“订单处理”。而如今,是由应用程序B提供订单处理功能。
可是在将来,我们能够用不同的订单处理程序替换应用程序B,应用程序A将不再是明智之选。替换应用程序将继续发送消息完毕“订单处理”,而消息也仍将得到处理。
相同,我们也能够替换应用程序A,仅仅要替换应用程序继续发送消息进行“订单处理”。订单处理程序就无需知道是否有一个新的应用程序在发送订单。
JMS是什么
JMS是一系列的接口及相关语义的集合,通过这些接口和和当中的方法。JMSclient怎样去訪问消息系统,完毕创建、发送、接收和读取企业消息系统中消息。
在JMS之前,每一家MOM厂商都用专有API为应用程序提供对其产品的訪问,通常可用于很多种语言,当中包含Java语言。
JMS通过MOM为Java程序提供了一个发送和接收消息的标准的、便利的方法。
用JMS编写的程序能够在不论什么实现JMS标准的MOM上执行。
JMS可移植性的关键在于:JMS API是由Sun作为一组接口而提供的。提供了JMS功能的产品是通过提供一个实现这些接口的提供者来做到这一点的。开发者能够通过定义一组消息和一组交换这些消息的应用程序,建立JMS应用程序。实现异步通讯。
JMS的目标
JMS从提出以来,致力于完毕例如以下几个目标:
定义一组消息公用概念和有用工具。
全部Java应用程序都能够使用JMS中定义的API去完毕消息的创建、接收与发送。不论什么实现了JMS标准的MOM都能够作为消息的中介,完毕消息的存储转发。
最大化消息应用程序的可移植性。
MOM提供了有保证的消息发送,应用程序开发者无需了解远程过程调用(PRC)和网络/通信协议的细节,提供了程序的可移植性。
最大化减少应用程序与应用系统之间的耦合度。
因为MOM的存在。各个应用程序仅仅关心和MOM之间怎样进行消息的接收与发送,而无需关注MOM的还有一边,其它程序是怎样接收和发送的。
JMS两种消息模型
JMS提供了两种消息通信模型:
Ø 点到点(P2P)模型
Ø 公布/订阅(Pub/Sub)模型
图 2 JMS通讯模型
从图中能够看出,ClientA和ClientB是消息生产者。通过两种不同的目的地分别向ClientC、ClientD、ClientE和ClientF发送消息。
在ClientA、C、D之间的消息是点对点模型。使用这样的模型,client发送消息到队列目的地(Queue)。从这个队列里面仅仅有一个消息接收者能够收到那个消息。其它訪问同一目的地的接收者不会接收到该消息。
如ClientC接收Queue中的Msg1消息,ClientD接收Queue中的Msg2消息。
在ClientB、E、F之间的消息是公布/订阅模型。使用这样的广播模型,一个client发送消息给主题目的地(Topic),不论什么数量的消费订阅者能够从这个主题目的地来接收它们。如:ClientE和ClientF都接收这个Msg3这条消息。
点到点模型
点对点传递模型:生产者发送消息到一个特定的队列(Queue)中,而消费者从一个消息队列中得到消息。例如以下图所看到的:
图 3 点到点通讯模型示意图
点对点模型的特点:
Ø 每条消息有一个消费者
每条仅仅有一个消费者。假设一条消息被消息者接收,那么其它的消费者就不能得到这条消息了。
Ø 发送和接受消息与时间没有关系
也就是说,生产者在发送消息后,消费者能够在随意的时刻接收,但有两个前提:
1、消息未过期
2、消息没有被其它的用户接收
消费者也能够先执行,当生产者一执行。将消息发送到队列中。消费者就可以从队列中获得消息,这叫“守株待兔“。
Ø 消费者必须确认对消息的接收
收到消息后消费者必须确认消息已被接收,否则JMS服务提供者会觉得该消息没有被接收,那么这条消息仍然能够被其它人接收。
程序能够自己主动进行确认。不须要人工干预。
Ø 非持久的消息最多仅仅发送一次
非持久的消息最多仅仅发送一次。表示消息有可能未被发送,造成未被发送的原因可能有:
1、 JMS服务提供者出现宕机等情况,造成非持久信息的丢失
2、 队列中的消息过期,未被接收
Ø 持久的消息严格发送一次
我们能够将比較重要的消息设置为持久化的消息,持久化后的消息不会由于JMS服务提供者的故障或者其它原因造成消息丢失。
公布/订阅模型
公布/订阅模型:公布/订阅传递消息类型与主题(Topic)有关。生产者公布消息,而消费者订阅感兴趣的消息,生产者将消息和一个特定的主题(Topic)连在一起。消息传递系统(MOM)依据消费者注冊的兴趣。将消息传递给消费者。
这样的类型很相似出版报纸、杂志的形式。例如以下图所看到的:
图 4 公布/订阅通讯模型示意图
公布/订阅模型的特点:
Ø 每一个消息都能够有多个(0,1,……)订阅者
每条消息能够有多个消费者,假设报纸和杂志一样。谁订阅了谁都能够获得。
Ø 订阅者仅仅能消费他们订阅之后出版的消息
这就要求订阅者必须先订阅。生产者然后释放。该用户必须首先执行,执行制片人等待,这点不同类型。
Ø 订阅者必须保持使用这些信息主动能力
该用户必须保持活动等待发行商宣布了这一消息,假设用户只公示公告后进行,你不能让那些先前发布的消息公布。
深入浅出JMS(一)——JMS简要的更多相关文章
- 深入浅出JMS(一)--JMS基本概念
from:http://blog.csdn.net/jiuqiyuliang/article/details/46701559 深入浅出JMS(一)--JMS基本概念 标签: jmsmessagin ...
- 深入浅出 JMS(一) - JMS 基本概念
深入浅出 JMS(一) - JMS 基本概念 一.JMS 是个什么鬼 JMS 是 Java Message Service 的简称,即 Java 消息服务.什么是消息服务呢,我们来看一下 Oracle ...
- 【JMS】JMS之ActiveMQ的使用
这篇文章主要是简单介绍一下JMS和ActiveMQ,以及使用ActiveMQ来写两个demo. 1. JMS是啥 百度百科的解释: JMS即Java消息服务(Java Message Service) ...
- JMS - 基于JMS的RPC
现在试试通过JMS,在应用程序之间发送消息.先看看spring提供的RPC方案(其实还有其他方案,只是没见过谁用).需要使用到这两个类:·org.springframework.jms.remotin ...
- 深入浅出JMS(二)--ActiveMQ简单介绍以及安装
现实的企业中,对于消息通信的应用一直都非常的火热,而且在J2EE的企业应用中扮演着特殊的角色,所以对于它研究是非常有必要的. 上篇博文深入浅出JMS(一)–JMS基本概念,我们介绍了消息通信的规范JM ...
- 深入浅出JMS(四)--Spring和ActiveMQ整合的完整实例
第一篇博文深入浅出JMS(一)–JMS基本概念,我们介绍了JMS的两种消息模型:点对点和发布订阅模型,以及消息被消费的两个方式:同步和异步,JMS编程模型的对象,最后说了JMS的优点. 第二篇博文深入 ...
- 深入浅出JMS(三)--ActiveMQ简单的HelloWorld实例
第一篇博文深入浅出JMS(一)–JMS基本概念,我们介绍了JMS的两种消息模型:点对点和发布订阅模型,以及消息被消费的两个方式:同步和异步,JMS编程模型的对象,最后说了JMS的优点. 第二篇博文深入 ...
- 深入浅出 JMS(二) - ActiveMQ 入门指南
深入浅出 JMS(二) - ActiveMQ 入门指南 上篇博文深入浅出 JMS(一) – JMS 基本概念,我们介绍了消息通信的规范JMS,这篇博文介绍一款开源的 JMS 具体实现-- Active ...
- JMS与MQ详解(有项目)
<一>m2mGW项目 1.ActiveMQ概述 企业消息软件从80年代起就存在,它不只是一种应用间消息传递风格,也是一种集成风格.因此,消息传递可以满足应用间的通知和互相操作.但是 ...
- Spring整合JMS(一)——基于ActiveMQ实现
1.1 JMS简介 JMS的全称是Java Message Service,即Java消息服务.它主要用于在生产者和消费者之间进行消息传递,生产者负责产生消息,而消费者负责接收消息.把它应用到 ...
随机推荐
- UVA796- Critical Links(无向图中的桥梁)
题目链接 题意: 给出一个无向图,按顺序输出桥 思路:求出全部的桥,然后按顺序输出就可以 代码: #include <iostream> #include <cstdio> # ...
- httpd的简单配置(转)
一般网站都采用httpd作web服务器提供web页面,本文主要介绍下几个httpd中常用的配置属性和配置方式,当然具体应用更具具体需求来定. 代理模块配置: 由于网页动态化,网页的生成基本代理到后端服 ...
- bzoj1497(最小割)
传送门:最大获利 题意:建立n个中转站,每个花费P[i],有m个用户,使用Ai和Bi中转站可获利Ci,问最终建立哪几个中转站使获利最大? 分析:根据最大权闭合图建图,用户群和中转站为带权的点集,用户群 ...
- oracle undo 复杂度--oracle核心技术读书笔记四
一. 概述 undo 保存的是旧数据.比方,你改动了一条记录将A列abc改动为def,那么undo里面保存的就是abc.目的有两个:1. 假设你的事务没有提交,可是已经将A列改动,那么别人读取这条数据 ...
- Spring 类构造器初始化实例
构造方法类Bean1 package com.hao947.bean; public class Bean1 { public Bean1() { System.out.println("b ...
- PHP实现快速排序算法
快速排序(Quick Sort)是对冒泡排序的一种改进,属不稳定排序算法,由东尼·霍尔在1962年提出.快速排序基本步骤:从数列中挑出一个元素(一般称为称为“基准”),通过一趟排序将要排序的数据分割成 ...
- WPF界面设计技巧(4)—自定义列表项样式
原文:WPF界面设计技巧(4)-自定义列表项样式 有前面修改按钮样式的基础,我们可以尝试来定制一个即好看又好用的 ListBox ,今天先来讲“好看”部分. 打开 Microsoft Visual S ...
- Oracle本地管理对照数据字典管理表空间
Locally vs. Dictionary Managed Tablespaces 整理自:http://www.orafaq.com/node/3. When Oracleallocates sp ...
- Context Switch and System Call
How many Context Switches is “normal”? This depends very much on the type of application you run. If ...
- 部署 Redis 群集
Windows 部署 Redis 群集 1,下载Redis for windows 的最新版本,解压到 c:\Redis 目录下备用https://github.com/MSOpenTech/re ...