转载:http://blog.csdn.net/jiuqiyuliang/article/details/46701559

摘要:The Java Message Service (JMS) API is a messaging standard that allows application components based on the java Platform Enterprise Edition (Java EE) to create, send, receive, and read messages. It enables distributed communication that is loosely coupled, reliable, and asynchronous.

JMS(Java Message Service,java消息服务)API是一个消息服务的标准或者说是规范,允许应用程序组件基于JavaEE平台创建、发送、接收和读取消息。它使分布式通信耦合度更低,消息服务更加可靠以及异步性。MOM:Message Orient middleware。JMS并不是MOM,他和MOM的区别就像JDBC和数据库的区别,JMS为JMS客户端和MOM的交互提供了抽象的API。

这篇博文我们主要介绍J2EE中的一个重要规范JMS,因为这个规范在企业中的应用十分的广泛,也比较重要,我们主要介绍JMS的基本概念和它的模式,消息的消费以及JMS编程步骤。

  1. 基本概念

    JMS是java的消息服务,JMS的客户端之间可以通过JMS服务进行异步的消息传输。

  2. 消息模型

    ○ Point-to-Point(P2P)
    ○ Publish/Subscribe(Pub/Sub)
    

    即点对点和发布订阅模型

  3. P2P

    1. P2P模式图
    2. 涉及到的概念
      1. 消息队列(Queue)
      2. 发送者(Sender)
      3. 接收者(Receiver)
      4. 每个消息都被发送到一个特定的队列,接收者从队列中获取消息。队列保留着消息,直到他们被消费或超时。
    3. P2P的特点

      1. 每个消息只有一个消费者(Consumer)(即一旦被消费,消息就不再在消息队列中)
      2. 发送者和接收者之间在时间上没有依赖性,也就是说当发送者发送了消息之后,不管接收者有没有正在运行,它不会影响到消息被发送到队列
      3. 接收者在成功接收消息之后需向队列应答成功

      如果你希望发送的每个消息都应该被成功处理的话,那么你需要P2P模式。

  4. Pub/Sub

    1. Pub/Sub模式图
    2. 涉及到的概念
      1. 主题(Topic)
      2. 发布者(Publisher)
      3. 订阅者(Subscriber)
        客户端将消息发送到主题。多个发布者将消息发送到Topic,系统将这些消息传递给多个订阅者。
    3. Pub/Sub的特点

      1. 每个消息可以有多个消费者
      2. 发布者和订阅者之间有时间上的依赖性。针对某个主题(Topic)的订阅者,它必须创建一个订阅者之后,才能消费发布者的消息,而且为了消费消息,订阅者必须保持运行的状态。
      3. 为了缓和这样严格的时间相关性,JMS允许订阅者创建一个可持久化的订阅。这样,即使订阅者没有被激活(运行),它也能接收到发布者的消息。

      如果你希望发送的消息可以不被做任何处理、或者被一个消息者处理、或者可以被多个消费者处理的话,那么可以采用Pub/Sub模型

  5. 消息的消费
    在JMS中,消息的产生和消息是异步的。对于消费来说,JMS的消息者可以通过两种方式来消费消息。
    ○ 同步
    订阅者或接收者调用receive方法来接收消息,receive方法在能够接收到消息之前(或超时之前)将一直阻塞
    ○ 异步
    订阅者或接收者可以注册为一个消息监听器。当消息到达之后,系统自动调用监听器的onMessage方法。

  6. JMS编程模型

    (1) ConnectionFactory

    创建Connection对象的工厂,针对两种不同的jms消息模型,分别有QueueConnectionFactory和TopicConnectionFactory两种。可以通过JNDI来查找ConnectionFactory对象。

    (2) Destination

    Destination的意思是消息生产者的消息发送目标或者说消息消费者的消息来源。对于消息生产者来说,它的Destination是某个队列(Queue)或某个主题(Topic);对于消息消费者来说,它的Destination也是某个队列或主题(即消息来源)。

    所以,Destination实际上就是两种类型的对象:Queue、Topic可以通过JNDI来查找Destination。

    (3) Connection

    Connection表示在客户端和JMS系统之间建立的链接(对TCP/IP socket的包装)。Connection可以产生一个或多个Session。跟ConnectionFactory一样,Connection也有两种类型:QueueConnection和TopicConnection。

    (4) Session

    Session是我们操作消息的接口。可以通过session创建生产者、消费者、消息等。Session提供了事务的功能。当我们需要使用session发送/接收多个消息时,可以将这些发送/接收动作放到一个事务中。同样,也分QueueSession和TopicSession。

    (5) 消息的生产者

    消息生产者由Session创建,并用于将消息发送到Destination。同样,消息生产者分两种类型:QueueSender和TopicPublisher。可以调用消息生产者的方法(send或publish方法)发送消息。

    (6) 消息消费者

    消息消费者由Session创建,用于接收被发送到Destination的消息。两种类型:QueueReceiver和TopicSubscriber。可分别通过session的createReceiver(Queue)或createSubscriber(Topic)来创建。当然,也可以session的creatDurableSubscriber方法来创建持久化的订阅者。

    (7) MessageListener

    消息监听器。如果注册了消息监听器,一旦消息到达,将自动调用监听器的onMessage方法。EJB中的MDB(Message-Driven Bean)就是一种MessageListener。

  7. 企业消息系统的好处

