目录 MQ标准1 1Openmessaging介绍1 2openmessaging内容介绍2 消息模型3 openmessaging使用样例4MQ标准1Openmessaging介绍 Openmessaging云原生,与厂商中立,分布式消息开放标准。 消息在数据处理,限制架构中被使用,例如(fordecoupling)队列,缓存,有序,副本化等,当数据在不同消息和流平台传输时,出现了复杂的问题,意味着更多的工作内容。虽然JMS在过去一段时间是一个好方案,在java环境中有一定的缺陷,在负载均衡,熔断处理,权限处理,安全和流处理缺少明确的标准,使得不满足现在云原生的消息流应用。 openmessaging标准在于:语言不限,平台独立,消息支持多平台,架构和系统全面的,云原生,厂商中立,工业级分布式消息便于(Facilitating)使用基准测试来测试应用性能云数据消息流更加灵活,独立,安全,规模化(scalability)打造贡献者成长生态圈 标准不包含:指定语言运行api性能评估基准测试接口和其他系统数据交换连接接口2openmessaging内容介绍 对象 Namespace独立命名空间,资源隔离; Topic表明和消息投递方向,保存和持有消息; Producer发送消息到topic; Consumer消费topic中收到的消息; Routingtopic消息是服务侧的,不是消费侧的,routing负责通过pipeline将消息从topic移动到queue; Queue封装了消息目的地的管理对象,queue被分成了分区,分区使用特定方法; Deliverysemantics描述了投递机制,在producer和consumer之间存在三个机制保证:至少一次:至少被消费一次最多一次:最多被消费一次,消息可能丢失只是一次:被消费一次,仅仅一次 topic和queue有哪些区别?topic和queue都是用来承载messagetopic面向的是生产者,queue面向的是消费者topic里消息来自生产者,queue里消息来自topic或直接来自生产者queue被分成了分区,topic没有这样的定义大多数情况下queue是topic数据小子集合创建和销毁queue和生产者无关,很easy 数据类型,在属性中,这些抽象数据类型可以使用 String:可以打印的unicode字符串 Binary:字节序列 Keyvalue:字典类型。键类型为string,值类型为string,binary,numeric Numeric:short:15次方的范围 Integer:31次方的范围 Long63次方的范围 Float32比特浮点数据 Double64比特浮点数据 Object:string,binary,keyvalue,numeric的泛型 URI:string表示urireference,遵守RFC3985消息模型消息类型字节型 消息体包含了连续的流字节,消息体会迭代匹配存在的消息类型格式。自定义消息类型去编码消息体,厂商负责在规则下解码这些字节数据。消息格式 包含:版本,凭证,系统头,扩展头和消息体Version:string,消息标准版本,需要填写Header:keyvalue,所有消息支持同样的头区域集合,这些区域集合用来验证身份和投递消息,需要填写extensionHeader:扩展头,keyvalue,消息中间件扩展元数据。不是必要的,将来大多数消息中间件会实现相关内容,这些区域很多开发消息流的人都广泛了解Properties:keyvalue,除了消息头,用户可以通过这些区域去传递一些属性Data:字节,传输的数据部分,包含应用的数据,完全对服务端透明,无法查看和修改消息体,可选填写 具体每一部分包含内容描述如下 MessageHeader 消息头 Messageid:string,唯一标识,系统生成值,必填,非空字符串 bornTimestamp:long,客户端发送时间,不是传输时间,传输时间可能延迟,系统自动生成,必填 Bornhost:string,记录消息发送端的本地host,必填非空 Qos:integer,记录消息的投递方式,有三种0,1,2,上文已经提到过三种投递方式 Compression:string,消息体压缩算法,厂商保证接收正常,可选 Destination:string,描述了消息投递逻辑位置,如queue和topic,指定destination后,会送到特定目的地,消息收到后,这个值标识所在queue的逻辑位置。 消息模型案例 { message:{ version:1。0。0, header:{ messageId:7F00000100002873000000000004F49C, destination:orderQueue, bornTimestamp:1533780827824, bornHost:172。24。0。101:10035, compression:gzip, qos:1 }, extensionHeader:{ partition:1, storeTimestamp:1533780827825, storeHost:172。24。0。102:52511, messageKey:orderId103368921567, correlationId:7F00000100002873000000000004F2B4, delayTime:30000, transactionId:1E0578887D3F18B4AAC22B64D2B40A62, expireTime:1533780830000, traceId:1E0578887D3F18B4AAC22B64D2B00A5E, priority:1 }, properties:{ service:helloService }, data:{ } } }openmessaging使用样例P2PPublishSubscribeBroadcastHighwayStreamingFilterRoutingRPCP2P 点对点发送,最简单,从生产者到消费者,队列只有一个分区Publishsubscribe 发布,订阅,发送消息到队列有多个分区,分区算法是roundrobin或hash方式,这些分区按照特定方式指派给了订阅这个queue的消费者Broadcast 广播下发送到queue消息会被所有消费者消费。Highway 高速路下,关注消息速度,生产者发送大量不重要的消息到queue,实现的方式是批量处理Streaming streamingConsumer在这种场景使用,集成streaming和bigdata平台。支持指定queue多个分区消息的处理。Filter 过滤方式,消费者关注特定消息,可以通过filter进行过滤,再放入queue中Replication 复制冗余转发方式,在不同平台上,多区域复制,然后其他区域也可消费消息。RPC Rpc等同于同步消息,不是传统c2s模式,是c2s2c模式