JSM 基础
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 接口(消息)
是在消费者和生产者之间传送的对象,一个消息有三个主要部分:
消息头(必须):包含用于识别和为消息寻找路由的操作设置。
一个消息体(可选):允许用户创建五种类型的消息(文本消息,映射消息,字节消息,流消息和对象消息)。
一组消息属性(可选):包含额外的属性,支持其他提供者和用户的兼容。可以创建定制的字段和过滤器(消息选择器)。
JSM 基础的更多相关文章
- 深入掌握JMS--转
深入掌握JMS(一):JSM基础 1. JMS基本概念 JMS(Java Message Service) 即Java消息服务.它提供标准的产生.发送.接收消息的接口简化企业应用的开发.它支持 ...
- Java基础语法
java基础学习总结——基础语法1 一.标识符
- java基础学习总结——基础语法1
一.标识符
- java 基础语法 1
一.标识符 二.关键字 三.JAVA基础数据类型 3.1. java常量 3.2. java变量 从本质上来讲,变量其实是内存里面的一小块区域,一个程序在运行的时候,实际上这个程序是位于内存里面,然后 ...
- java基础学习总结——Object类
一.Object类介绍
- Java Web系列:JDBC 基础
ADO.NET在Java中的对应技术是JDBC,企业库DataAccessApplicationBlock模块在Java中的对应是spring-jdbc模块,EntityFramework在Java中 ...
- java基础—object类
一.Object类介绍
- java基础—基础语法1
一.标识符
- ActiveMQ基础教程(一):认识ActiveMQ
ActiveMQ是Apache软件基金会所研发开源的消息中间件,为应用程序提供高效的.可扩展的.稳定的和安全的企业级消息通信. 现在的消息队列有不少,RabbitMQ.Kafka.RocketMQ,Z ...
随机推荐
- mysql查看数据库大小或者表大小
要想知道每个数据库的大小的话,步骤如下: 1.进入information_schema 数据库(存放了数据库的信息) use information_schema; 2.查询所有数据库的大小: sel ...
- mvn clean package:[ERROR] Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12
原文地址:https://www.cnblogs.com/lxcy/p/8279899.html 事故现场: 解决办法: 一是命令行, mvn clean package -Dmaven.test.s ...
- Spark 调优之数据倾斜
什么是数据倾斜? Spark 的计算抽象如下 数据倾斜指的是:并行处理的数据集中,某一部分(如 Spark 或 Kafka 的一个 Partition)的数据显著多于其它部分,从而使得该部分的处理速度 ...
- PAT_A1004#Counting Leaves
Source: PAT A1004 Counting Leaves (30 分) Description: A family hierarchy is usually presented by a p ...
- solr 查询同一个core 的关联字段
实现一个core里面多个字段的关联查询: 应用场景是: 词, 句子,文章 希望通过查询实现词,句子,文章里面共同有的关键字 private static CloudSolrServer cloudSo ...
- 安装mysql时,服务无法启动的问题
1.下载mysql镜像文件:mysql-installer-community-8.0.17.0.msi 2.点击镜像进行安装,一直next即可 3.cmd以管理员身份,进入到安装的mysql安装目录 ...
- 现代软件工程HW2:结对编程-生成五则运算式-Core10组 [PB16110698+PB16120162]
作业具体要求点 这里 Core组要求: 1.Calc() 这个Calc 函数接受字符串的输入(字符串里就是算术表达式,例如 “5*3.5”,“7/8 - 3/8 ”,“3 + 90 * 0.3”等等) ...
- 【笔记篇】不普及向——莫比乌斯反演学习笔记 && 栗题HAOI2011 Problem B
Part0 广告(当然没有广告费) P.S. 这篇文章是边学着边用Typora写的...学完了题A了blog也就呼之欲出了~有latex化式子也非常方便...非常建议喜欢Markdown的dalao们 ...
- vue 兄弟组件的传值
handleLetterClick方法,采用emit 传递给父组件 父组件触发的方法: handleLetterChange方法: 父组件传递给子组件: CityList组件: 兄弟组件的传值可以 ...
- [JZOJ6344] 【NOIP2019模拟2019.9.7】Huge Counting
题目 题目大意自己看题去-- 正解 比赛时在刚第二题,所以根本没有时间思考-- 模型可以转化为从\((x_1,x_2,..,x_n)\)出发到\((1,1)\)的方案数模\(2\). 方案数就用有重复 ...