我们先来看看下图,应用程序A将Message发送到服务器上,然后应用程序B从服务器中接收A发来的消息,通过这个图我们一起来分析一下JMS的好处:

  1. 提供消息灵活性
  2. 松散耦合
  3. 异步性

jms学习-基本概念(一)相关推荐

  1. JMS学习(1):MS基本概念

    转载地址 : http://m.blog.csdn.net/article/details?id=46701559 摘要:The Java Message Service (JMS) API is a ...

  2. JMS学习六(ActiveMQ消息传送模型)

    JMS学习六(ActiveMQ消息传送模型) ActiveMQ 支持两种截然不同的消息传送模型:PTP(即点对点模型)和Pub/Sub(即发布 /订阅模型),分别称作:PTP Domain 和Pub/ ...

  3. 基于keras的深度学习基本概念讲解

    基于keras的深度学习基本概念讲解 Tensorflow1.0正式发布,谷歌首届Tensorflow开发者大会在山景召开,深度学习迎来新的高潮和狂欢.随着深度学习框架的普及和推广,会有越来越多人加入 ...

  4. NIO学习–核心概念与基本读写

    转载自 NIO学习–核心概念与基本读写 这两天花了时间学习了java的nio,看的书是Ron Hitchens著的 <Java NIO>,总的来说,这本书真的写的非常好,而且整本书将jav ...

  5. JMS学习八(ActiveMQ消息持久化)

    JMS学习八(ActiveMQ消息持久化) ActiveMQ的消息持久化机制有JDBC,AMQ,KahaDB和LevelDB,还有一种内存存储的方式,由于内存不属于持久化范畴,而且如果使用内存队列,可 ...

  6. JMS学习十 ActiveMQ支持的传输协议

    JMS学习(ActiveMQ支持的传输协议) ActiveMQ提供了一种连接机制,这种连接机制使用传输连接器(TransportConnector)实现客户端与代理(client - to - bro ...

  7. 强化学习的概念及学习过程

    强化学习的概念 强化学习主要由智能体(agent)和环境(environment)两部分组成.智能体代表具有行为能力的物体,环境指智能体执行动作时所处的场景.其目标是寻找一个最优策略,使智能体在运动过 ...

  8. 如何更好地学习新概念英语

    如何更好地学习新概念英语 作者:未知 文章来源:沪江英语   在全世界的英语学习者的心目中,<新概念英语>可谓是一部"宝典"级的教材,如今在中国,学习<新概念英语 ...

  9. 【机器学习】强化学习的概念及马尔科夫决策

    系列文章目录 第十八章 Python 机器学习入门之强化学习 目录 系列文章目录 前言 一.什么是强化学习? 二.强化学习算法的示例:火星探测器 三.强化学习的回报及折扣因子 四. 强化学习中的策略 ...

最新文章

  1. 【经典书单】NLP秘笈汇总,从入门到进阶
  2. redis中的order set 有序集合
  3. 【清华集训2016】数据交互
  4. JQuery对checkbox的操作
  5. 数据结构讲义代码堆和栈、多线程、多进程、网络编程
  6. (12)vue.js 修饰符
  7. 关于使用stanfordcorenlp一直运行不报错的解决方法
  8. MySQL--当事务遇到DDL命令
  9. 会话推荐和 序列推荐
  10. java实现关注微信公众号推送模板消息
  11. 错误1311。没有找到源文件:D:\MSOCache\All Users\{90150000-0015-0804-1000-0000000FF1CE}-D\AccLR.CAB。请确认存在该文件,并且您
  12. GBase 8c 的安全特性
  13. Unity引擎光照烘焙
  14. VC中字符串形式ip地址和整数形式ip地址转换
  15. python库01—scipy.linalg(线性代数)
  16. 【205期推荐】HIS实施感悟-提升自己综合能力是正道
  17. 记录 Org 和 Markdown 的一些异同
  18. 抽奖活动|戳进来领取“五一”幸运福袋!
  19. Filecoin主网离正式上线还有多远?go-filecoin、lotus已正式互通
  20. 软件测试生命周期和流程

热门文章

  1. 《openssl 编程》之 RSA(转)
  2. PostgreSQL COPY 导入/导出数据
  3. 给Source Insight做个外挂系列之一--发现Source Insight
  4. MyBatis(四)MyBatis插件原理
  5. [八]RabbitMQ-客户端源码之ChannelN
  6. 广播IP转型报告:远程制作持续崛起
  7. 【线上分享】RTC业务中的视频编解码引擎构建
  8. 当AI成为基础资源,360OS 发力在线教育的重心——专访360OS张焰
  9. 【大会】网络性能、安全与成本之困
  10. Puffer:专注拥塞控制、带宽预测和ABR