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

JMS组成和特点

  1. JMSJAVA消息服务,两个应用程序之间异步通讯的API
  2. JMS provider:实现JMS接口和规范的消息中间件,也就是MQ服务器
  3. JMS producer:消息生产者,创建和发送JMS消息的客户端应用
  4. JMS consumer:消息消费者,客户端应用
  5. JMS message
  6. 消息头(MessageProducer.send(传入参数设置)):
  7. JMSDestination:消息发送的目的地(接口),Queue,Topic(实现)
  8. JMSDeliveryMode:持久(一次仅仅一次,服务器故障消息不会丢失)与非持久模式(最多一次)
  9. NON_PERSISTENTPERSISTENT
  10. //在消息生产者上设置JMS传送模式
  11. TopicPublisher topicPublisher = session.createPublisher(topic);
  12. topicPubiisher.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
  13. JMSExpiration:设置消息的过期时间(默认0:永不过期),过期后被清除
  14. topicPublisher.setTimeToLive(1000); //1s
  15. JMSPriority:优先级(0-9,默认4级)
  16. topicPublisher.setPriority(9);
  17. JMSMessageID:唯一识别的每个消息的标识(由MQ产生)
  18. 消息体(Session.createTextMessage(参数)):
  19. 封装具体的消息数据,发送与接受消息的数据类型必须一致
  20. 五种格式:
  21. TextMessage:普通字符串 String
  22. MapMessagekey(String) value(java基本类型)
  23. BytesMessage:二进制数组消息 byte[]
  24. StreamMessagejava数据流消息
  25. ObjectMessage:对象消息,包含可序列化的java对象
  26. 消息属性(发送方:TextMessage.set... / 接收方:TextMessage.get...):
  27. message.setStringProperty("username",username); //自定义属性
  28. 识别/去重/重点标注

JMS的可靠性

  1. PERSISTENT:持久性
  2. 持久:服务器宕机,数据存在(默认)
  3. 非持久:服务器宕机,数据不存在
  4. 事务(connection.createSession(false, Session.AUTO_ACKNOWLEDGE);):
  5. 如果是true,开启事务,生产者需要先执行send,再执行commit,消息才会正真提交到队列中
  6. 消费者开启事务,如果事务回滚或者未提交,会再次接收到消息
  7. Acknowledge:签收
  8. 默认自动签收Session.AUTO_ACKNOWLEDGE
  9. 手动签收需要反馈:Message.acknowledge();
  10. 有事务的签收:自动手动一样,但是必须comment

对象模型

  1. 1)连接工厂。连接工厂(ConnectionFactory)创建一个JMS连接。
  2. 2JMS连接。JMS连接(Connection)表示JMS客户端和服务器端之间的一个活动的连接
  3. 3JMS会话。JMS会话(Session)表示JMS客户与JMS服务器之间的会话状态。
  4. 4JMS目的。JMS目的(Destination),又称为消息队列,是实际的消息源。
  5. 5JMS生产者和消费者。生产者(Message Producer)和消费者(Message Consumer)对象由Session对象创建,用于发送和接收消息。
  6. 6JMS消息通常有两种类型:
  7. 点对点(Point-to-Point)。消息分发给一个单独的使用者。点对点消息往往与队列(javax.jms.Queue)相关联。
  8. 发布/订阅(Publish/Subscribe)。生产者发布事件,而使用者订阅感兴趣的事件,并使用事件。该类型消息一般与特定的主题(javax.jms.Topic)关联。

应用程序

  1. ConnectionFactory 接口(连接工厂)
  2. 用户用来创建到JMS提供者的连接的被管对象。
  3. Connection 接口(连接)
  4. 连接代表了应用程序和消息服务器之间的通信链路。连接允许用户创建会话,以发送和接收队列和主题到目标。
  5. Destination 接口(目标)
  6. 目标是一个包装了消息目标标识符的被管对象,消息目标是指消息发布和接收的地点,或者是队列,或者是主题。
  7. Session 接口(会话)
  8. 表示一个单线程的上下文,用于发送和接收消息。
  9. 如果用户选择了事务支持,会话上下文将保存一组消息,直到事务被提交才发送这些消息。
  10. MessageProducer 接口(消息生产者)
  11. 由会话创建的对象,用于发送消息到目标。
  12. 用户可以创建某个目标的发送者,也可以创建一个通用的发送者,在发送消息时指定目标。
  13. MessageConsumer 接口(消息消费者)
  14. 由会话创建的对象,用于接收发送到目标的消息。
  15. 消费者可以同步地(阻塞模式),或(非阻塞)接收队列和主题类型的消息。
  16. Message 接口(消息)
  17. 是在消费者和生产者之间传送的对象,一个消息有三个主要部分:
  18. 消息头(必须):包含用于识别和为消息寻找路由的操作设置。
  19. 一个消息体(可选):允许用户创建五种类型的消息(文本消息,映射消息,字节消息,流消息和对象消息)。
  20. 一组消息属性(可选):包含额外的属性,支持其他提供者和用户的兼容。可以创建定制的字段和过滤器(消息选择器)。

