JMS(Java消息服务)

导语

在SOA架构中,将一个分布式项目,划分成多个模块,但各个模块间可能有复杂的调用关系(耦合度高,维护代价高)。

要改善系统模块调用关系、减少模块之间的耦合,其中一种解决方案为:消息中间件

什么是JMS

jms的全称叫做Java message service (Java消息服务) 
jms是jdk底层定义的规范, 各大厂商实现的是这个规范的技术

作用:

在soa分布式架构系统中, 或者企业中的多个项目中, 进行多个系统异步传递消息.

优点:
	1. 使用消息服务器当做大的队列使用, 先进先出, 来处理高并发写入操作
	2. 使用消息服务器可以将业务系统的串行执行改为并行执行, 处理效率高, 更合理的榨取服务器的性能.
	3. 改善系统模块调用关系、减少模块之间的耦合
缺点:
	消息中间件实时性不高, 因为发送方将消息发送给消息服务器后, 消息服务器未必能够立即处理, 主要看
	消息服务器是否繁忙, 队列中先进先出, 如果数据量大, 要排队等待执行

同步技术:
dubbo是一种同步技术, 实时性高, controller调用service项目, 调用就执行,如果service项目中的代码没有执行完, controller里面的代码一致等待结果.


异步技术:
mq消息中间件技术 (jms)是一种异步技术, 消息发送方, 将消息发送给消息服务器, 消息服务器未必立即处理. 什么时候去处理, 主要看消息服务器是否繁忙,消息进入服务器后会进入队列中, 先进先出.实时性不高.

使用场景:

1. 使用消息服务器当做大的队列使用, 先进先出, 来处理高并发写入操作
2. 使用消息服务器可以将业务系统的串行执行改为并行执行, 处理效率高, 更合理的榨取服务器的性能.

使用场景示例:

1、高并发写入操作(一个接收方:点对点模式)
在这里插入图片描述
2、业务系统并行执行(多个接收方:订阅模式)
在这里插入图片描述

JMS中支持的消息类型:

TextMessage--一个字符串对象
MapMessage--一套名称-值对
ObjectMessage--一个序列化的 Java 对象
BytesMessage--一个字节的数据流
StreamMessage -- Java 原始值的数据流

JMS中的两种发送模式(重点):

点对点模式: 一个发送方, 一个接收方. 也可以多个发送方, 一个接收方, 主要是接收方必须是一个.

订阅发布模式: 一个发送方, 多个接收方.	发送方也可以是多个, 主要看接收方, 接收方必须是多个

如何保证消息服务器不丢消息, 也就是不丢数据:

答: activemq消息服务器, 它有两种发送模式点对点和订阅发布。

点对点:
	不用管, 消息服务器有内部机制保证绝对不会丢数据.
	原理: 发送方将消息发送给消息服务器后, 消息服务器会将队列中的消息发送给接收方, 接收方接收到
	消息后会给消息服务器返回一个响应, 消息服务器接收到响应后认为消息接收成功, 将队列中这个发送完的
	消息删除, 如果消息服务器在一定时间内没有接受到响应, 则认为消息接收方宕机, 这个时候会将发送完的这个
	消息进行持久化保存, 如果消息接收方服务器从新启动连接消息服务器, 消息服务器会监听到, 会将之前持久化的
	消息从新发送给消息服务器.
	
订阅发布:
	订阅发布模式没有实现保证数据安全的机制, 如果消息服务器将消息发送给接收方, 接收方接收到就算接收到了
	没接收到就算丢了, 也不进行持久化.(如果希望数据安全,可以使用RabbitMQ)

jms消息服务器同类型技术:

ActiveMQ:

是apache的一个比较老牌的消息中间件, 它比较均衡, 既不是最安全的, 也不是最快的.

安全是指保证数据传输不丢失

RabbitMQ:

是阿里巴巴的一个消息中间件, 更适合金融类业务, 它对数据的安全性比较高.能够保证数据不丢失.

ZeroMQ:

史上最快的消息队列系统

Kafka:

Apache下的一个子项目。特点:高吞吐,在一台普通的服务器上既可以达到10W/s的吞吐速率;
完全的分布式系统。适合处理海量数据。(适合大数据处理)
发布了33 篇原创文章 · 获赞 2 · 访问量 958

猜你喜欢

转载自blog.csdn.net/Rhin0cer0s/article/details/103946255