什么是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, kafka
jms在企业中的作用一般适用于以下几种场景:
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):
一个发送方, 一个接收方. 它绝对安全, 能够保证接收方一定会接收到数据.使用消息服务器内部机制实现.
不用认为去考虑数据安全性问题.
内部实现保证数据安全性的原理:
- 发送方将数据发送给消息服务器
- 消息服务器在队列中保存消息, 先进先出, 将数据发送给接收方
- 如果接收方没有宕机成功接收了消息, 则返回响应给消息服务器, 消息服务器
接收到响应后会将发送成功的数据从队列中删除 - 如果接收方宕机, 那么在一定的时间内没有返回响应给消息服务器, 消息服务器认为,
消息发丢了, 则将队列中没有发送成功的数据持久化到消息服务器的硬盘上. - 如果宕机的消息接收方重启后, 会连接消息服务器, 消息服务器会再次将持久化的数据发送给
消息接收方, 消息接收方接收到数据后会返回响应, 消息服务器接收到响应收将持久化的数据
删除.发送成功.
订阅发布模式(topic):
一个发送方, 多个接收方, 发送接收数据不安全, 一旦接收方宕机, 数据有可能接收不到, 丢失.无法找回.
如果想要数据安全, 换用其他消息中间件技术.
转载于:https://www.cnblogs.com/lei0913/p/10851337.html