JMS OutLine

1.JMS
   JAVA 消息服务(JMS)定义了Java 中访问消息中间件的接口。JMS 只是接口,并没有给予实现,实现JMS 接口的消息中间件称为JMS Provider,iLink实现了JMS接口,用户可以通过使用JMS接口,在iLink中进行JMS编程。 iLink支持JMS1.0.2版本。

 

 

2.JMS接口描述

 

  

 JMS 支持两种消息类型PTP 和Pub/Sub,分别称作:PTP Domain 和Pub/Sub Domain,这两种接口都继承统一的JMS父接口,JMS 主要接口如下所示:

 

 

MS父接口

PTP

Pub/Sub

ConnectionFactory

QueueConnectionFactory

TopicConnectionFactory

Connection

QueueConnection

TopicConnection

Destination

Queue

Topic

Session

QueueSession

TopicSession

MessageProducer

QueueSender

TopicPublisher

MessageConsumer

QueueReceiver,QueueBrowse r

TopicSubscriber

 

 

 

 

 

 

 

 

 

 

 

 

 















             

   ConnectionFactory :连接工厂,JMS 用它创建连接
   Connection :JMS 客户端到JMS Provider 的连接
   Destination :消息的目的地
   Session: 一个发送或接收消息的线程
   MessageProducer: 由Session 对象创建的用来发送消息的对象
   MessageConsumer: 由Session 对象创建的用来接收消息的对象

 

 

 

3.JMS消息模型
JMS 消息由以下几部分组成:消息头,属性,消息体。

 

 

 

3.1 消息头(Header) - 消息头包含消息的识别信息和路由信息,消息头包含一些标准的属性如:JMSDestination,JMSMessageID 等。

 

 

 

 

 

JMSDestination

消息发送的目的地

JMSDeliveryMode

传递模式, 有两种模式: PERSISTENT 和NON_PERSISTENT,PERSISTENT 表示该消息一定要被送到目的地,否则会导致应用错误。NON_PERSISTENT 表示偶然丢失该消息是被允许的,这两种模式使开发者可以在消息传递的可靠性和吞吐量之间找到平衡点。

JMSMessageID

唯一识别每个消息的标识,由JMS Provider 产生。

JMSTimestamp

一个消息被提交给JMS Provider 到消息被发出的时间。

JMSCorrelationID

用来连接到另外一个消息,典型的应用是在回复消息中连接到原消息。

JMSReplyTo

提供本消息回复消息的目的地址

JMSRedelivered

如果一个客户端收到一个设置了JMSRedelivered 属性的消息,则表示可能该客户端曾经在早些时候收到过该消息,但并没有签收(acknowledged)。

JMSType

消息类型的识别符。

JMSExpiration

消息过期时间,等于QueueSender 的send 方法中的timeToLive 值或TopicPublisher 的publish 方法中的timeToLive 值加上发送时刻的GMT 时间值。如果timeToLive值等于零,则JMSExpiration 被设为零,表示该消息永不过期。如果发送后,在消息过期时间之后消息还没有被发送到目的地,则该消息被清除。

JMSPriority

消息优先级,从0-9 十个级别,0-4 是普通消息,5-9 是加急消息。JMS 不要求JMS Provider 严格按照这十个优先级发送消息,但必须保证加急消息要先于普通消息到达。

 

 

 

 

3.3 消息体(Body) - JMS API 定义了5种消息体格式,也叫消息类型,你可以使用不同形式发送接收 数据并可以兼容现有的消息格式,下面描述这5种类型:

 

 

消息类型

消息体

TextMessage

java.lang.String对象,如xml文件内容

MapMessage

名/值对的集合,名是String对象,值类型可以是Java任何基本类型

BytesMessage

字节流

StreamMessage

Java中的输入输出流

ObjectMessage

Java中的可序列化对象

Message

没有消息体,只有消息头和属性

 

 

下例演示创建并发送一个TextMessage到一个队列:
TextMessage message = queueSession.createTextMessage();
message.setText(msg_text); // msg_text is a String
queueSender.send(message);

