MQ消息中间件
MQ = Message Queue,消息中间件
MQ的种类:Kafka(java/scala)、RabbitMQ(erlang)、RocketMQ(java)、ActiveMQ(java)
1、ActiveMQ入门
两大默认端口:61616,8161
1、api发送和接收
2、MQ的高可用性
3、MQ的集群和容错配置
4、MQ的持久化
5、延时发送/定时投递
6、签收机制
7、Spring整合
8、编程语言:Java
2、安装:
1、官网下载;
2、上传到/opt(第三方软件)下面;
3、解压缩:tar -zxvf apache-active....;
4、根目录下mkdir /myactivemq;
5、拷贝:cp -r 文件夹 /myactivemq/;
6、普通启动:./activemq start;
7、activemq的默认进程端口,默认61616:ps -ef|grep activemq|grep -v grep,netstat -anp|grep 61616,lsof -i:61616;
8、关闭:./activemq stop;
ActiveMQ控制台:
windows和Linux互ping。
3、JMS:java消息服务:编码实现
创建步骤:
1、创建连接工厂ActiveMQConnectionFactory;
2、通过连接工厂,获得连接connection并且启动访问;
3、创建会话session;
4、创建目的地,queue或者topic;
5、创建消息消费者或者消息生产者;
6、生产消息或者消费消息;
7、关闭资源。
点对点(一对一):queue;
发布订阅(一对多):topic,先启动生产,再启动订阅;
1、先生产,只启动1号消费者:1号消费者可以消费消息吗:YES; 2、先生产,先启动1号消费者再启动2号消费者:1号消费者和2号消费者可以消费消息吗:1号:YES,2号:NO; 3、先启动2个消费者,生产6条消息,消费情况?:一人一半:轮询分发:YES
JMS:java message service,
Java EE是一套使用Java进行企业级应用开发的大家一致遵循的13个核心规范工业标准。
Java消息服务指的是两个应用程序之间进行异步通信的API,它为标准消息协议和消息服务提供了一组通用接口,包括创建、发送、读取消息等,用于支持JAVA应用程序开发。在JavaEE中,当两个应用程序使用JMS进行通信时,它们之间并不是直接相连的,而是通过一个共同的消息收发服务组件关联起来以达到解耦/异步削峰的效果。
4、四大落地产品比较
特性 | ActiveMQ | RabbitMQ | Kafka | RocketMQ |
---|---|---|---|---|
点对点 | 支持 | 支持 | 支持 | 支持 |
发布订阅 | 支持 | 支持 | 支持 | 支持 |
REQUEST-REPLY | 支持 | 支持 | - | 支持 |
API完备性 | 高 | 高 | 高 | 低(静态配置) |
多语言支持 | 支持,Java优先 | 语言无关 | 支持,Java优先 | 支持 |
单机吞吐量 | 万级 | 万级 | 十万级 | 单机万级 |
消息延迟 | - | 微秒级 | 毫秒级 | - |
可用性 | 高(主从) | 高(主从) | 非常高(分布式) | 高(主从) |
消息丢失 | - | 低 | 理论上不会丢失 | - |
消息重复 | - | 可控制 | 理论上会有重复 | - |
文档的完备性 | 高 | 高 | 高 | 中 |
提供快速入门 | 有 | 有 | 有 | 无 |
首次部署维度 | - | 低 | 中 | 高 |
JMS组成的四大元素
1、JMS provider
实现JMS接口和规范的消息中间件,也就是MQ服务器。
2、JMS producer
消息生产者,创建和发送JMS消息的客户端应用。
3、JMS consumer
消息消费者,接收和处理JMS消息的客户端应用。
4、JMS message = 消息头 + 消息体 + 消息属性
①、消息头:
JMSDestination:目的地;
JMSDel