消息中间件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基础的主要内容,如果未能解决你的问题,请参考以下文章