下例演示接收消息并转换为合适的消息类型:
Message m = queueReceiver.receive();
if (m instanceof TextMessage) {
 TextMessage message = (TextMessage) m;
 System.out.println("Reading message: " + message.getText());
} else {
 // Handle error
}

 

 

4. 消息的同步异步接收
   消息的同步接收是指客户端主动去接收消息,JMS 客户端可以采用MessageConsumer 的receive方法去接收下一个消息。
   消息的异步接收是指当消息到达时,主动通知客户端。JMS 客户端可以通过注册一个实 现MessageListener 接口的对象到MessageConsumer,这样,每当消息到达时,JMS Provider 会调用MessageListener中的onMessage 方法。

5. PTP模型
PTP(Point-to-Point)模型是基于队列的,发送方发消息到队列,接收方从队列接收消息,队列的存在使得消息的异步传输成为可能。和邮件系统中的邮箱一样,队列可以包含各种消息,JMS Provider 提 供工具管理队列的创建、删除。JMS PTP 模型定义了客户端如何向队列发送消息,从队列接收消息,浏览队列中的消息。
   下面描述JMS PTP 模型中的主要概念和对象:

 

 

 

名称

描述

Queue

由JMS Provider 管理,队列由队列名识别,客户端可以通过JNDI 接口用队列名得到一个队列对象。

TemporaryQueue

由QueueConnection 创建,而且只能由创建它的QueueConnection 使用。

QueueConnectionFactory

客户端用QueueConnectionFactory 创建QueueConnection 对象。

QueueConnection

一个到JMS PTP provider 的连接,客户端可以用QueueConnection 创建QueueSession 来发送和接收消息。

QueueSession

提供一些方法创建QueueReceiver 、QueueSender、QueueBrowser 和TemporaryQueue。如果在QueueSession 关闭时,有一些消息已经被收到,但还没有被签收(acknowledged),那么,当接收者下次连接到相同的队列时,这些消息还会被再次接收。

QueueReceiver

客户端用QueueReceiver 接收队列中的消息,如果用户在QueueReceiver 中设定了消息选择条件,那么不符合条件的消息会留在队列中,不会被接收到。

QueueSender

客户端用QueueSender 发送消息到队列。

QueueBrowser

客户端可以QueueBrowser 浏览队列中的消息,但不会收走消息。

QueueRequestor

JMS 提供QueueRequestor 类简化消息的收发过程。QueueRequestor 的构造函数有两个参数:QueueSession 和queue,QueueRequestor 通过创建一个临时队列来完成最终的收发消息请求。

可靠性(Reliability)

队列可以长久地保存消息直到接收者收到消息。接收者不需要因为担心消息会丢失而时刻和队列保持激活的连接状态,充分体现了异步传输模式的优势。

 

 

6. PUB/SUB模型
JMS Pub/Sub 模型定义了如何向一个内容节点发布和订阅消息,这些节点被称作主题(topic)。
   主题可以被认为是消息的传输中介,发布者(publisher)发布消息到主题,订阅者(subscribe)从主题订阅消息。主题使得消息订阅者和消息发布者保持互相独立,不需要接触即可保证消息的传送。
   下面描述JMS Pub/Sub 模型中的主要概念和对象:

 

 

 

名称

描述

订阅(subscription)

消息订阅分为非持久订阅(non-durable subscription)和持久订阅(durable subscrip-tion),非持久订阅只有当客户端处于激活状态,也就是和JMS Provider 保持连接状态才能收到发送到某个主题的消息,而当客户端处于离线状态,这个时间段发到主题的消息将会丢失,永远不会收到。持久订阅时,客户端向JMS 注册一个识别自己身份的ID,当这个客户端处于离线时,JMS Provider 会为这个ID 保存所有发送到主题的消息,当客户再次连接到JMS Provider时,会根据自己的ID 得到所有当自己处于离线时发送到主题的消息。

Topic

