消息即为数据(data),数据有必定的规则、长度、大小。java
Java Message Service(Java消息服务)简称JMS,为Java 程序提供一种通用的方式,来建立、发送、接收以及读取企业消息系统的消息。数据库
标准JMS(JSR914):https://www.jcp.org/en/jsr/detail?id=914 apache
JMS 元素:服务器
一、Provider提供方:服务提供者网络
二、Producer生产者:建立和发送JMS消息的客户端架构
三、Consumer消费者:接收JMS消息的客户端异步
四、Client客户端:生产或消费消息的应用&进程分布式
五、Message消息:服务端与客户端之间的传输数据对象ide
六、Queue队列 :包含待读取消息的准备区域(点对点)性能
七、Topic主题:发布消息的分布机制(发布&订阅)
JMS提供五种消息主体:
一、BytesMessage(字节)
二、StreamMessage(流)
三、TextMessage(文本、字符串)
四、MapMessage(属性集合)
五、ObjectMessage(对象)
中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不一样的技术之间共享资源。中间件位于客户机/ 服务器的操做系统之上,管理计算机资源和网络通信,为咱们提供发送消息的程序或者服务。
主流消息中间件有:
一、ActiveMq(严格jms jsr914)
二、RabbitMq
三、RocketMq
四、Kafka
.....等多种不常是在开发中使用的消息中间件。
最重要的带来异步以及系统之间的解耦。
未使用MQ的系统之间调用状况图:
使用MQ的系统之间调用状况图:带来了异步(提升订单系统的性能),系统进行了解耦
由国内阿里开源 java语言写的。贡献给apache ,做为apache 的维护开发。简称Rmq并无严格遵循jms规范(参考)。自己电商背景有关。
RcoketMQ 是一款低延迟、高可靠、可伸缩、易于使用的消息中间件,由java进行开发。
一、稳定无单点故障 不会由于某台机器或者某个节点宕机而影响系统正常使用
二、 集群功能完善
三、经历过双十一
四、Java语言实现
五、架构轻、源码可读性好
七、生态圈完善,配套好
八、开源社区活跃
消息生产者,生产者的做用就是将消息发送到 MQ,生产者自己既能够产生消息,如读取文本信息等。也能够对外提供接口,由外部应用来调用接口,再由生产者将收到的消息发送到 MQ。
生产者组,简单来讲就是多个发送同一类消息的生产者称之为一个生产者组。在这里能够不用关心,只要知道有这么一个概念便可。
消息消费者,简单来讲,消费 MQ 上的消息的应用程序就是消费者,至于消息是否进行逻辑处理,仍是直接存储到数据库等取决于业务须要。
消费者组,和生产者相似,消费同一类消息的多个 consumer 实例组成一个消费者组。
Topic 是一种消息的逻辑分类,好比说你有订单类的消息,也有库存类的消息,那么就须要进行分类,一个是订单 Topic 存放订单相关的消息,一个是库存 Topic 存储库存相关的消息。
Message 是消息的载体。一个 Message 必须指定 topic,至关于寄信的地址。Message 还有一个可选的 tag 设置,以便消费端能够基于 tag 进行过滤消息。也能够添加额外的键值对,例如你须要一个业务 key 来查找 broker 上的消息,方便在开发过程当中诊断问题。
标签能够被认为是对 Topic 进一步细化。通常在相同业务模块中经过引入标签来标记不一样用途的消息。
Broker 是 RocketMQ 系统的主要角色,其实就是前面一直说的 MQ。Broker 接收来自生产者的消息,储存以及为消费者拉取消息的请求作好准备。
Name Server 为 producer 和 consumer 提供路由信息。
http://rocketmq.apache.org/docs/simple-example