192.168.200.128:8161
什么是Jms
jms全称叫做java message service (java消息服务)是jdk底层定义的协议.各大厂商都有实现的产品.JMS的作用: jms的作用是在系统也系统间进行异步传递数据 同步: a系统调用B系统中的方法, a发送请求调用让B系统执行, 之后后返回结果. a系统一直等待B处理完成后返回结果 再继续往下执行代码, 如果B没有返回结果之前, A系统一直处于等待状态. 例如: dubbo, springCloud, webService 异步: A发送消息(一条数据)向消息服务器, 消息服务器再将消息(数据)发送给B系统. A将消息发送给消息服务器后, 不会等待, 立即执行下面的代码或者是操作, 不会等待B系统的执行. 例如: JMS技术, activeMq, rabbitMq, roketMq, zeroMq, kafkajms在企业中的作用一般适用于以下几种场景:
a. 系统和系统间解耦 b. 使用JMS技术可以抗住流量压力洪峰 c. 广播发送, 系统间可以解耦并且, 将串行执行改为并行执行, 加快执行效率, 合理分配硬件资源.JMS的同类型产品(重点):
a. activeMq: 一个老牌的apache下的消息中间件产品, 特点就是均衡, 不是最安全的也不是最快的. b. rabbitMq: 比较安全, 保证数据不发丢. c. zeroMq: 史上最快的队列系统, 可以用它来抗住压力洪峰. d. kafka 史上发送接收速度最快的消息中间件产品(一般大数据使用), 对于数据安全性完全不考虑 e. roketMq: 一般使用roketMq来实现分布式事务(数据最终一致性方案), roketMq中有分布式消息级别事务的支持. roketMq是阿里巴巴公司研发, 现已经捐献给apache, 所以现在是apache的顶级项目.JMS支持的发送和接收的数据类型(重点):
• TextMessage--一个字符串对象 (纯文本) • MapMessage--一套名称-值对 (web类型消息) • ObjectMessage--一个序列化的 Java 对象 (onject类型包含实体类---一定要实现序列化接口) • BytesMessage--一个字节的数据流 (字节流) • StreamMessage -- Java 原始值的数据流 (io流)JMS的两种发布模式(重点): queue发送模式(点对点模式): 一个消息发送方, 一个消息接收方. 也可以是多个消息发送方, 一个消息接收方. (一个接收方) topic主题发送模式(发布订阅模式): 一个消息发送方, 多个消息接收方, 也可以是多个消息发送方, 多个消息接收方. (多个接收方) activeMq中两种发送模式的特点: 点对点发送模式(Queue):一个发送方, 一个接收方. 它绝对安全, 能够保证接收方一定会接收到数据.使用消息服务器内部机制实现. 不用认为去考虑数据安全性问题. 内部实现保证数据安全性的原理: 1. 发送方将数据发送给消息服务器 2. 消息服务器在队列中保存消息, 先进先出, 将数据发送给接收方 3. 如果接收方没有宕机成功接收了消息, 则返回响应给消息服务器, 消息服务器 接收到响应后会将发送成功的数据从队列中删除 4. 如果接收方宕机, 那么在一定的时间内没有返回响应给消息服务器, 消息服务器认为, 消息发丢了, 则将队列中没有发送成功的数据持久化到消息服务器的硬盘上. 5. 如果宕机的消息接收方重启后, 会连接消息服务器, 消息服务器会再次将持久化的数据发送给 消息接收方, 消息接收方接收到数据后会返回响应, 消息服务器接收到响应收将持久化的数据 删除.发送成功. 订阅发布模式(topic): 一个发送方, 多个接收方, 发送接收数据不安全, 一旦接收方宕机, 数据有可能接收不到, 丢失.无法找回. 如果想要数据安全, 换用其他消息中间件技术.