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

JMS组成和特点

JMS:JAVA消息服务,两个应用程序之间异步通讯的API。

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

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

JMS consumer:消息消费者,客户端应用

JMS message:

消息头(MessageProducer.send(传入参数设置)):

JMSDestination:消息发送的目的地(接口),Queue,Topic(实现)

JMSDeliveryMode:持久(一次仅仅一次,服务器故障消息不会丢失)与非持久模式(最多一次)

NON_PERSISTENT和PERSISTENT

//在消息生产者上设置JMS传送模式

TopicPublisher topicPublisher = session.createPublisher(topic);

topicPubiisher.setDeliveryMode(DeliveryMode.NON_PERSISTENT);

JMSExpiration:设置消息的过期时间(默认0:永不过期),过期后被清除

topicPublisher.setTimeToLive(1000); //1s

JMSPriority:优先级(0-9,默认4级)

topicPublisher.setPriority(9);

JMSMessageID:唯一识别的每个消息的标识(由MQ产生)

消息体(Session.createTextMessage(参数)):

封装具体的消息数据,发送与接受消息的数据类型必须一致

五种格式:

TextMessage:普通字符串 String

MapMessage:key(String) value(java基本类型)

BytesMessage:二进制数组消息 byte[]

StreamMessage:java数据流消息

ObjectMessage:对象消息,包含可序列化的java对象

消息属性(发送方:TextMessage.set... / 接收方:TextMessage.get...):

message.setStringProperty("username",username); //自定义属性

识别/去重/重点标注

JMS的可靠性

PERSISTENT:持久性

持久:服务器宕机,数据存在(默认)

非持久:服务器宕机,数据不存在

事务(connection.createSession(false, Session.AUTO_ACKNOWLEDGE);):

如果是true,开启事务,生产者需要先执行send,再执行commit,消息才会正真提交到队列中

消费者开启事务,如果事务回滚或者未提交,会再次接收到消息

Acknowledge:签收

默认自动签收Session.AUTO_ACKNOWLEDGE

手动签收需要反馈:Message.acknowledge();

有事务的签收:自动手动一样,但是必须comment

对象模型

1)连接工厂。连接工厂(ConnectionFactory)创建一个JMS连接。

2)JMS连接。JMS连接(Connection)表示JMS客户端和服务器端之间的一个活动的连接

3)JMS会话。JMS会话(Session)表示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)关联。

应用程序

ConnectionFactory 接口(连接工厂)

用户用来创建到JMS提供者的连接的被管对象。

Connection 接口(连接)

连接代表了应用程序和消息服务器之间的通信链路。连接允许用户创建会话,以发送和接收队列和主题到目标。

Destination 接口(目标)

目标是一个包装了消息目标标识符的被管对象,消息目标是指消息发布和接收的地点,或者是队列,或者是主题。

Session 接口(会话)

表示一个单线程的上下文,用于发送和接收消息。

如果用户选择了事务支持,会话上下文将保存一组消息,直到事务被提交才发送这些消息。

MessageProducer 接口(消息生产者)

由会话创建的对象,用于发送消息到目标。

用户可以创建某个目标的发送者,也可以创建一个通用的发送者,在发送消息时指定目标。

MessageConsumer 接口(消息消费者)

由会话创建的对象,用于接收发送到目标的消息。

消费者可以同步地(阻塞模式),或(非阻塞)接收队列和主题类型的消息。

Message 接口(消息)

是在消费者和生产者之间传送的对象,一个消息有三个主要部分:

消息头(必须):包含用于识别和为消息寻找路由的操作设置。

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

一组消息属性(可选):包含额外的属性,支持其他提供者和用户的兼容。可以创建定制的字段和过滤器(消息选择器)。

