一、JMS介绍和使用场景及基础编程模型
简介:讲解什么是小写队列,JMS的基础知识和使用场景
1、什么是JMS: Java消息服务(Java Message Service),Java平台中关于面向消息中间件的接口2、JMS是一种与厂商无关的 API,用来访问消息收发系统消息,它类似于JDBC(Java Database Connectivity)。这里,JDBC 是可以用来访问许多不同关系数据库的 API
3、使用场景:
1)跨平台
2)多语言
3)多项目
4)解耦
5)分布式事务(业务涉及多个表比如:转账)
6)流量控制(访问量)
7)最终一致性
8)RPC调用
上下游对接,数据源变动->通知下属
4.案例分析
1)网购支付流程:不用消息中间件服务(使用用户流量少的情况)
2)当用户非常多的时候显然我们的支付网关容易崩溃,同时支付网关之后的系统等待时间可能过长,所以需要用到消息服务
分析:支付网关将信息放到消息服务之后,不需要等待积分或是订单系统的执行,提高了系统的并发性和承受的流量(积分订单系统订阅消息)
5、概念
JMS提供者:Apache ActiveMQ、RabbitMQ、Kafka、Notify、MetaQ、RocketMQ
JMS生产者(Message Producer)
JMS消费者(Message Consumer)
JMS消息
JMS队列
JMS主题
JMS消息通常有两种类型:点对点(Point-to-Point)、发布/订阅(Publish/Subscribe)
3)消息点对点类型(单个系统)
4)发布/订阅(Publish/Subscribe)
微信支付就是这种模式
二、ActiveMQ5.x消息队列基础介绍和安装
简介:介绍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和高性能日志支持非常快速的持久化(重要消息放到mysql或是日志作为备份)
...
1、下载地址:http://activemq.apache.org/activemq-5153-release.html
127.0.0.1是activeMq安装的服务器,默认端口号8161
6、用户名和密码默认都是admin验证这是消息服务的保护措施
登入后的页面:ActiveMQ控制台
1)Home | Queues | Topics | Subscribers | Connections | Network | Scheduled | Send
Support
主页| 队列| 主题| 订阅者| 连接| 网络| 预定| 发送
支持
2)Queues创建
面板说明:
Name:队列名称。
Number Of Pending Messages:等待消费的消息个数。
Number Of Consumers:当前连接的消费者数目
Messages Enqueued:进入队列的消息总个数,包括出队列的和待消费的,这个数量只增不减。
Messages Dequeued:已经消费的消息数量。
3)向消息队列发送消息
结果
三、SpringBoot2.x整合ActiveMQ实战之点对点消息(p2p)
消息 消费者和消息生产者可以在一个工程也可以在不同的工程
简介:SpringBoot2.x整合ActiveMQ实战之点对点消息
1、官网地址:https://docs.spring.io/spring-boot/docs/2.1.0.BUILD-SNAPSHOT/reference/htmlsingle/#boot-features-activemq
2、加入依赖
<!-- 整合消息队列ActiveMQ -->
3、application.properties配置文件配置
4、springboot启动类 @EnableJms,开启支持jms
1)service接口
2)实现
3)controller
4)控制台创建队列
5)启动工程访问
6)刷新
7)再发送
消息变成两条
5、消费者:实时监听对应的队列()
@JmsListener(destination = "order.queue")
1) 建立一个jms包下面建立OrderConsumer 类
2)启动工程之前写的报文都收到了
3)刷新控制台
4)再添加消息
6.测一下默认的队列comment.queue
1)和OrderConsumer 类一样
2)
3)
四、SpringBoot整合ActiveMQ实战之发布订阅模式(pub/sub)
简介:SpringBoot整合ActiveMQ实战之发布订阅模式(pub/sub),及同时支持点对点和发布订阅模型
1、需要加入配置文件,支持发布订阅模型,默认只支持点对点
#default point to point
spring.jms.pub-sub-domain=true
注意点:
1、默认消费者并不会消费订阅发布类型的消息,这是由于springboot默认采用的是p2p模式进行消息的监听
1) 修改配置:spring.jms.pub-sub-domain=true
2)在程序入口处加入topic对象,好处是启动程序new 一次可以多次使用
3)ProducerService接口添加如下代码
4)实现类ProducerServiceImpl
5)controller
6)启动程序,访问
7)
8)TopicSub :模拟一个订阅者
9)启动访问
10)模拟三个订阅者
11)访问
12)此时存在一个问题:点对点模式没有生效
我们测点对点时,并没有消费者
13)@JmsListener如果不指定独立的containerFactory的话是只能消费queue消息
也就是只支持一种模式
//需要给topic定义独立的JmsListenerContainer
a) 在配置文件里面,注释掉 #spring.jms.pub-sub-domain=true
b)在程序入口加入
c) 修改订阅者container:containerFactory="jmsListenerContainerTopic"
14)order点对点模式,
15)发布订阅模式