java jsm_JSM 基础

article/2025/10/8 23:27:23

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 接口(消息)

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

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

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

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

5d7035a5174f049e3338eeffa45d1691.png


http://chatgpt.dhexx.cn/article/KYmKRb9f.shtml

相关文章

JSM

消息中间件 消息中间件利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型,它可以在分布式环境下扩展进程间的通信。对于消息中间件,常见的角色大致也就有Producer&am…

【HLL】使用 HyperLogLog 去重案例

1.概述 HyperLogLog一个常用的场景就是统计网站的UV。 ##基数 简单来说,基数(cardinality,也译作势),是指一个集合(这里的集合允许存在重复元素)中不同元素的个数。例如看下面的集合: {1,2,3,4,5,2,3,9,7} 这个集合有9个元素,但是2和3各出现了两次,因此不重复的元素…

5redis-----------redis高级--GEO-查询附近的人、基数统计算法HLL 、布隆过滤器、缓存雪崩穿透击穿-------全栈式开发44

redis高级 一、GEO查询附近的人二、基数统计算法-HyperLogLog三、布隆过滤器四、缓存雪崩&缓存穿透(一)缓存雪崩(二)缓存穿透(三)缓存击穿 一、GEO查询附近的人 引入 我们所处的任何位置都可以用经纬…

【Hll】Hll HyperLogLog: Cardinality Estimation(基数估计算法源码解析)

1.概述 好文章,转载防丢失 主要是这里有源码,我遇到问题了,问题是flink在累加器中使用的时候,每次累加最终结果是1,2 每次到了2 就会重新回到1,很郁闷于是看看源码 2.背景 我们经常会统计某个字段的dis…

PostgreSQL HLL插件介绍—晟数学院

更多精彩内容:请登录:ke.sandata.com.cn 前言 HLL是 HyperLogLog数据结构的简称。PostgresSQL通过插件的方式引入了这种新的数据类型hll。HyperLogLog是一个具有固定大小,类似于集合结构,用于可调精度的不同值计数。例如,在1280字节的hll数据结构中,它可以在很小的误差…

Redis介绍、优点,缺点、数据类型:字符串、集合、列表、散列、有序集合、HLL、GEO操作

Redis Redis(REmote DIctionary Server)是一个非常流行的基于内存的轻量级键值数据库(key-value database)。与其把Redis称为一种数据库,不如说Redis是一种数据结构服务器更为恰当。Redis原生地在内存中实现了多种类型…

java postgresql插件_PostgreSQL HLL插件介绍

前言 HLL是 HyperLogLog数据结构的简称。PostgresSQL通过插件的方式引入了这种新的数据类型hll。HyperLogLog是一个具有固定大小,类似于集合结构,用于可调精度的不同值计数。例如,在1280字节的hll数据结构中,它可以在很小的误差范…

DataSketches HLL Sketch module

上图是官网的介绍,翻译后的意思是此模块提供Apache Druid聚合器为不同的计数基于HLL sketch来自datasketches数据库。摄入的时候这个聚合器创建HLL sketch对象存储在Druid的segments中。在查询的时候sketches被读取并且被合并到一起。最后默认情况下,你可…

UV 统计- HLL算法(JAVA实现)

HLL是什么 HyperLogLog(HLL)算法经常在数据库中被用来统计某一字段的Distinct Value,比如Redis的HyperLogLog结构。目前在我们项目中用于UV统计。 网上有一篇大佬博文十分深入: https://www.jianshu.com/p/55defda6dcd2 注意&…

HTTP的Referrer Policy

客户端通过设置Referrer Policy来控制是否在请求头中告知服务端请求来源。来源信息写在生成的请求头的referer中。 注意 Referer 实际上是单词 “referrer” 的错误拼写。Referrer-Policy 这个首部并没有延续这个错误拼写。 Referrer Policy的取值: no-referrer 整…

接口基础-HTTP请求中的referrer和Referrer-Policy

本文将介绍一个涉及安全和隐私的http请求头中的字段—referrer,以及如何通过Referrer Policy去修改referrer的值或者是显示与否。 什么是referrer 当一个用户点击当前页面中的一个链接,然后跳转到目标页面时,目标页面会收到一个信息&#x…

Referrer还是Referer? 一个迷人的错误

诗人郑愁予曾经在一首诗中写道:我达达的马蹄是个美丽的错误,我不是归人,是个过客。而对我来说,十九岁之前的我,一样是个沉浸在诗歌中的文艺少年。十九岁之后的我,作为一名程序员,更多的是邂逅各…

HTTP系列之Referer和Referrer policy简介

文章目录 1、前言摘要2、Referer简介3、Referer安全性4、相关术语5、Referrer Policy5.1、no-referrer5.2、no-referrer-when-downgrade5.3、same-origin5.4、origin5.5、strict-origin5.6、origin-when-cross-origin5.7、strict-origin-when-cross-origin5.8、unsafe-url5.9、…

浅析HTTP请求中的referrer和Referrer-Policy

本文将介绍一个涉及安全和隐私的http请求头中的字段—referrer,以及如何通过Referrer Policy去修改referrer的值或者是显示与否。 什么是referrer 当一个用户点击当前页面中的一个链接,然后跳转到目标页面时,目标页面会收到一个信息&#xff…

document.referrer之隐藏来源

document.referrer document.referrer是用来获取跳转链接的来源,正规的解释是:referrer 属性可返回载入当前文档的文档的 URL。 实际中使用在广告相关业务中较多,包括推广等。 举个例子: 比如我们从百度中跳转到w3c,那我们从w3…

java referrer_JavaScript中document.referrer的用法详解

前言 在JavaScript中,document对象有很多属性,其中有3个与对网页的请求有关的属性,它们分别是URL、domain和referrer。 URL属性包含页面完整的URL,domain属性中只包含页面的域名,而referrer属性中则保存着链接到当前页…

meta标签的 referrer

首先&#xff0c;我先不解释&#xff0c;先看下我下面的请求数据图。 1.默认 (<meta name"referrer" content"origin"/>不写 也不 指定时) 2.origin时 3.no-referrer时 实验了这三个&#xff0c;就知道referrer的默认值和请求头的参数键值数据&…

设置referrer

1.全界面设置 所有界面挑战时携带地址origin&#xff0c;所有请求不携带地址never&#xff08;修改后记得从新启动&#xff09; <meta name"referrer" content"origin"> 2.单页面设置 vue的话可以设置一个vue-meta的插件&#xff08;暂不介绍&…

php referrer policy,Referrer Policy介绍

referer的写法是错的&#xff0c;正确的是referrer。大概是早期http规范的拼写错误&#xff0c;然后为了保持向下兼容&#xff0c;就将错就错了。 一、九种policy enum ReferrerPolicy { "", "no-referrer", "no-referrer-when-downgrade", &quo…

Referer和Referrer Policy详解

最近换了个负责网络安全的leader&#xff0c;整个部门开始网络安全整顿&#xff0c;我们负责WEB的接到通知要求防御CSRF攻击&#xff0c;设置referer白名单。之前看过一点referer相关的&#xff0c;但是了解不够深入&#xff0c;趁这次机会好好了解了一下。 1. 什么是 Referer…