JMS的定义
JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持,可以类比JDBC技术,不同的厂商对JDBC做了不同的实现。

JMS的组成
JMS由JMS provider、JMS producer、JMS consumer、JMS message组成。下面给出这些概念的定义。

JMS provider
实现JMS接口和规范的消息中间件,也就是我们的MQ服务。

JMS producer
消息生产者,创建和发送JMS消息的客户端应用。

JMS consumer
消息消费者,接收和处理JMS消息的客户端应用。

JMS message
JMS message由消息头、消息体、消息属性3部分组成。

消息头
消息头有5个比较常见的属性,分别是JMSDestination、JMSDeliveryMode、JMSExpiration
、JMSPriority、JMSMessageID,下面这个表格展示了它们所代表的意义。

属性 意义
JMSDeliveryMode 持久和非持久模式,一条持久性的消息应该被传送“一次仅仅一次“,这就意味着如果JMS提供者出现故障,该消息并不会丢失,它会在服务器恢复之后再次传递。一条非持久的消息最多会被传送一次,这就意味着服务器如果出现故障,该消息将永远丢失
JMSExpiration 可以设置消息在一定时间以后过期,默认是永不过期。消息过期时间等于Destination的send方法中的timeToLive值加上发送时刻的GMT时间值,如果timeToLive值等于零,则JMSExpiration被设为零,表示该消息永不过期。如果发送后,在消息过期时间之后消息还没有被发送到目的地,则该消息被清除
JMSPriority 消息优先级,从0-9十个级别,0-4是普通消息,5-9是加急消息。JMS不要求MQ严格按照这十个优先级发送消息,但必须保证加急消息要先于普通消息到达。默认是4级
JMSMessageID 唯一识别每个消息的标识由MQ产生
JMSDestination 消息发送的目的地,主要是指Queue和Topic

下面的代码演示了怎么设置这些属性。

public class JmsProduce {public static final String ACTIVEMQ_URL = "tcp://127.0.0.1:61616";public static final String QUEUE_NAME = "queue02";public static void main(String[] args) throws JMSException {//1.创建连接工场,按照给定Url地址,采用默认的用户名和密码ActiveMQConnectionFactory activeMQConnectionFactory = new ActiveMQConnectionFactory();//2通过连接工场,获得连接connection并启动访问Connection connection = activeMQConnectionFactory.createConnection();connection.start();//3.创建回话session,第一个参数是事务,第二个参数是签收Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);//4.创建目的地(是队列还是主题(topic))Queue queue = session.createQueue(QUEUE_NAME);//5.创建消息的生产者MessageProducer messageProducer = session.createProducer(queue);//6.通过使用messageProducer生产3条消息发送到MQ的队列里面for (int i = 1; i <= 3; i++) {//7.创建消息TextMessage textMessage = session.createTextMessage("msg---" + i);//设置消息头的属性textMessage.setJMSDeliveryMode(DeliveryMode.PERSISTENT); //设置消息的持久化textMessage.setJMSExpiration(400L);  //设置消息过期时间textMessage.setJMSPriority(6);  //设置消息优先级textMessage.setJMSDestination(queue);  //设置消息的目的地//8.通过messageProducer发送给mqmessageProducer.send(textMessage);}//关闭资源messageProducer.close();session.close();connection.close();System.out.println("消息发送到MQ");}
}

消息体

消息体封装了具体的消息数据,消息体有五种消息格式,发送和接收的消息体类型必须一致对应。

五种消息体格式

消息体格式 代表的意思
TextMessage 普通字符串消息,包含String
MapMessage 一个Map类型的消息,key为String类型,值为Java基本类型
BytesMessage 二进制数组消息,包含一个byte[]
StreamMessage Java数据流消息,用标准流操作来顺序的填充和读取
ObjectMessage 对象消息,包含一个可序列化的Java对象

消息属性
如果需要去除消息头字段以外的值,那么可以使用消息属性,消息属性是以属性名和属性值对的形式制定的,可以将属性视为消息头的扩展,属性指定一些消息头没有包括的附加信息,比如可以在属性里指定消息选择器。消息的树形就像可以分配给一条消息的附加消息头一样。它们允许开发者添加有关消息的不透明附加消息。

消息发送和接收模型
JMS支持两种消息发送和接收模型,一种是P2P模型,另一种是发布订阅(Publish/Subscribe)模型。

P2P模型

P2P模型采用点对点的方式发送和接收消息,P2P模型是基于队列的,消息生产者发送消息到队列,消息消费者从队列中接收消息,因为队列的存在,消息的异步传输成为可能。P2P模型的特点是每个消息只有一个消费者,当发送者发送消息以后,不管接收者有没有在运行都不影响消息被发布到队列中,接收者在成功接收消息后会向发送者发送接收成功的信息。

发布订阅模型
发布订阅模型定义了如何向一个内容节点发布和订阅消息,这个内容节点称为主题(Topic)。只有先创建订阅者以后,才可以消费消息生产者的信息,并且订阅者需要一直保持运行的状态。发布订阅模型允许一个消息被多个消费者消费,也就是一个消息可以被多个消费者订阅,每个消费者都可以接收到这个信息。

转载:什么是JMS(消息服务)_wsb_2526的博客-CSDN博客_jms消息

什么是JMS(Java Message Service消息服务)相关推荐

