消息中间件ActiveMQ和JMS基础

Posted yangj-blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了消息中间件ActiveMQ和JMS基础相关的知识,希望对你有一定的参考价值。

MQ主要流程

技术图片

 

 解耦,异步,消峰

其中目的地主要为队列或者主题

技术图片

 

 

 

队列点对点

消息的生产者

技术图片

 

 

 

技术图片

技术图片

或者

 技术图片 

 技术图片

技术图片

这时消息的生产者名字已经出来

并且入队的数量变成了3

技术图片

 

 

 

上述完成的也就是这部分

技术图片

 

 

 

 消息的消费者

前四步大同小异

技术图片

 

 

 技术图片

 

 

 这里需要和消息发送者的类型一致,所以需要强转一下

 其中等待接收可以设置为一直等或者设置时长

技术图片

 

 

 最后再加上判断,良好的编程习惯

技术图片

 

 

 执行一下技术图片

 

 

 

技术图片

 

 

 出队变成了3,消费连接数变成了1,并且因为设置的receive为一直等,所以消费数量不会变化,除非关闭程序

不过这种方法是阻塞的

技术图片

 

 

 

=====================

=====================

2通过监听的方式来消费消息(像是安卓中的监听事件)

前5步不变,从while处改变

技术图片

 

 

 加上System.in.read是让程序持续运行,不输入即一直运行,输入了然后就关闭,正好给消费时间

不然不写这部分,程序运行速度肯定超过消费速度

===============================

===============================

搞清楚了生产者消费者的基础程序和概念之后下面看一个重点

消费生产的冲突问题---三大消费问题

技术图片

 

 

 

=================================

=================================

=================================

主题发布订阅-一对多

与队列基本一致,改一改名字和目的地即可

生产者

技术图片

 

 

 消费者同理也是如此操作即可

最后再说下MQ中间件的产品很多:kafka,RocketMQ,而学习了activeMQ基本原理相通,

JMS

而MQ基本属于JMS规范( JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。)

技术图片

 

 

 技术图片

 

 

 而jms常见的问题就是保障消息可靠性保证,

1持久非持久2事务3签收

 

技术图片

 

 

 这就是涉及到消息头中的DeliveryMode

消息头

 

技术图片

 

 

 1JMSDestination 目的地技术图片

 

 

 2JMSDeliveryMode 持久非持久模式

技术图片

 

 

 技术图片

 

 

 3JMSExpiration 过期时间

技术图片

 

 

 4   JMSPriority 优先级

技术图片

 

 

 技术图片

 

 

 5JMSMessageID 唯一识别编号

消息调用的幂等性就需要这个唯一识别编号

技术图片

 

 

 

当然最后看了上面的一个一个设置消息头是不是很麻烦,上面只是为了演示方法,还可以通过send统一批处理

技术图片

 

 

 消息体

技术图片

 

 

 技术图片

 

 

 消息属性-更进一步增加识别度

技术图片

 

 

 技术图片

 

 

怎样用:

 技术图片

 

 

 

 JMS可靠性

技术图片

 

 1持久设置

这也是前面消息头讲过的

技术图片

 

 技术图片

 

 2事务设置(偏生产者)

生产者事务

技术图片

 

 前面我们都是用的false下面如设置为true看看

技术图片

 

 为什么false这么方便,自动提交还需要false呢

因为事务的特性:同生共死

所以再写代码时应该是这样用,假设一个生产者挂了,这一事务(加入有十个生产者)就因为都不能执行,这时应让事务回滚重新执行

即:正常给你提交,错误就再给你机会回滚直到生产成功

看看下面伪代码

技术图片

 

 3签收设置(偏消费者)

技术图片

 

 技术图片

 

 

技术图片

 

 前面的情况是非事务,如果按照事务的情况,你设置手动的情况不ACK都不影响了

如一样可以接受

技术图片

 

 

技术图片

技术图片

以上是关于消息中间件ActiveMQ和JMS基础的主要内容,如果未能解决你的问题,请参考以下文章

ActiveMQ——理解和掌握JMS

消息中间件--ActiveMQ&JMS消息服务

ActiveMQ基础教程JMS概述

ActiveMQ基础教程(一)JMS概述

ActiveMQ(02):JMS基本概念和模型

消息中间件之JMS实践(ActiveMQ)