Messaging1(二)|学习笔记

简介: 快速学习 Messaging1(二)

开发者学堂课程【高校精品课-上海交通大学-企业级应用体系架构:Messaging1】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/75/detail/15828


Messaging1(一)

 

内容介绍:

一、回顾上节内容

二、参考文件

三、异步通信

四、JMS

五、编程类型

 

四、JMS

Java 中有一个 JMS,就是 java 消息服务的 API,专门做消息服务,先来讲解收发消息的一个机制。

The format of message is elastic, including three parts:

- A header   //消息头

- Properties (optional)  //消息属性

- A body (optional)  //消息值

在 JMS 中比之前多了一个属性。消息头是有关消息的一些属性,属性是除了消息头外的属性,都是属性,但有两个差异:header 是固定数量,定义好一定键值对可以写,其它不能写。Properties 可以进行扩充,即自定义的属性可以放入(可以认为一个是定长的,一个是变长的,可以放入用户自己的属性例如自定义一些属性未来做筛选的一些因素)。两个合并是在描述 body 特定的一些属性。

消息头中包含:

- JMSDestination (S)  //发送到哪里,谁收到

-JMSDeliveryMode (S)  //发送的模式,例如发一次失败了就不再发还是失败了不断尝试转发

- JMSMessageID (S)   //消息id

- JMSTimestamp (S)  //消息时间戳

-JMSCorrelationID (C)  //一个消息很大不能在一个消息中发送走,可能分成几个消息发送,希望这几个消息关联起来,例 如 A 关联着 B,B 关联 C,C 关联 D,但是四个消息合并起来会成为一个单一的消息。可以在 A 的 CorrelationID中写 B,B 中写 C

-JMSReplyTo (C)   //想让接收到消息的人回消息往何处回

- JMSRedelivered (P)   //标识当前消息是否被重发过,在上述模式中认为消息一定要发送到,那么第一次消息发送失败后第二次再发送再尝试

- JMSType (C)  //消息类型,在java中除字符串还有其它类型

-JMSExpiration (S)  //消息何时过期,规定时间内过期就进行删除

- JMSPriority (S)   //优先级,后来的在时间顺序上晚但是发送的优先级高,那么就会先进行发送,例如后买的快递是优先发货,那么就会被先送到。

Header 中有三种角色:S、C、P 。 S 是调用 send 方法时由 jms 的实现包填入,C 是 cloud,由自己填入,例如A与B关联或者往何处回消息或者类型都是允许自己设置的,P 是消息服务器例如接收到消息的邮局自己填入标记。

整个消息头不能够扩展。

消息属性中包含:

-JMSXUserID (S)   //谁

-JMSXAppID(S)  //哪个应用发的

-JMSXDeliveryCount (S)   //如果已经被触发,发送多少次

-JMSXGroupID (C)  //如果是一堆消息,在哪个组中

-JMSXGroupSeq (C)   //在组中的顺序

-JMSXProducerTXID (S)  //这组消息同时被接受或者同时被发送,要在一个事务中执行,该事务是什么

-JMSXConsumerTXID (S)   //同时被发送,该事务是什么

-JMSXRcvTimestamp (S)  //什么时候被接收

-JMSXState (P)  //状态,例如有效状态或过时状态

消息属性对header进行一些补充,可以进行扩展。

- Property name: follows the rule of naming selectors

- Property value: boolean, byte, short, int, long, float, double, String

扩展时提供一个属性名,一个属性值。属性名遵循一般 id 的标识的方式,类型为基本类型加 String。

可以看到无论是 header 还是 properties,具体都不太关心,因为大量由系统设置,只有 C 可以自己设置。C 中有很多不是显示设置,是由系统帮助进行设置,例如创建一个文本消息自动就会设置消息的 type。关键是可以扩展,需要使用。 

消息体:

一个消息的类型就由消息体的类型决定

Message Type                            

Body Contains 

TextMessage          

A java.lang.String object (for example, the contents of an XML

file).

//文本消息,消息体整个是一个字符串 

MapMessage    

A set of name-value pairs, with names as String objects and

values asprimitive types in the Java programming

language.The entries can be accessed sequentially by

enumerator or randomly by name. The order of the entries is

undefined

//消息体整个放入 map 键值对 

BytesMessage      

A stream of uninterpreted bytes.This message type is for

literally encoding a body to match an existing message

format.

//字节流,与其它一些消息现有的主流格式兼容 

StreamMessage      

A stream of primitive values in the Java programming

language, filled and read sequentially.

//流,java 编程中的流,可以是 URL 流,file 流,自定义流 

ObjectMessage      

A Serializable object in the Java programming language.

//可序列化 

Message          

Nothing.Composed of header fields and properties only.This

message type is useful when a message body is not required.

//以上五种消息都为 Message 的子类。Message 本身表示没有消息

块。例如 A 给 B 发消息,B 说收到,像这种应答消息就不需要消息体,

只需要在消息头和属性中写入相关内容即可。所以特殊情况下写入

nothing 空消息体。不同的消息指消息体类型不同

相关文章
|
5月前
|
数据处理 开发者 监控
揭秘实时Web应用开发:WebSocket与Akka Streams如何让Play Framework如虎添翼?
【8月更文挑战第31天】实时Web应用需求日益增长,覆盖了从即时通讯到在线游戏等多个领域。Play Framework结合WebSocket与Akka Streams,简化了高效实时应用的开发。WebSocket提供全双工通信,使服务器能主动向客户端推送消息;Akka Streams支持声明式数据流处理,有效避免系统因数据处理不及时而崩溃。本文通过示例代码展示了如何利用这些技术构建实时股票报价系统,展现了其在实时数据处理方面的强大能力。掌握这一技术组合,将大幅提升你在实时Web应用开发中的效率与稳定性。
62 0
|
消息中间件 SQL Java
Messaging1(三)|学习笔记
快速学习 Messaging1(三)
127 0
Messaging1(三)|学习笔记
|
消息中间件 存储 负载均衡
Messaging2(三)|学习笔记
快速学习 Messaging2(三)
126 0
Messaging2(三)|学习笔记
|
消息中间件 缓存 前端开发
Messaging2(二)|学习笔记
快速学习 Messaging2(二)
Messaging2(二)|学习笔记
|
消息中间件 Java Kafka
Messaging2(一)|学习笔记
快速学习 Messaging2(一)
107 0
Messaging2(一)|学习笔记
|
消息中间件 传感器 算法
Messaging1(一)|学习笔记
快速学习 Messaging1(一)
127 0
Messaging1(一)|学习笔记
|
安全 Java 编译器
Security1 1(二)|学习笔记
快速学习 Security1 1(二)
Security1 1(二)|学习笔记
|
安全 Java 数据安全/隐私保护
Security1 1(三)|学习笔记
快速学习 Security1 1(三)
104 0
Security1 1(三)|学习笔记
|
安全 小程序 Java
Security1 1(一)|学习笔记
快速学习 Security1 1(一)
Security1 1(一)|学习笔记
|
前端开发 JavaScript 开发者
less-bootstrap 定制(o2o)|学习笔记
快速学习 less-bootstrap 定制(o2o)
less-bootstrap 定制(o2o)|学习笔记