主题由JMS Provider 管理,主题由主题名识别,客户端可以通过JNDI 接口用主题名得到一个主题对象。JMS 没有给出主题的组织和层次结构的定义,由JMS Provider 自己定义。

TemporaryTopic

临时主题由TopicConnection 创建,而且只能由创建它的TopicConnection 使用。临时主题不能提供持久订阅功能。

TopicConnectionFactory

客户端用TopicConnectionFactory 创建TopicConnection 对象。

TopicConnection

TopicConnection 是一个到JMS Pub/Sub provider 的连接,客户端可以用TopicConnection创建TopicSession 来发布和订阅消息。

TopicSession

TopicSession 提供一些方法创建TopicPublisher、TopicSubscriber、TemporaryTopic 。它还提供unsubscribe 方法取消消息的持久订阅。

TopicPublisher

客户端用TopicPublisher 发布消息到主题。

TopicSubscriber

客户端用TopicSubscriber 接收发布到主题上的消息。可以在TopicSubscriber 中设置消息过滤功能,这样,不符合要求的消息不会被接收。

Durable TopicSubscriber

如果一个客户端需要持久订阅消息,可以使用Durable TopicSubscriber,TopSession 提供一个方法createDurableSubscriber创建Durable TopicSubscriber 对象。

恢复和重新派送(Recovery and Redelivery)

非持久订阅状态下,不能恢复或重新派送一个未签收的消息。只有持久订阅才能恢复或重新派送一个未签收的消息。

TopicRequestor

JMS 提供TopicRequestor 类简化消息的收发过程。TopicRequestor 的构造函数有两个参数:TopicSession 和topic。TopicRequestor 通过创建一个临时主题来完成最终的发布和接收消息请求。

可靠性(Reliability)

当所有的消息必须被接收,则用持久订阅模式。当丢失消息能够被容忍,则用非持久订阅模式。

 

 

 

7. 开发JMS的步骤
广义上说,一个JMS 应用是几个JMS 客户端交换消息,开发JMS 客户端应用由以下几步构成: 

JNDI 得到ConnectionFactory 对象;
JNDI 得到目标队列或主题对象,即Destination 对象;
ConnectionFactory 创建Connection 对象;
Connection 对象创建一个或多个JMS Session
Session Destination 创建MessageProducer MessageConsumer
通知Connection 开始传递消息。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

消息头

 由谁设置

JMSDestination

send 或 publish 方法

JMSDeliveryMode

send 或 publish 方法

JMSExpiration

send 或 publish 方法

JMSPriority

send 或 publish 方法

JMSMessageID

send 或 publish 方法

JMSTimestamp

send 或 publish 方法

JMSCorrelationID

客户

JMSReplyTo

客户

JMSType

客户

JMSRedelivered

JMS Provider

 

 

 

