- JMS的消息传递跟常用的通信协议有什么区别?
通信协议一般是针对一种具体的通信业务场景,制定了一个规定。是多方都需要遵守的。而jms消息机制,在更加抽象和通用的程度上定义了一个消息传递的规约。适用场景不一样。JMS有自己特定的规范,定义通用的消息格式,和消息传递的模式。
- JMS和SOAP有什么区别?
JMS的消息格式(头信息,属性,消息体)跟SOAP类似,但是SOAP专注于远程服务调用,JMS专注于信息交换。SOAP是两个点的连接系统,JMS是三个点。生产者产生消息,先发到JMS Server,然后由Server传递给消费者处理。
- ‘点对点’与‘发布订阅’模式
假设存在多个消费者,如果一条消息代表一个实体对象,或是不可分的数据,只有一个消费者可以获取到消息。这就是Point to Point模式。一条数据不能重复发给两个消费者。
如果消息是一个可以复制的,或者抽象的东西,情况就不同了。每一条消息,都可以被多个人共享。
- 如何保证消息传递的高效和高可靠性
这就是JMS中的“确认”和“事务”的概念。消费者在接收到信息之后,会发送一个确认给JMS Server,如果JMS Server没有收到确认,就在一定的时间内一直发。
- 持久订阅的概念
你可以想象成,在线期间,你接收了第1、2、3条数据。然后掉线了,不在线期间,系统里多了第4、5条数据,发送给所有的订阅者后,删除了。 之后你又上线了。。。你想要你上次获取的最后一条数据后的第4、5条数据。这个原理就是同时持久化订阅者和topic的消息。topic因为要发送给多个人,默认是非持久化的。Queue默认是持久化的,系统崩溃也不要紧,重启后从介质中恢复消息。
优化JMS性能的几个方面
- 优化存储
- 优化确认
- 尽量快速的消费掉消息
- 尽量异步处理消息