介绍 Apache ActiveMQ
Apache ActiveMQ 是Apache软件基金会所研发的开放源代码消息中间件;由于ActiveMQ是一个纯Java程序,因此只需要操作系统支持Java虚拟机,ActiveMQ便可执行。支持Java消息服务(JMS);
- 为什么要用mq(Mq能解决什么问题)?
在高并发环境下,好多数据来不及同步处理,请求往往会发生堵塞;通过使用消息队列,我们可以异步处理请求,从而缓解系统的压力。
RPC和消息中间件的不同很大程度上就是“依赖性”和“同步性”。RPC方式是典型的同步方式,让远程调用像本地调用。消息中间件方式属于异步方式。消息队列是系统级、模块级的通信。RPC是对象级、函数级通信。
消息中间件常常用于:异步处理、应用解耦、流量削峰、日志处理、消息通讯。
1.MQ对比与选型
- 中小型项目用于解耦和异步操作,可考虑ActiveMQ,简单易用,对队列数较多的情况支持不好。
- RabbitMQ,erlang开发,性能较稳定,社区活跃度高,但是不利于做二次开发和维护。ActiveMQ和RabbitMQ都适用于中小型公司,技术挑战不是特别高。
- 大公司,基础架构研发实力较强,用RocketMQ不错,支持海量消息,但并没有实现JMS规范,使用起来很简单。
- 大数据领域、日志采集等场景,Kafka是标准,其社区活跃度也很高。
2.什么是 Java消息服务(JMS) 规范
- JMS即Java消息服务(Java Message Service)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持
3.JMS 体系架构
- JMS提供者(ConnectionFactory) – 连接面向消息中间件的,JMS接口的一个实现。提供者可以是Java平台的JMS实现,也可以是非Java平台的面向消息中间件的适配器 。连接工厂,用于创建连接;
- JMS客户(Connection) – 生产或消费基于消息的Java的应用程序或对象。
- JMS生产者(Message Producer) – 创建并发送消息的JMS客户。
- JMS消费者 (Message Consumer)– 接收消息的JMS客户。
- JMS消息(Session) – 包括可以在JMS客户之间传递的数据的对象。
- JMS队列 (Destination)– 一个容纳那些被发送的等待阅读的消息的区域。与队列名字所暗示的意思不同,消息的接受顺序并不一定要与消息的发送顺序相同。一旦一个消息被 阅读,该消息将被从队列中移走。
- JMS主题 – 一种支持发送消息给多个订阅者的机制。
4.JMS 属性
- Destination(接口/目标)
- Product(生产者)
- Consumer(消费者)
- Broker(消息转发器)
- P2P,Pub/Sub(模型)
– P2P:消息队列(Queue)、发送者(Sender)、接收者(Receiver)