java jsm_JSM 基础

java jsm_JSM 基础JMS 即 Java 消息服务 JavaMessageS 应用程序接口 是一个 Java 平台中关于面向消息中间件 MOM 的 API 用于在两个应用程序之间 或分布式系统中发送消息 进行异步通信 Java 消息服务是一个与具体平台无关的 API 绝大多数 MOM 提供商都对 JMS 提供支持 JMS 组成和特点 JMS JAVA 消息服务 两个应用程序之间异步通讯的 API JMSprovider 实现 JMS

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/199898.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月20日 上午11:58
下一篇 2026年3月20日 上午11:58


相关推荐

  • Winrar去广告图文教程「建议收藏」

    Winrar去广告图文教程「建议收藏」一、前言1.1Winrar解压缩工具  市场上有很多优秀的压缩工具,常用的有Winrar和360压缩工具。Winrar是免费压缩工具,特色是每次使用都会弹出广告。影响用户体验和工作效率,当然最重要的是影响心情。效果如下图。图1-1、Winrar弹广告效果图二、问题处理说明2.1问题解决方式  此处使用工具Resourcehacker对winrar.e…

    2022年5月2日
    63
  • 中国十大技术社区你都知道哪些?

    中国十大技术社区你都知道哪些?社区是聚集一类具有相同爱好或者相同行业的群体,IT技术社区就是聚集了IT行业内的技术人,在技术社区可以了解到行业的最新进展,学习最前沿的技术,认识有相同爱好的朋友,在一起…

    2022年5月21日
    203
  • 【C语言】switch用法

    【C语言】switch用法一 基本结构 switch 整形表达式 语句项 二 功能举例如图所示为 switch 应用举例 可以从图中看出 s

    2026年3月26日
    1
  • JAVA反射机制

    JAVA反射机制

    2021年12月8日
    38
  • grok怎么取消自动续费

    grok怎么取消自动续费

    2026年3月15日
    2
  • Python字符串使用详解

    Python字符串使用详解除了数字,Python中最常见的数据类型就是字符串,无论那种编程语言,字符串无处不在。例如,从用户哪里读取字符串,并将字符串打印到屏幕显示出来。字符串是一种数据结构,这让我们有机会学习索引和切片——用于从字符串中提取子串的方法。1字符串索引在Python语法支持中,我们简单的阐述过字符串的使用,现在我们看看python程序在处理字符串时,如何对其进行索引,打印出其中的每个字符串。我们输入一个字符串:’你好,Lucky’,Python使用方括号[]来对字符串进行索引,方括号内的数字0~n表

    2025年7月29日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号