1. 消息队列基本知识
1.1 消息队列使用场景
如下图,一个普通的订单支付系统架构,支付网关调用订单系统进行下单,然后调用积分系统去更新用户积分,当并发量很大的情况下,支付网关与微信平台频繁的进行回调,积分系统就会占用支付网关的并发量,而调用积分系统更新积分,并不一定要实时去更新,因此,支付网关调用积分系统更新用户积分的操作就可以放到消息队列来完成,一方面进行解耦,另外一方面也提升了支付网关的QPS:
加入消息队列,系统架构变为:支付网关进行消息的发布,订单洗头和积分系统进行订阅,然后消费支付网关发送来的消息
1.2 JMS
- JMS概念
Java消息服务(Java Message Service),Java平台中关于面向消息中间件的接口;JMS是一种与厂商无关的 API,用来访问消息收发系统消息,它类似于JDBC(Java Database Connectivity)。这里,JDBC 是可以用来访问许多不同关系数据库的 API - JMS特点/因用场景
1)跨平台
2)多语言
3)多项目
4)解耦
5)分布式事务
6)流量控制
7)最终一致性
8)RPC调用 - JMS消息队列使用:JMS消息队列有两种类型,点对象模式和发布订阅模式,区别如下:
点对点模式(消息只能有一个消费者):
发布订阅模式(一个消息有多个消费者,一般处理支付场景时使用):
JMS基本概念:
JMS提供者:Apache ActiveMQ 、RabbitMQ 、Kafka、Notify、MetaQ、RocketMQ
JMS生产者(Message Producer)
JMS消费者(Message Consumer)
JMS消息
JMS队列
JMS主题
1.3 消息队列编程模型
MQ中需要用的一些类
ConnectionFactory :连接工厂,JMS 用它创建连接
Connection :JMS 客户端到JMS Provider 的连接
Session: 一个发送或接收消息的线程
Destination :消息的目的地;消息发送给谁.
MessageConsumer / MessageProducer: 消息接收者,消费者
2. activemq基本使用
2.1 ActiveMQ概要
ActiveMQ5.x消息队列基础特性
1)支持来自Java,C,C ++,C#,Ruby,Perl,Python,PHP的各种跨语言客户端和协议
2)支持许多高级功能,如消息组,虚拟目标,通配符和复合目标
3) 完全支持JMS 1.1和J2EE 1.4,支持瞬态,持久,事务和XA消息
4) Spring支持,ActiveMQ可以轻松嵌入到Spring应用程序中,并使用Spring的XML配置机制进行配置
5) 支持在流行的J2EE服务器(如TomEE,Geronimo,JBoss,GlassFish和WebLogic)中进行测试
6) 使用JDBC和高性能日志支持非常快速的持久化
2.2 ActiveMQ安装
(1)将下载的安装包上传到linux 解压并重命名
(2)创建启动脚本activemq-start.sh
cd /usr/local/mq/activemq5/bin/linux-x86-32
./activemq start
(3)开放activemq端口8161,使windows上的浏览器能够访问虚拟机上的activemq
开放端口:
/sbin/iptables -I INPUT -p tcp --dport 8161 -j ACCEPT
保存:
/etc/rc.d/init.d/iptables save
(4)执行 启动脚本:bash activemq-start.sh,启动activemq
(5) 浏览器访问:
点击Manage ActiveMQ broker 进入管理页面,账号admin 密码admin
Queues:队列
Topics 发布订阅的主题到topic里面,其他的消费者订阅这个topic
Subscribers: 订阅者
Connection 连接数
Network
Scheduled
Send
(6) ActiveMQ基本操作
- 创建队列
创建后自动显示所创建的队列
- 向队列发送消息
返回队列进行查看