JMS 之 ActiveMQ 第二篇

来源:互联网 发布:网络传销的基本特点是 编辑:程序博客网 时间:2024/05/16 06:42

看完第一篇大概知道JMS-activemq是什么玩意儿了吧。、

本篇介绍一下这个东西在实际项目中的用途,还有他的知识点。保证可以让你实实在在的忽悠面试官。

第三篇我会补充一下 实际开发中遇到的问题,还有一些解决办法。当然了 面试的时候 一般有人试探你到底用过没有,也是很好的题。

JMS的消息格式共五种:

JMS定义了五种不同的消息正文格式,以及调用的消息类型,允许你发送并接收以一些不同形式的数据,提供现有消息格式的一些级别的兼容性。
· StreamMessage -- Java原始值的数据流
· MapMessage--一套名称-值对
· TextMessage--一个字符串对象
· ObjectMessage--一个序列化的 Java对象
· BytesMessage--一个未解释字节的数据流

其中项目中常用的是text  和  object。发送邮件的 ————text的

你们学JMS  是工作需求还是自己想学呢?为啥要学?知道应用场景吗?

应用场景:

大概以下这几种---------异步处理,应用解耦,流量削峰,日志处理,消息通讯。


JMS消息传世模式【两种】

一、点对点(P2P)queue

        是一个生产者和一个消费者之间的

二、发布/订阅(pub/sub) topic    类似于广播

        大家都去订阅消息了,可以有多个消费者了。


TextMessage--一个字符串对象

    在工作中基本都是用来发送JSON的  它就是字符串

· ObjectMessage--一个序列化的 Java对象

      是用来在网络中传输序列化的对象的,也可直接发送对象的,但是必须序列化


工作中遇到的一些问题。

①如何解决消息失败重发

答:如果发送失败,则尝试将消息存储到db,由后台线程定时重试,保证消息一定到达Broker


②如何解决消息发送的顺序性的

答:根据业务把消息,比如说订单号相同的消息发送到同一个队列中


③如何解决消息中间件重复发送消息的

答:一般来说只有网络异常,Consumer启停等异常情况下会出现消息重复,此问题的本质原因是网络调用存在不确定性,
既不成功也不失败的第三种状态,所以才产生了消息重复性问题,最直接的解决办法就是消费端去重,消费过程做到消息幂等性。

④如何解决消息丢失

答:通常来说,消息丢失发生在某个broker不可用或者宕机,造成消息不能发送,导致消息丢失。
解决此类问题最好方式就是多masterslave节点

master节点,一旦Broker重启或者宕机时,会导致整个服务不可用。
master节点,单台机器宕机期间,这台机器上未被消费的消息在机器恢复之前不可订阅,消息实时性会受到受到影响。

为什么说多masterslave节点能解决此类问题呢,比如单个master broker宕机,不影响通信,如果masterslave之间是异步复制
可能会遗漏消息(master宕机并且没有及时复制到salve上去),但是只要master恢复过来,消息还是不会丢失,如果master硬盘损坏
就无法恢复了,这也是它的弊端,然而它的效率稍高。
另一种就是采用同步双写方式,masterslave必须同时写入才会成功,这样哪怕maser宕机,还有slave

 












1 0
原创粉丝点击