1.JMS介绍:

JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API

JMS是一种与厂商无关的 API,用来访问消息收发系统消息,实现都是有各个厂商提供,例如下面apache提供的免费开源的ActiveMQ.

2.JMS消息体系结构

JMS提供者:连接面向消息中间件的,JMS接口的一个实现。提供者可以是Java平台的JMS实现,也可以是非Java平台的面向消息中间件的适配器。(比如apache 的 ActiveMQ)

JMS客户:生产或消费基于消息的Java的应用程序或对象。

JMS生产者:创建并发送消息的JMS客户。

JMS消费者:接收消息的JMS客户。

JMS消息:包括可以在JMS客户之间传递的数据的对象

JMS队列:一个容纳那些被发送的等待阅读的消息的区域。与队列名字所暗示的意思不同,消息的接受顺序并不一定要与消息的发送顺序相同。一旦一个消息被阅读,该消息将被从队列中移走。

JMS主题:一种支持发送消息给多个订阅者的机制。

3.JMS消息对象模型

1)连接工厂。连接工厂(ConnectionFactory)是由管理员创建,并绑定到JNDI树中。客户端使用JNDI查找连接工厂,然后利用连接工厂创建一个JMS连接。

2)JMS连接。JMS连接(Connection)表示JMS客户端和服务器端之间的一个活动的连接,是由客户端通过调用连接工厂的方法建立的。

3)JMS会话。JMS会话(Session)表示JMS客户与JMS服务器之间的会话状态。JMS会话建立在JMS连接上,表示客户与服务器之间的一个会话线程。

4)JMS目的。JMS目的(Destination),又称为消息队列,是实际的消息源。

5)JMS生产者和消费者。生产者(Message Producer)和消费者(Message Consumer)对象由Session对象创建,用于发送和接收消息。

6)JMS消息通常有两种类型:

① 点对点(Point-to-Point)。在点对点的消息系统中,消息分发给一个单独的使用者。点对点消息往往与队列(javax.jms.Queue)相关联。

② 发布/订阅(Publish/Subscribe)。发布/订阅消息系统支持一个事件驱动模型,消息生产者和消费者都参与消息的传递。生产者发布事件,而使用者订阅感兴趣的事件,并使用事件。该类型消息一般与特定的主题(javax.jms.Topic)关联。

4.模型 (Java消息服务应用程序结构支持两种模型:)

1>点对点或队列模型

一个生产者向一个特定的队列发布消息,一个消费者从该队列中读取消息。这里,生产者知道消费者的队列,并直接将消息发送到消费者的队列。这种模式被概括为:

只有一个消费者将获得消息

生产者不需要在接收者消费该消息期间处于运行状态,接收者也同样不需要在消息发送时处于运行状态。

每一个成功处理的消息都由接收者签收.

2>发布者/订阅者模型

支持向一个特定的消息主题发布消息。0或多个订阅者可能对接收来自特定消息主题的消息感兴趣。在这种模型下,发布者和订阅者彼此不知道对方。这种模式好比是匿名公告板。这种模式被概括为:

多个消费者可以获得消息

在发布者和订阅者之间存在时间依赖性。发布者需要建立一个订阅(subscription),以便客户能够订阅。订阅者必须保持持续的活动状态以接收消息,除非订阅者建立了持久的订阅。在那种情况下,在订阅者未连接时发布的消息将在订阅者重新连接时重新发布。

5.消息类型

· StreamMessage -- Java原始值的数据流

· MapMessage--一套名称-值对

· TextMessage--一个字符串对象

· ObjectMessage--一个序列化的 Java对象

· BytesMessage--一个未解释字节的数据流

6.应用程序

ConnectionFactory 接口(连接工厂)

用户用来创建到JMS提供者的连接的被管对象。JMS客户通过可移植的接口访问连接,这样当下层的实现改变时,代码不需要进行修改。管理员在JNDI名字空间中配置连接工厂,这样,JMS客户才能够查找到它们。根据消息类型的不同,用户将使用队列连接工厂,或者主题连接工厂。

Connection 接口(连接)

连接代表了应用程序和消息服务器之间的通信链路。在获得了连接工厂后,就可以创建一个与JMS提供者的连接。根据不同的连接类型,连接允许用户创建会话,以发送和接收队列和主题到目标。

Destination 接口(目标)

目标是一个包装了消息目标标识符的被管对象,消息目标是指消息发布和接收的地点,或者是队列,或者是主题。JMS管理员创建这些对象,然后用户通过JNDI发现它们。和连接工厂一样,管理员可以创建两种类型的目标,点对点模型的队列,以及发布者/订阅者模型的主题。

Session 接口(会话)

表示一个单线程的上下文,用于发送和接收消息。由于会话是单线程的,所以消息是连续的,就是说消息是按照发送的顺序一个一个接收的。会话的好处是它支持事务。如果用户选择了事务支持,会话上下文将保存一组消息,直到事务被提交才发送这些消息。在提交事务之前,用户可以使用回滚操作取消这些消息。一个会话允许用户创建消息,生产者来发送消息,消费者来接收消息。

MessageConsumer 接口(消息消费者)

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

MessageProducer 接口(消息生产者)

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

Message 接口(消息)是在消费者和生产者之间传送的对象,也就是说从一个应用程序传送到另一个应用程序。一个消息有三个主要部分:消息头(必须):包含用于识别和为消息寻找路由的操作设置。一组消息属性(可选):包含额外的属性,支持其他提供者和用户的兼容。可以创建定制的字段和过滤器(消息选择器)。

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

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

