JMS Java message service (Java消息服务)
2019-07-31 21:01 利亚东 阅读(407) 评论(0) 编辑 收藏 举报jms的全称叫做Java message service (Java消息服务) jms是jdk底层定义的规范, 各大厂商都是实现这个
规范的技术
作用:
在soa分布式架构系统中, 或者企业中的多个项目中, 进行多个系统异步传递消息.
优点:
1.使用消息服务器当做大的队列使用, 先进先出, 来处理高并发写入操作
2. 使用消息服务器可以将业务系统的串行执行改为并行执行, 处理效率高, 更合理的榨取服务器的性能.
缺点:
消息中间件实时性不高, 因为发送方将消息发送给消息服务器后, 消息服务器未必能够立即处理, 主要看
消息服务器是否繁忙, 队列中先进先出, 如果数据量大, 要排队等待执行
同步技术:
dubbo是一中同步技术, 实时性高, controller调用service项目, 调用就执行, 如果service项目中的代码没有
执行完, controller里面的代码一致等待结果.
异步技术:
mq消息中间件技术(jms) 是一种异步技术, 消息发送方, 将消息发送给消息服务器, 消息服务器未必立即处理.
什么时候去处理, 主要看消息服务器是否繁忙, 消息进入服务器后会进入队列中, 先进先出.实时性不高.
使用场景:
1. 使用消息服务器当做大的队列使用, 先进先出, 来处理高并发写入操作
2. 使用消息服务器可以将业务系统的串行执行改为并行执行, 处理效率高, 更合理的榨取服务器的性能.
jms消息服务器同类型技术:
ActiveMQ:
是apache的一个比较老牌的消息中间件, 它比较均衡, 既不是最安全的, 也不是最快的.
RabbitMQ:
是阿里巴巴的一个消息中间件, 更适合金融类业务, 它对数据的安全性比较高.能够保证数据不丢失.
ZeroMQ:
史上最快的消息队列系统
Kafka:
Apache下的一个子项目。特点:高吞吐,在一台普通的服务器上既可以达到10W/s的吞吐速率;
完全的分布式系统。适合处理海量数据。
JMS中支持的消息类型:
TextMessage--一个字符串对象
MapMessage--一套名称-值对
ObjectMessage--一个序列化的 Java 对象
BytesMessage--一个字节的数据流
StreamMessage -- Java 原始值的数据流
JMS中的两种发送模式(重点):
点对点模式: 一个发送方, 一个接收方. 也可以多个发送方, 一个接收方, 主要是接收方必须是第一个.
订阅发布模式: 一个发送方, 多个接收方. 发送方也可以是多个, 主要看接收方, 接收方必须是多个
如果保证消息服务器不丢消息, 也就是不丢数据:
答: 我们使用的是activemq消息服务器, 它有两种发送模式点对点和订阅发布
点对点:
不用管, 消息服务器有内部机制保证绝对不会丢数据.
原理: 发送方将消息发送给消息服务器后, 消息服务器会将队列中的消息发送给接收方, 接收方接收到
消息后会给消息服务器返回一个响应, 消息服务器接收到响应后认为消息接收成功, 将队列中这个发送完的
消息删除, 如果消息服务器在一定时间内没有接受到响应, 则认为消息接收方宕机, 这个时候会将发送完的这个
消息进行持久化保存, 如果消息接收方服务器从新启动连接消息服务器, 消息服务器会监听到, 会将之前持久化的
消息从新发送给消息服务器.
订阅发布:
订阅发布模式没有实现保证数据安全的机制, 如果消息服务器将消息发送给接收方, 接收方接收到就算接收到了
没接收到就算丢了, 也不进行持久化.
点对点模拟