  1. JMS : Java Message Service (Java消息服务)之一 [转]

    为什么80%的码农都做不了架构师?>>>    1 引言 1.1 编写目的 本文作为B2bi项目中开源产品JORAM的使用指导文档,旨在帮助项目组人员方便明了的进行JMS模块的详细设 ...

  2. 什么情景下应当考虑使用JMS(Java Message Service )技术

    什么情景下应当考虑使用JMS(Java Message Service )技术         JMS,Java Message Service,是JavaEE平台最重要的规范之一, 也是企业开发中经 ...

  3. jmeter测试java服务_Jmeter 测试 JMS (Java Message Service)/ActiveMQ 性能

    前言 JMS 介绍:JMS 即 Java 消息服务(Java Message Service)应用程序接口,是一个 Java 平台中关于面向消息中间件(MOM)的 API,用于在两个应用程序之间,或分 ...

  4. Java 消息服务(Java Message Service

    Java 消息服务( Java Message Service ,简称 JMS )是企业级消息传递系统,紧密集成于 Jboss Server 平台之中.企业消息传递系统使得应用程序能够通过消息的交换与 ...

  5. Java Message Service(JMS)总结

    一.JMS是个什么鬼 1.百度百科解释:JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之 ...

  6. Java Message Service(ActiveMQ 1)

    JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信 ...

  7. JMS Java消息服务(Java Message Service)

    JMS 在一些场景下RPC的同步方式可能不太适合业务逻辑的处理,并且这种方式在某些场景下会导致业务的紧耦合. 基于异步交互模型的JMS解决了RPC产生的紧耦合问题,它提供了一个可以通过网络访问的抽象消 ...

  8. java jms框架_JMS (Java Message Service)

    19.1. 简介 Spring提供了一个用于简化JMS API使用的抽象框架,并且对用户屏蔽了JMS API中1.0.2和1.1版本的差异. JMS的功能大致上分为两块,叫做消息制造和消息消耗.Jms ...

  9. Spring的消息 Java Message Service (JMS)

    Spring有两种方法提供对EJB的支持: Spring能让你在Spring的配置文件里,把EJB作为Bean来声明.这样,把EJB引用置入到其他Bean的属性里就成为可能了,好像EJB就是另一个PO ...

最新文章

  1. OpenCL编程详细解析与实例
  2. java 集合快速排序_搞定Java快速排序
  3. Tensorflow快餐教程(8) - 深度学习简史
  4. LVM逻辑卷的管理--创建LVM、扩容,快照实战
  5. Python数据分析Numpy库方法简介(三)
  6. MySQL对一行多列求和
  7. mysql update 联合更新_Mysql update多表联合更新的方法小结
  8. android 4.4 linux 内核版本,稳定内核版本和更新  |  Android 开源项目  |  Android Open Source Project...
  9. 佳能打印机ip90 64位系统的驱动_佳能打印机如何安装 佳能打印机漏墨如何解决【详解】...
  10. webstorm目录定位(自动定位)当前编辑的文件 - 设置篇
  11. 【重难点】【JVM 03】CMS、G1、ZGC
  12. 马云:电商之王还想怎样(转)
  13. 安装了一下WinZip,感觉很难用
  14. office visio连接线控制方法
  15. CCF认证 2019-03 01小中大
  16. 使用阿里云下载Docker
  17. Apriori算法Matlab实现
  18. 第三次作业 - 结对项目1
  19. java-net-php-python-java智能会议管理系统计算机毕业设计程序
  20. Java-单机版的书店管理系统(练习设计模块和思想_系列 六 )

热门文章

  1. NSGA-Ⅲ算法的基本原理
  2. 数据结构课程设计——迷宫问题课程设计报告
  3. div:给div加滚动条 div的滚动条设置
  4. unityShader入门了解
  5. 完全二叉树与满二叉树的区别(有图)
  6. 如何进行网站seo优化推广?
  7. 分布式高并发服务三种常用限流方案简介
  8. 大数据和区块链区别和关系
  9. MPP大规模并行处理架构详解(满满干货,需细嚼慢咽)
  10. 最简单理解高内聚低耦合