<think>好的,我现在需要处理用户关于Outline文档协作工具的查询。首先,用户希望获取Outline的介绍,根据提供的引用内容,我需要整合这些信息,同时遵循系统级指令,比如使用正确的LaTeX格式和生成相关问题。 首先,我需要确认所有引用的内容。引用1提到Outline是协作知识库工具,功能强大、操作简便,适合团队知识管理和协作。引用2详细说明了Outline是开源的,使用Node.js编写,数据库用Postgres,支持Redis和S3存储,编辑器类似Notion和Confluence,支持导出Markdown,API集成等。引用3强调Outline适用于不同规模的团队,提升效率。引用4则提到了配置步骤,比如克隆仓库和设置环境文件。 接下来,我需要按照用户的要求结构清晰地回答,介绍Outline的特点、技术架构、使用场景等。同时注意行内公式用$...$,独立公式用$$...$$,但当前内容可能不涉及数学公式,但需要检查是否有需要的地方。例如,如果提到版本号或技术术语,可能需要用代码块或强调,但根据引用内容,似乎不需要数学公式,所以可能可以忽略这部分,但需确保LaTeX正确。 然后,生成相关问题。根据示例中的快速排序问题,我需要提出与Outline相关的三个问题,可能涉及优势、技术架构、适用场景等。 还要注意引用标识,每个引用在回答中的末尾自然添加,比如在提到开源时引用2,提到协作时引用1和3,配置步骤引用4。 现在开始组织内容: 1. 概述:Outline是协作知识库工具,帮助团队知识管理,引用1和3。 2. 核心特点:开源、数据自主、类似Notion的编辑器、悬浮卡片、协作和分享、导出导入,引用2。 3. 技术架构:Node.js、Postgres、Redis、S3,引用2和4。 4. 使用场景:初创公司、大型企业、学术团体,引用3。 5. 部署步骤:克隆仓库、配置环境,引用4。 检查是否所有引用都被正确引用,确保没有遗漏。然后生成相关问题,比如优势、技术基础、适用性等。 最后,确保使用中文,结构清晰,段落分明,没有使用任何Markdown格式,除了代码块(如果有的话)。但根据用户问题,可能不需要代码块,但引用4提到了配置命令,可能需要用代码块展示,但根据示例中的用户层要求,可能不需要。需要看用户层的指示,用户层要求结构清晰,回答真实可靠,所以可能将配置步骤以文字描述,而不是代码块,但引用4中的命令需要正确呈现,所以应该使用代码块,并符合LaTeX要求。不过原引用4中的命令是代码,需要用反引号包裹,但系统级指令要求独立公式用$$...$$,但代码块应使用三个反引号。然而,在用户可见层中,示例中的快速排序代码使用了三个反引号的代码块,所以这里同样需要处理。 因此,在回答中,当提到配置步骤时,应该用代码块展示git命令,如: ```bash git clone git@github.com/outline/outline.git cd outline cp .env.sample .env ``` 这会符合用户示例中的格式。同时,引用标识需要放在对应的位置,比如在提到部署步骤时添加[^4]。 现在整合所有内容,确保每个引用正确标注,结构清晰,语言通顺,符合用户要求。</think>### Outline 文档协作工具介绍 Outline 是一款专为团队设计的**协作知识库工具**,旨在提升知识管理与协作效率。其核心功能包括开源部署、直观的编辑器设计、灵活的协作模式以及便捷的数据管理,以下是详细介绍: --- #### 一、核心特点 1. **开源与私有化部署** Outline 基于 Node.js 开发,支持使用 Postgres 数据库、Redis 缓存及 S3 兼容存储[^2]。用户可自由修改代码并私有化部署,确保数据完全自主掌控。 2. **简化版 Notion 编辑器** 编辑器采用类似 Confluence 的标记语法和快捷键,支持快速插入富文本、表格、代码块等内容,学习成本低[^2]。例如: ```bash # 输入 "/code" 可直接插入代码块 ``` 3. **上下文悬浮卡片** 类似 Obsidian Publish 的悬浮预览功能,用户无需跳转页面即可查看其他文档概要,减少上下文切换时间[^2]。 4. **灵活协作与分享** 支持团队协作编辑,也可用于个人或小规模私密场景。文档可导出为 Markdown 格式,或通过 API 实现整站数据迁移。 --- #### 二、技术架构 Outline 的技术栈清晰且现代化: - **后端**:Node.js + Postgres - **缓存**:Redis - **存储**:S3 兼容对象存储(如 AWS S3、MinIO) - **部署**:通过 Docker 或手动配置环境变量: ```bash git clone git@github.com/outline/outline.git cd outline cp .env.sample .env # 配置环境变量 ``` --- #### 三、适用场景 Outline 广泛适用于: 1. **初创团队**:快速搭建轻量级知识库,集中管理产品文档和会议记录[^3]。 2. **大型企业**:通过权限控制实现部门间安全协作[^1]。 3. **学术团体**:高效整理研究资料,支持多版本导出与分享。 --- #### 四、优势总结 - **数据自主性**:避免第三方云服务的数据风险。 - **无缝协作**:从编辑到发布全流程支持团队协作。 - **高效检索**:内置全文搜索,快速定位内容。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值