Java消息服务
什么是消息?
消息是可编程实现两端通信的机制。通常的一些消息技术如:TCP/IP Sockets、管道、文件、共享存储。
Java消息服务
Java消息服务,即Java Message Service(JMS),是一组Java应用程序接口(Java API),它提供创建、发送、接收、读取消息的服务,使得Java程序能够和其他消息组件进行通信。
消息传送机制的优点
1. 异构集成
在完全不同的平台上实现应用程序和系统请求调用服务。消息传送机制提供跨应用程序和子系统共享数据和功能的去耦方案。
2. 缓解系统瓶颈
与一个同步组件处理众多请求时,众多请求一个接一个的积聚阻塞不同,这时候消息会发送到一个消息传送系统,该系统将该请求分发给多个消息侦听器组件(增加漏斗)。如此一来,就缓解了单独采用点对点同步连接带来的系统瓶颈。
3. 提高可伸缩性
通过引入能够并发处理不同消息的多个消息接收者(消息侦听器),消息传送系统的可伸缩性得以实现。
4. 提高最终用户生产率
通过使用异步消息传送机制,用户可以在向系统发出请求后,继续做其他事情。
5. 体系结构灵活性和敏捷性
消息传送机制,能快速地响应软硬件和业务的变化。使用消息传送机制方式,消息生产者或是客户端组件都不会知道接收组件使用的是哪种编程语言或平台,组件或服务位于何处,组件或服务实现的名称是什么,甚至用于访问该组件或服务的是哪种协议。
企业消息传送
消息是通过网络从一个系统异步传送给其他系统的。在异步消息传送机制中,应用程序使用一个简单的API来构建一条消息,然后再将该消息转发给面向消息的中间件,以便传送给一个或多个的预定接收者。
一条消息就是一个业务数据包,它通过网络从一个应用程序发送给其他应用程序。消息应该是自描述的,因为它包含所有必要的上下文,以便允许接收者独立地完成它们的工作。
消息传送系统由消息传送客户端和几种消息传送中间件服务器所组成。客户端向消息传送服务器发送消息,该服务器随后再将那些消息分发给其他客户端。客户端是使用消息传送API的一个业务应用程序或组件(JMS)。
1. 集中式体系结构
依赖于一台消息服务器(也称消息路由器或代理),它负责从一个消息传送客户端(JMS)向其他消息传送客户端(JMS)传送信息,实现一个发送客户端和其他接收客户端之间的解耦。客户端仅仅看到消息传送服务器,而不会看到其他客户端,这将允许在不会影响系统整体的情况下添加和删除客户端。通常,集中式体系结构使用的是星型的拓扑结构。
2. 分布式体系结构
使用网络层IP组播,没有集中服务器,一些服务器功能(持久性、事务和安全性)作为一个客户端的本地部分嵌入进来,而此时消息路由则利用IP组播协议委托给网络层。
消息传送模型
JMS支持两类消息传送模型(消息传送域):点对点模型(P2P)和发布/订阅(Pub/Sub)模型。点对点模型设计用于一对一消息传送,发布/订阅模型设计用于一对多消息广播。
1. 点对点模型
JMS客户端通过队列(queue)这个虚拟通道来同步和异步发送、接收消息,基于拉取(Pull)或者基于轮询(Polling)的消息传送模型,这种模型从队列中请求消息,而不是自动地将消息推送给客户端。耦合性比Pub/Sub模型更强。
2. 发布/订阅模型
消息会被发布到一个名为主题(topic)的虚拟通道中,基于推送(Push)的模型,消息自动地向消费者广播,它们无须请求或轮询主题来获得新消息,每个订阅者都会接受到发布者所发送的消息的一个副本。去耦能力比P2P模型更强。
传送消息方式
JMS现在有两种传递消息的方式。标记为NON_PERSISTENT的消息最多投递一次,而标记为PERSISTENT的消息将使用暂存后再转送的机理投递。
如果一个JMS服务离线,那么持久性消息不会丢失但是得等到这个服务恢复联机时才会被传递。所以默认的消息传递方式是非持久性的。即使使用非持久性消息可能降低内务和需要的存储器,并且这种传递方式只有当你不需要接收所有的消息时才使用。
JMS API
JMS本身并不是一种消息传送系统,它是消息传送客户端和消息传送系统通信时所需接口和类的一个抽象。JMS抽象可以访问消息提供者。使用JMS,应用程序的消息传送客户端可以实现跨消息服务器产品的移植。
JMS API分为3个主要部分:公共API、点对点API和发布/订阅API。公共API被用于向一个队列或一个主题发送和接收消息,点对点API专门用于队列,发布/订阅API则专门用于主题。
在JMS公共API内部,和发送与接收JMS消息有关的JMS API接口主要有7个:ConnectionFactory、Destination、Connection、Session、Message、MessageProducer、MessageConsumer。
在这些公共接口中,ConnectionFactory、Destination必须使用JNDI从提供者处获得。其他接口则可以通过工厂方法在不同的API接口中创建。
1. 点对点API
向一个队列发送和接收消息的接口:QueueConnectionFactory、Queue、QueueConnection、QueueSession、Message、QueueSender、QueueReceiver。
2. 发布/订阅API
内部接口:TopicConnectionFactory、Topic、TopicConnection、TopicSession、Message、TopicPublisher、TopicSubscriber。
JMS客户机
JMS客户机是指生产或消费消息的Java程序,Destination(目的)是JMS服务器上消息等待处理的地方。
参考文章:
1. Java消息服务学习笔记(1)
2. Java消息服务
Java消息服务的更多相关文章
- JMS(Java消息服务)入门教程
什么是Java消息服务 Java消息服务指的是两个应用程序之间进行异步通信的API,它为标准消息协议和消息服务提供了一组通用接口,包括创建.发送.读取消息等,用于支持JAVA应用程序开发.在J2EE中 ...
- Java消息服务初步学习(基于Spring In Action的整理)
几个名词 Java消息服务(Java Message Service)是一个Java标准,定义了使用消息代理的通用API. 消息代理(message broker):类似于邮局的作用,确保消息被投递到 ...
- 01_Weblogic课程之概念篇:代理服务器,web服务器,应用程序服务器,JNDI概念,JTA概念,Java消息服务,Java验证和授权(JAAS),Java管理扩展,Web客户机,客户机应用程序
1 什么是服务器 Weblogic中服务器分为两种,一种是受管服务器,另外一种是管理服务器. Weblogic课程(Weblogic是Oracle公司的,最开始的是BEA公司的) 一 系统管理 ...
- JMS(Java消息服务)与消息队列ActiveMQ基本使用(一)
最近的项目中用到了mq,之前自己一直在码农一样的照葫芦画瓢.最近几天研究了下,把自己所有看下来的文档和了解总结一下. 一. 认识JMS 1.概述 对于JMS,百度百科,是这样介绍的:JMS即Java消 ...
- java消息服务学习之JMS概念
JMS即Java消息服务(Java Message Service)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信. ...
- 【转载】JAVA消息服务JMS规范及原理详解
转载:https://www.cnblogs.com/molao-doing/articles/6557305.html 作者: moyun- 一.简介 JMS即Java消息服务(Java Messa ...
- JAVA消息服务JMS规范及原理详解
JAVA消息服务JMS规范及原理详解 一.简介 JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应 ...
- JMS(Java消息服务)
JMS即Java消息服务(Java Message Service)应用程序接口是一个Java平台中关于面向消息中间件(MOM:指的是利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来 ...
- ActiveMQ学习总结(5)——Java消息服务JMS详解
JMS: Java消息服务(Java Message Service) JMS是用于访问企业消息系统的开发商中立的API.企业消息系统可以协助应用软件通过网络进行消息交互. JMS的编程过程很简单,概 ...
随机推荐
- The use of function Merge (update、insert、delete)
1.The use of function merge(update.insert.delete) Example: #1.Initialize the data create table #test ...
- Html5 学习之 Html5功能判断插件 Modernizr
---恢复内容开始--- Modernizr 浏览器对HTML5和CSS3开发的功能检测类库 由于当前用户使用的浏览器版本较多,对H5和CSS3的支持也各不相同.前端的开发者,在使用一些新的特性的时候 ...
- php json_decode 后,数字对象转换成了 科学计数法 的解决方案
php json_decode 后,数字对象转换成了 科学计数法 $obj='{"order_id":213477815351175,"buyer":10000 ...
- 搭建rac对单实例的MAA
一:实验环境 系统:redhat 4 三台计算机rac1,rac2,dg. --其中rac为主库,单实例为备库 已在虚拟机里搭建好集群环境(rac1,rac2); dg计算机里还没有建任何数据库(只安 ...
- PYTHON线程知识再研习A
前段时间看完LINUX的线程,同步,信息号之类的知识之后,再在理解PYTHON线程感觉又不一样了. 作一些测试吧. thread:模块提供了基本的线程和锁的支持 threading:提供了更高级别,功 ...
- 那年曾让我哭笑不得抓狂的C语言
1.关于+=以及-= 这是两个运算符,但你否有过这种经历: int temp; char i ;i<MAX;i++) { ... temp=+; //这里本意是每次循环,temp都自增2,但是却 ...
- Codeforces Round #322 (Div. 2) —— F. Zublicanes and Mumocrates
It's election time in Berland. The favorites are of course parties of zublicanes and mumocrates. The ...
- 从有限状态机的角度去理解Knuth-Morris-Pratt Algorithm(又叫KMP算法)
转载请加上:http://www.cnblogs.com/courtier/p/4273193.html 在开始讲这个文章前的唠叨话: 1:首先,在阅读此篇文章之前,你至少要了解过,什么是有限状态机, ...
- [置顶] 使用struts拦截器+注解实现网络安全要求中的日志审计功能
J2EE项目中出于安全的角度考虑,用户行为审计日志功能必不可少,通过本demo可以实现如下功能: 1.项目中记录审计日志的方法. 2.struts拦截器的基本配置和使用方法. 3.struts拦截器中 ...
- 【转】FLV视频封装格式详解
Overview Flash Video(简称FLV),是一种流行的网络格式.目前国内外大部分视频分享网站都是采用的这种格式. File Structure 从整个文件上开看,FLV是由The FLV ...