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的编程过程很简单,概 ...
随机推荐
- mysql与java数据类型对应关系
- PS 色彩的色相谱
7- 色彩的色相谱 在这个环中,位于180度夹角的两种颜色(也就是圆的某条直径两端的颜色),称为反转色,又称为互补色.互补的两种颜色之间是此消彼长的关系,小框往蓝色移动的同时就会远离黄色, 黄色=白色 ...
- Magento资源问题上CDN方案研究
通过对Magento的了解,发现Magento的资源文件主要分布在media.js.skin三个文件夹里,media文件夹主要包括了系统自带编辑器WYSIWYG Editor 所有编辑器涉及到的资源( ...
- 使用pcs api往免费的百度网盘上传下载文件
百度个人云盘空间大,完全免费,而且提供了pcs api供调用操作文件,在平时的项目里往里面保存一些文件是很实用的. 环境准备: 开通读写网盘的权限及获取access_token:http://blog ...
- 本原串(HDU 2197 快速幂)
本原串 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- Retrofit2.0+OkHttp打印Request URL(请求地址参数)
学习了Retrofit中的拦截器功能:实现日志中打印请求头内容 Retrofit 2+ 是基于OKHttp进行封装的,那么也就是说想进行请求拦截然后进行打印出来的话,就必须要从OkHttp进行入手. ...
- 注解 @Resource与@Autowired与@Component的使用
在java代码中使用@Autowired或@Resource注解方式进行装配,这两个注解的区别是:@Autowired 默认按类型装配,@Resource默认按名称装配,当找不到与名称匹配的bean才 ...
- js限制input只能输入有效的数字,有且只有一个小数点,第一个不能为小数点-备
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- MySql 学习笔记 (派生表)
派生表也是一种子查询那么它出现在 select * from ( select * from b <--这个就是派生表啦 )派生表其实不是个好东西,在生产的时候他是可以通过索引来过滤的,但是一但 ...
- java集合经常出现空指针问题的解决方案
我自己问自己这个问题的时候都把自己给雷住了,但是现实如此,经常写的程序就是出现空指针的错误. 如: public List add(){ List list=null; try { list=new ...