java jsm_JSM 基础相关推荐

  1. java入门 慕路径,Java入门基础知识总结学习教程大全【必看经典】

    类型的表达式,是循环条件,表达式3是党执行了一遍循环之后,修改控制循环的变量值. ??? for语句的执行过程是这样的:首先计算表达式1,完成必要的初始化工作:然后判断表达式2的值,如果表达式的值为t ...

  2. java mybatis基础

    java mybatis基础 1.1 什么是mybatis? mybatis是一个优秀的持久层框架. 避免几乎所有的JDBC代码和手动设置参数以及获取结果集的过程. 可以使用简单的xml或者注解来配置 ...

  3. java负数右移_收入囊中篇---Java程序基础(二)

    前言: 本篇是接着上一篇更新的,如果没有阅读上一篇的话,可以查阅或回顾一下. 1.收入囊中篇---Java基础必备知识(一) 2.收入囊中篇---Java程序基础(二) Java程序基础目录 1.Ja ...

  4. java基础入门传智播客 源码_Java-_2020年版Java零基础视频教程(Java 0基础,Java初学入门)魔鬼讲师老杜出品...

    不会闲聊!!!不会扯淡!!!小UP只会分享与Java相关的学习资源 还记得那年带你Java入门的一声"吼"吗? B站目前播放量已经快到450多万播放量的Java零基础教程的创作者& ...

  5. 【JAVA零基础入门系列】Day2 Java集成开发环境IDEA

    [JAVA零基础入门系列](已完结)导航目录 Day1 开发环境搭建 Day2 Java集成开发环境IDEA Day3 Java基本数据类型 Day4 变量与常量 Day5 Java中的运算符 Day ...

  6. Java零基础学习难吗

    java编程是入行互联网的小伙伴们大多数的选择,那么对于零基础的小伙伴来说Java零基础学习难吗?如果你是初学者,你可以很好的理解java编程语言.并不困难.如果你的学习能力比较高,那么你对Java的 ...

  7. java培训基础知识都学哪些

    很多人都开始学习java技术,觉得java语言在未来的发展前景空间非常大,事实却是如此,那么针对于零基础的同学, 学习java技术需要学哪些呢?下面我们就来看看java培训基础知识都学哪些? java ...

  8. cmd 将文件夹下文件剪切到另外一个文件_总结java中文件拷贝剪切的5种方式-JAVA IO基础总结第五篇...

    本文是Java IO总结系列篇的第5篇,前篇的访问地址如下: 总结java中创建并写文件的5种方式-JAVA IO基础总结第一篇 总结java从文件中读取数据的6种方法-JAVA IO基础总结第二篇 ...

  9. 第三章 Java Servlet基础

    第三章 Java Servlet基础 3.6.2 转发 1.获得RequestDispatcher对象 2.RequestDispatcher对象调用forward()方法实现转发 请求转发工作原理 ...

最新文章

  1. 实验四 使用C++的mfc实现圆心为任意位置的圆的绘制。
  2. 人力成本降低95%!这家上海AI独角兽,发布自动化机器学习平台,瞄准新基建...
  3. python狗狗年龄换算_Python之美——一只数据狗的笔记[长期更新]
  4. corspost请求失败_vue项目CORS跨域请求500错误,post请求变options请求
  5. Boost:circular_buffer作为边界缓冲区的基础容器
  6. python pytest allure_python测试框架pytest和测试报告allure的联合使用-----测试套件
  7. java settime_Java日历setTime()方法及示例
  8. javascript学习笔记_function
  9. 移动端微信公众号开发中问题记录及解决方案
  10. 【华为敏捷/DevOps实践】7. 敏捷,DevOps,傻傻不分清楚
  11. 如何通过三视图判断立方体个数_装机小白看过来:如何通过显卡参数来判断高端低端?...
  12. Windows学习总结(18)——Windows运行命令与Win键+快捷键再总结
  13. java单词转化为数组_java中数组与List相互转换的方法
  14. 虚拟机桥接模式-CentOS下配置静态IP
  15. 断舍离------活成自己喜欢的样子
  16. activity关闭和dialog.dismiss冲突的解决(Activity has leaked window com.android.internal.p
  17. 蒲公英企服平台对话核盛网络刘涛——Tracup项目管理的一条生命线
  18. 位运算符最详细的解释(java)
  19. 浮点数到整数的快速转换
  20. c语言患者住院管理系统,住院系统-中小医院医疗套装软件管理系统_九明珠信息科技...

热门文章

  1. 等级VIN行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  2. mysql语言基础实验报告_sql语言实验报告
  3. mysql认证包_mysql协议分析2---认证包
  4. 第4章 旋转蛇(《C和C++游戏趣味编程》配套教学视频)
  5. 【IT】关于Code打卡机时遇到的问题及解决
  6. linux ssh ip地址命令,关于Linux:在ssh会话中查找客户机的IP地址
  7. What?一周内咸鱼疯转2.4W次,最终被所有大厂封杀!
  8. 搜狗发布全球首位 3D AI 主播,背后分身技术有玄机
  9. 全球呼吸机告急!医疗科技巨头美敦力“开源”设计图和源代码
  10. 疫情期间我们与你同在:关爱障碍群体刚需,坚持做无障碍的倡议书