JSM 基础的更多相关文章

  1. 深入掌握JMS--转

    深入掌握JMS(一):JSM基础 1. JMS基本概念     JMS(Java Message Service) 即Java消息服务.它提供标准的产生.发送.接收消息的接口简化企业应用的开发.它支持 ...

  2. Java基础语法

    java基础学习总结——基础语法1 一.标识符

  3. java基础学习总结——基础语法1

    一.标识符

  4. java 基础语法 1

    一.标识符 二.关键字 三.JAVA基础数据类型 3.1. java常量 3.2. java变量 从本质上来讲,变量其实是内存里面的一小块区域,一个程序在运行的时候,实际上这个程序是位于内存里面,然后 ...

  5. java基础学习总结——Object类

    一.Object类介绍

  6. Java Web系列:JDBC 基础

    ADO.NET在Java中的对应技术是JDBC,企业库DataAccessApplicationBlock模块在Java中的对应是spring-jdbc模块,EntityFramework在Java中 ...

  7. java基础—object类

    一.Object类介绍

  8. java基础—基础语法1

    一.标识符

  9. ActiveMQ基础教程(一):认识ActiveMQ

    ActiveMQ是Apache软件基金会所研发开源的消息中间件,为应用程序提供高效的.可扩展的.稳定的和安全的企业级消息通信. 现在的消息队列有不少,RabbitMQ.Kafka.RocketMQ,Z ...

随机推荐

  1. [转] undefined reference to `clock_gettime'

    下面这个错误通常是因为链接选项里漏了-lrt,但有时发现即使加了-lrt仍出现这个问题,使用nm命令一直,会发现-lrt最终指向的文件 没有包含任何symbol,这个时候,可以找相应的静态库版本lib ...

  2. vue axios简单配置

    参考:https://www.cnblogs.com/sophie_wang/p/7844119.html 1. 安装 npm install axios 2. main.js import axio ...

  3. PostgreSQL 主键自动增长

    建立主键并设置自动增加的办法好好几种,这里记录我测试过的: drop table pro_process; CREATE TABLE "public"."pro_proc ...

  4. jquery中on绑定click事件在苹果手机中不起作用

    写一个div当做了一个按钮来使用. <div class="button"> <div class="sure"> 确定 </di ...

  5. HTML语法检测

    网络上收集到的资源: HTML在线编辑//////////////////////////////////////////http://tool.oschina.net/codeformat/ 文本框 ...

  6. VS环境下,DEV插件的ComboBoxEdit控件最简单的数据源绑定和获取方法

    使用 ComboBoxEdit 控件绑定key/value值: 因为 ComboBoxEdit 没有 DataSource 属性,所以不能直接绑定数据源,只能一项一项的添加. 首先创建一个类ListI ...

  7. 【学术篇】SDOI2008 仪仗队

    Part1:传送门&吐槽 水题... 然而由于线筛里面的\(j\)打成了\(i\)然后就不能1A了OvO Part2:题目分析 这个正方形是对称的... 而且很显然对角线上只有一个点会被看到. ...

  8. JedisCluster获取key所在的节点

    JedisCluster获取key所在的节点 2019年11月9日17:34:55 准备 引入jedis的jar包,这个jar包里面包含了JedisCluster,可以用它来操作集群. <dep ...

  9. Android开发 解决Installation failed due to XXX 问题

    报错信息 Android studio 安装app的时候以下报错 Installation did not succeed. The application could not be installe ...

  10. Jupyter NoteBook输出的图表太小看不清怎么办?

    如果使用的是matplotlib绘图,可以通过以下命令更改图片的大小: %matplotlib linline 如果是 plt.figure(figsize=(5,3)) #其中(5, 3)用于控制图 ...