7.提供者

要使用Java消息服务,你必须要有一个JMS提供者,管理会话和队列。既有开源的提供者也有专有的提供者。

开源的提供者包括:

Apache ActiveMQ

JBoss 社区所研发的 HornetQ

IBM的WebSphere MQ

...

jms是java平台中面向_Jms学习篇一:JMS介绍相关推荐

  1. Java 平台中的增补字符

    作者:Sun Microsystems, Inc. 的 Norbert Lindenberg 和 Masayoshi Okutsu 2004 年 5 月 English: Supplementary ...

  2. 推荐系统深度学习篇-NFM 模型介绍(1)

    一.推荐系统深度学习篇-NFM 模型介绍(1) NFM是2017年由新加披国立大学提出的一种模型,其主要优化点在于提出了Bi-Interaction,Bi-Interaction考虑到了二阶特征组合, ...

  3. 工作中需要用到的Java知识(线程安全集合学习篇)

    在上篇中我们深入学习了JUC中的lock锁与synchronized关键字的区别,以及一些关键问题,特点的探讨,这一篇我们继续进行JUC的学习. 线程安全是什么意思呢? 线程安全是指在多线程运行的情况 ...

  4. c 解析java byte,深入解析Java编程中面向字节流的一些应用

    文件输入输出流 文件输入输出流 FileInputStream 和 FileOutputStream 负责完成对本地磁盘文件的顺序输入输出操作. [例]通过程序创建一个文件,从键盘输入字符,当遇到字符 ...

  5. 如何在java面试中给出一个出彩的自我介绍

    自我介绍是java面试中一个必不可少的环节,一个出彩的自我介绍,可以给面试官留下好的印象,帮助你拿下心仪的offer,但是很多初级程序员都不知道如何去做自我介绍, 甚至有些工作了很多年的程序员面试时的 ...

  6. JAVA导出Excel通用工具类——第一篇:详细介绍POI 导出excel的多种复杂情况,包括动态设置筛选、动态合并横向(纵向)单元格等多种复杂情况——保姆级别,真的不能再详细了,代码拿来即用)

    JAVA导出Excel通用工具--第一篇:详细介绍POI 导出excel的多种复杂情况,包括动态设置筛选.动态合并横向(纵向)单元格等多种复杂情况--保姆级别,真的不能再详细了,封装通用工具类,代码拿 ...

  7. java面向字符的输入流_详细解读Java编程中面向字符的输入流

    字符流是针对字符数据的特点进行过优化的,因而提供一些面向字符的有用特性,字符流的源或目标通常是文本文件. Reader和Writer是java.io包中所有字符流的父类.由于它们都是抽象类,所以应使用 ...

  8. java开源 mooc,GitHub - bo5509/TinyMooc: 轻量级Java平台在线幕课学习网站

    萌课(tinymooc)是什么? tinymooc 中文名萌课,是一个轻量级Web网站.它拥有简洁的代码,优雅的设计. 萌课网目前打算实现微课程的点播和直播服务,依托于腾讯云强大的云计算服务给用户带去 ...

  9. Ardunino——面向对象语言学习篇5——.h文件和.cpp文件(制作Arduino类库)

    学习自:太极创客. 实践是检验真理的唯一标准,通过arduino进行实践学习C++或许是一个不错的选择. 前篇回顾   前篇学习了构造函数与析构函数,总体来说就是对象创建和消失时候要执行得函数. 前提 ...

最新文章

  1. docker tomcat mysql_Docker下Tomcat容器中使用Mysql的方法
  2. AngularJs学习笔记--unit-testing
  3. DDNS 的工作原理及其在 Linux 上的实现--转
  4. 阿里的财报,释放了什么信号?
  5. java图像识别算法_图像算法原理与实践——绪论
  6. 数据加密类型及创建和申请CA证书
  7. KlayGE游戏引擎
  8. redis10--主从模式
  9. linux 基础学习入门 5 inode 总结 tr tee 等小命令
  10. 第五节 系统调用的三个层次(下) ——20135203齐岳
  11. 用sitemesh来装饰动态的左侧菜单和内容部分
  12. 贾俊平统计学blog整理
  13. 老版本MACBOOK更换固态硬盘教程
  14. 两个摄像头合成一路_监控系统中多路视频的合成方法
  15. GitHub上万星:超精细的漫画上色AI,老婆画风任你选择,登上了趋势榜
  16. 对话系统的历史 聊天机器人发展
  17. 软件测试基础理论学习和小案例(一)
  18. TCP数据粘包的处理
  19. 绘制流程图用什么软件好?你选对了吗?
  20. XSS闯关——第五关:level5

热门文章

  1. 在安装了Sql2000的基础上安装Sql2005的详细过程
  2. python网络编程能用来做什么_python网络编程是什么意思
  3. Android TV-电视开发常用知识点讲解
  4. 微信缓存导致调整内容不生效
  5. python进阶(十)_mysql数据查询
  6. BUUCTF WEB PYTHONGINX1
  7. JavaScript数组方法三板斧,100%的开发都得知道
  8. 简介企业如何通过企业erp系统实现智能化管理?
  9. 微信公众平台开发(122) 获取微信会员卡用户姓名和手机号
  10. 【Java核心】详解Java中断机制